titler rework, some code cleanup and fixes
[goodguy/history.git] / cinelerra-5.1 / cinelerra / edl.C
index d32d38b566892062a9e932b51e885eda66f3b235..41ee55b4fddd716757ef560dc68fc29cc13f61bc 100644 (file)
@@ -75,9 +75,9 @@ EDL::EDL(EDL *parent_edl)
 
        folders.set_array_delete();
 
-       new_folder(CLIP_FOLDER);
-
-       new_folder(MEDIA_FOLDER);
+// persistent for now
+//     new_folder(CLIP_FOLDER);
+//     new_folder(MEDIA_FOLDER);
 
        id = next_id();
        path[0] = 0;
@@ -278,6 +278,8 @@ int EDL::load_xml(FileXML *file,
                                        if((load_flags & LOAD_VCONFIG) &&
                                                (load_flags & LOAD_SESSION))
                                                session->load_video_config(file, 0, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is("AUDIO"))
@@ -285,6 +287,8 @@ int EDL::load_xml(FileXML *file,
                                        if((load_flags & LOAD_ACONFIG) &&
                                                (load_flags & LOAD_SESSION))
                                                session->load_audio_config(file, 0, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is("FOLDER"))
@@ -298,12 +302,16 @@ int EDL::load_xml(FileXML *file,
                                {
                                        if(load_flags & LOAD_ASSETS)
                                                assets->load(file, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is(labels->xml_tag))
                                {
                                        if(load_flags & LOAD_TIMEBAR)
                                                labels->load(file, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is("LOCALSESSION"))
@@ -311,6 +319,8 @@ int EDL::load_xml(FileXML *file,
                                        if((load_flags & LOAD_SESSION) ||
                                                (load_flags & LOAD_TIMEBAR))
                                                local_session->load_xml(file, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is("SESSION"))
@@ -318,6 +328,8 @@ int EDL::load_xml(FileXML *file,
                                        if((load_flags & LOAD_SESSION) &&
                                                !parent_edl)
                                                session->load_xml(file, 0, load_flags);
+                                       else
+                                               result = file->skip_tag();
                                }
                                else
                                if(file->tag.title_is("TRACK"))
@@ -746,7 +758,7 @@ double EDL::equivalent_output(EDL *edl)
 }
 
 
-void EDL::set_path(char *path)
+void EDL::set_path(const char *path)
 {
        strcpy(this->path, path);
 }
@@ -1286,48 +1298,12 @@ void EDL::get_shared_tracks(Track *track,
 // Convert position to frames if cursor alignment is enabled
 double EDL::align_to_frame(double position, int round)
 {
-//printf("EDL::align_to_frame 1 %f\n", position);
-       if(session->cursor_on_frames)
-       {
-// Seconds -> Frames
-               double temp = (double)position * session->frame_rate;
-//printf("EDL::align_to_frame 2 %f\n", temp);
-
-// Assert some things
-               if(session->sample_rate == 0)
-                       printf("EDL::align_to_frame: sample_rate == 0\n");
-
-               if(session->frame_rate == 0)
-                       printf("EDL::align_to_frame: frame_rate == 0\n");
-
-// Round frames
-// Always round down negative numbers
-// but round up only if requested
-               if(round)
-               {
-                       temp = Units::round(temp);
-               }
-               else
-               {
-//                     if(temp < 0)
-//                     {
-//                             temp -= 0.5;
-//                     }
-//                     else
-                               temp = Units::to_int64(temp);
-               }
-//printf("EDL::align_to_frame 3 %f\n", temp);
-
-// Frames -> Seconds
-               temp /= session->frame_rate;
-
-//printf("EDL::align_to_frame 5 %f\n", temp);
-
-               return temp;
+       if( session->cursor_on_frames && session->frame_rate > 0 ) {
+               double frame_no = position * session->frame_rate;
+               int64_t frame_pos = frame_no + (round ? 0.5 : 1e-6);
+               double pos = frame_pos / session->frame_rate;
+               if( !EQUIV(pos, position) ) position = pos;
        }
-//printf("EDL::align_to_frame 3 %d\n", position);
-
-
        return position;
 }
 
@@ -1464,7 +1440,7 @@ if(debug) printf("EDL::get_use_vconsole %d\n", __LINE__);
 // Asset and output device must have same resulting de-interlacing method
        if( ilaceautofixmethod2(session->interlace_mode,
            asset->interlace_autofixoption, asset->interlace_mode,
-           asset->interlace_fixmethod) != BC_ILACE_FIXMETHOD_NONE )
+           asset->interlace_fixmethod) != ILACE_FIXMETHOD_NONE )
                return 1;
 
 // If we get here the frame is going to be directly copied.  Whether it is