X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffileref.C;h=094c44ec8c9cb21de5c1a38e0dfc95338bf00765;hb=eb92703b595daa1dc6bd3de884dd41b995551f60;hp=ab8ecd7f05acd7357c27658947df85bf9876a467;hpb=4c207ab325a8e8e6b79a9a18d4647273b5f59f93;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/fileref.C b/cinelerra-5.1/cinelerra/fileref.C index ab8ecd7f..094c44ec 100644 --- a/cinelerra-5.1/cinelerra/fileref.C +++ b/cinelerra-5.1/cinelerra/fileref.C @@ -22,6 +22,7 @@ #include "asset.h" #include "arender.h" #include "cache.h" +#include "edl.h" #include "filebase.h" #include "file.h" #include "fileref.h" @@ -75,8 +76,27 @@ int FileREF::open_file(int rd, int wr) if( ref ) ref->remove_user(); ref = new EDL; ref->create_objects(); - ref->load_xml(&file_xml, LOAD_ALL); - command = new TransportCommand(); + if( ref->load_xml(&file_xml, LOAD_ALL) ) { + ref->remove_user(); + ref = 0; + eprintf(_("Error loading Reference file:\n%s"), asset->path); + return 1; + } + if( !asset->layers ) asset->layers = ref->get_video_layers(); + asset->video_data = asset->layers > 0 ? 1 : 0; + asset->video_length = asset->video_data ? ref->get_video_frames() : 0; + asset->actual_width = asset->video_data ? ref->get_w() : 0; + asset->actual_height = asset->video_data ? ref->get_h() : 0; + if( !asset->width ) asset->width = asset->actual_width; + if( !asset->height ) asset->height = asset->actual_height; + if( !asset->frame_rate ) asset->frame_rate = ref->get_frame_rate(); + strcpy(asset->vcodec, "REF"); + asset->channels = ref->get_audio_channels(); + asset->audio_data = asset->channels > 0 ? 1 : 0; + asset->sample_rate = ref->get_sample_rate(); + asset->audio_length = asset->audio_data ? ref->get_audio_samples() : 0; + strcpy(asset->acodec, "REF"); + command = new TransportCommand(file->preferences); command->reset(); command->get_edl()->copy_all(ref); command->command = NORMAL_FWD; @@ -101,8 +121,8 @@ int FileREF::close_file() ref = 0; delete render_engine; render_engine = 0; delete command; command = 0; - delete acache; acache = 0; - delete vcache; vcache = 0; + if( acache ) { acache->remove_user(); acache = 0; } + if( vcache ) { vcache->remove_user(); vcache = 0; } delete temp; temp = 0; for( int i=0; i