X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffile.C;h=4b9c1be85a5ccc60c4544442de152593834e2b7b;hb=38cb4182e11e57fc426bede3825e825e9d61433b;hp=2d1c4af26758eadbe4b1da6b4d41ec019ade35b5;hpb=e5d1c3ec8b49e9e4cd31f30e991f52ab11de93b1;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/file.C b/cinelerra-5.1/cinelerra/file.C index 2d1c4af2..4b9c1be8 100644 --- a/cinelerra-5.1/cinelerra/file.C +++ b/cinelerra-5.1/cinelerra/file.C @@ -75,6 +75,7 @@ #include "samples.h" #include "vframe.h" +//static int temp_debug = 0; //suppress noref warning void *vorbis0_ov_callbacks[] = { &OV_CALLBACKS_DEFAULT, &OV_CALLBACKS_NOCLOSE, @@ -99,8 +100,10 @@ File::~File() format_completion->unlock(); } - if( temp_frame ) delete temp_frame; - + if( temp_frame ) { +//printf("File::~File %d temp_debug=%d\n", __LINE__, --temp_debug); + delete temp_frame; + } close_file(0); @@ -298,7 +301,6 @@ void File::set_white_balance_raw(int value) this->white_balance_raw = value; } - void File::set_cache_frames(int value) { // caching only done locally @@ -319,7 +321,7 @@ int File::purge_cache() int File::delete_oldest() { -// caching only done locally +// return the number of bytes freed return frame_cache->delete_oldest(); } @@ -474,8 +476,6 @@ int File::open_file(Preferences *preferences, this->wr = wr; file = 0; - if( debug ) printf("File::open_file %d\n", __LINE__); - if( debug ) printf("File::open_file %p %d\n", this, __LINE__); switch( this->asset->format ) { @@ -1111,15 +1111,9 @@ int File::read_samples(Samples *samples, int64_t len) int File::read_frame(VFrame *frame, int is_thread) { const int debug = 0; - - if( debug ) PRINT_TRACE - -//printf("File::read_frame %d\n", __LINE__); - +//printf("File::read_frame pos=%jd cache=%d 1frame=%d\n", +// current_frame, use_cache, asset->single_frame); if( video_thread && !is_thread ) return video_thread->read_frame(frame); - -//printf("File::read_frame %d\n", __LINE__); - if( debug ) PRINT_TRACE if( !file ) return 1; if( debug ) PRINT_TRACE int result = 0; @@ -1127,6 +1121,7 @@ int File::read_frame(VFrame *frame, int is_thread) int advance_position = 1; int cache_active = use_cache || asset->single_frame ? 1 : 0; int64_t cache_position = !asset->single_frame ? current_frame : -1; + // Test cache if( cache_active && frame_cache->get_frame(frame, cache_position, current_layer, asset->frame_rate) ) { @@ -1137,8 +1132,9 @@ int File::read_frame(VFrame *frame, int is_thread) // Need temp else if( frame->get_color_model() != BC_COMPRESSED && (supported_colormodel != frame->get_color_model() || - frame->get_w() != asset->width || - frame->get_h() != asset->height) ) { + (!file->can_scale_input() && + (frame->get_w() != asset->width || + frame->get_h() != asset->height))) ) { // printf("File::read_frame %d\n", __LINE__); // Can't advance position here because it needs to be added to cache @@ -1149,14 +1145,8 @@ int File::read_frame(VFrame *frame, int is_thread) } } -// printf("File::read_frame %d\n", __LINE__); if( !temp_frame ) { - temp_frame = new VFrame(0, - -1, - asset->width, - asset->height, - supported_colormodel, - -1); + temp_frame = new VFrame(asset->width, asset->height, supported_colormodel); } // printf("File::read_frame %d\n", __LINE__); @@ -1190,10 +1180,7 @@ int File::read_frame(VFrame *frame, int is_thread) return 0; } -int File::can_copy_from(Asset *asset, - int64_t position, - int output_w, - int output_h) +int File::can_copy_from(Asset *asset, int64_t position, int output_w, int output_h) { if( asset && file ) { return asset->width == output_w && @@ -1393,10 +1380,9 @@ int64_t File::get_memory_usage() } -int File::renders_video(Asset *asset) +int File::renders_video(int format) { -//printf("File::supports_video %d\n", format); - switch( asset->format ) { + switch( format ) { case FILE_OGG: case FILE_JPEG: case FILE_JPEG_LIST: @@ -1412,16 +1398,21 @@ int File::renders_video(Asset *asset) case FILE_TIFF_LIST: case FILE_VMPEG: case FILE_RAWDV: - return 1; case FILE_FFMPEG: - return FileFFMPEG::renders_video(asset->fformat); + return 1; } return 0; } +int File::renders_video(Asset *asset) +{ + return asset->format == FILE_FFMPEG ? + FileFFMPEG::renders_video(asset->fformat) : + renders_video(asset->format); +} -int File::renders_audio(Asset *asset) +int File::renders_audio(int format) { - switch( asset->format ) { + switch( format ) { case FILE_AC3: case FILE_FLAC: case FILE_PCM: @@ -1433,12 +1424,17 @@ int File::renders_audio(Asset *asset) case FILE_AIFF: case FILE_SND: case FILE_RAWDV: - return 1; case FILE_FFMPEG: - return FileFFMPEG::renders_audio(asset->fformat); + return 1; } return 0; } +int File::renders_audio(Asset *asset) +{ + return asset->format == FILE_FFMPEG ? + FileFFMPEG::renders_audio(asset->fformat) : + renders_audio(asset->format); +} int File::is_image_render(int format) {