X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffileref.C;h=a60b3f3e4e5b678a75a69b0543a91af868c7cee8;hb=071118a29f7a9b123cd313fca29bdc65368613ca;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..a60b3f3e 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,7 +76,26 @@ 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); + 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(); command->reset(); command->get_edl()->copy_all(ref); @@ -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