purge file_cache when starting rev read cache burst
authorGood Guy <good1.2guy@gmail.com>
Sat, 12 Sep 2020 20:01:52 +0000 (14:01 -0600)
committerGood Guy <good1.2guy@gmail.com>
Sat, 12 Sep 2020 20:01:52 +0000 (14:01 -0600)
cinelerra-5.1/cinelerra/ffmpeg.C
cinelerra-5.1/cinelerra/ffmpeg.h
cinelerra-5.1/cinelerra/filebase.C
cinelerra-5.1/cinelerra/filebase.h

index 57232271b1473e750337eda8886b838df12e6f65..f0eea9c5be34a5627494378052861e515c7548ad 100644 (file)
@@ -1225,13 +1225,15 @@ int FFVideoStream::load(VFrame *vframe, int64_t pos)
        while( ret>=0 && !flushed && curr_pos<=pos && --i>=0 ) {
                ret = read_frame(frame);
                if( ret > 0 ) {
-                       if( frame->key_frame && seeking < 0 )
+                       if( frame->key_frame && seeking < 0 ) {
                                seeking = 1;
-                       if( ffmpeg->file_base->get_use_cache() && seeking > 0 && curr_pos < pos ) {
-                               VFrame *cache_frame = ffmpeg->file_base->new_cache_frame(vframe, curr_pos);
+                               ffmpeg->purge_cache();
+                       }
+                       if( ffmpeg->get_use_cache() && seeking > 0 && curr_pos < pos ) {
+                               VFrame *cache_frame = ffmpeg->new_cache_frame(vframe, curr_pos);
                                if( cache_frame ) {
                                        ret = convert_cmodel(cache_frame, frame);
-                                       ffmpeg->file_base->put_cache_frame();
+                                       ffmpeg->put_cache_frame();
                                }
                        }
                        ++curr_pos;
@@ -2231,6 +2233,26 @@ int FFMPEG::scan_options(const char *options, AVDictionary *&opts, AVStream *st)
        return ret;
 }
 
+VFrame *FFMPEG::new_cache_frame(VFrame *vframe, int64_t position)
+{
+       return file_base->file->new_cache_frame(vframe, position, 0);
+}
+
+void FFMPEG::put_cache_frame()
+{
+       return file_base->file->put_cache_frame();
+}
+
+int FFMPEG::get_use_cache()
+{
+       return file_base->file->get_use_cache();
+}
+
+void FFMPEG::purge_cache()
+{
+       file_base->file->purge_cache();
+}
+
 FFCodecRemap::FFCodecRemap()
 {
        old_codec = 0;
index aa01785a449020e8969931b20345c69b452533b9..9ceef1547776ce97a505050dc291a318d3d6298a 100644 (file)
@@ -368,6 +368,11 @@ public:
        static double to_secs(int64_t time, AVRational time_base);
        int info(char *text, int len);
 
+       VFrame *new_cache_frame(VFrame *vframe, int64_t position);
+       void put_cache_frame();
+       int get_use_cache();
+       void purge_cache();
+
        int init_decoder(const char *filename);
        int open_decoder();
        int init_encoder(const char *filename);
index e2e148919983507615811af7a35ffc12c142ba9e..dc73ccc5fcd0fe66ffaf3062a37e76f051801647 100644 (file)
@@ -299,17 +299,3 @@ int64_t FileBase::base_memory_usage()
                history_allocated * history_channels * sizeof(double);
 }
 
-
-VFrame *FileBase::new_cache_frame(VFrame *vframe, int64_t position)
-{
-       return file->new_cache_frame(vframe, position, 0);
-}
-void FileBase::put_cache_frame()
-{
-       return file->put_cache_frame();
-}
-int FileBase::get_use_cache()
-{
-       return file->get_use_cache();
-}
-
index 77893f9e82ac9d7c3b1b35c38583dfe9225625b4..3fb8be42087ac8195bc442357355cbaeeb2e35c7 100644 (file)
@@ -132,10 +132,6 @@ public:
                int channel,
                int64_t len);
        void allocate_history(int len);
-// create cache frames
-       VFrame *new_cache_frame(VFrame *vframe, int64_t position);
-       void put_cache_frame();
-       int get_use_cache();
 
 // For static functions to access it
        Asset *asset;