X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffile.C;h=f5932e3e8f07a58a1e2b89ac9c50d126443b452d;hb=5820b5f022aeec75ec03f7dd0121aa8a3d7f7590;hp=103c9a4d3b5e1810021604ab2803719d3a677343;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/file.C b/cinelerra-5.1/cinelerra/file.C index 103c9a4d..f5932e3e 100644 --- a/cinelerra-5.1/cinelerra/file.C +++ b/cinelerra-5.1/cinelerra/file.C @@ -1171,13 +1171,11 @@ int File::read_frame(VFrame *frame, int is_thread) if(debug) PRINT_TRACE int supported_colormodel = colormodel_supported(frame->get_color_model()); int advance_position = 1; - + int cache_active = use_cache || asset->video_length < 0 ? 1 : 0; + int64_t cache_position = asset->video_length >= 0 ? current_frame : -1; // Test cache - if(use_cache && - frame_cache->get_frame(frame, - current_frame, - current_layer, - asset->frame_rate)) + if( cache_active && frame_cache->get_frame(frame, cache_position, + current_layer, asset->frame_rate) ) { // Can't advance position if cache used. //printf("File::read_frame %d\n", __LINE__); @@ -1245,11 +1243,9 @@ int File::read_frame(VFrame *frame, int is_thread) //for(int i = 0; i < 100 * 1000; i++) ((float*)frame->get_rows()[0])[i] = 1.0; } -//printf("File::read_frame %d use_cache=%d\n", __LINE__, use_cache); - if(use_cache) - frame_cache->put_frame(frame, - current_frame, current_layer, - asset->frame_rate, 1, 0); + if( cache_active && advance_position && frame->get_status() > 0 ) + frame_cache->put_frame(frame, cache_position, + current_layer, asset->frame_rate, 1, 0); //printf("File::read_frame %d\n", __LINE__); if(advance_position) current_frame++;