update po files, plus a few fixes and improvements
[goodguy/history.git] / cinelerra-5.1 / cinelerra / file.C
index 103c9a4d3b5e1810021604ab2803719d3a677343..ddc1a459c0d51db2d63a9ed871bea77806b34d42 100644 (file)
@@ -65,6 +65,7 @@
 #include "formattools.h"
 #include "framecache.h"
 #include "language.h"
+#include "mainprogress.inc"
 #include "mutex.h"
 #include "mwindow.h"
 #include "packagingengine.h"
@@ -710,12 +711,9 @@ int File::close_file(int ignore_thread)
 
 
 
-int File::get_index(char *index_path)
+int File::get_index(IndexFile *index_file, MainProgressBar *progress_bar)
 {
-       if(file) {
-               return file->get_index(index_path);
-       }
-       return 1;
+       return !file ? -1 : file->get_index(index_file, progress_bar);
 }
 
 
@@ -1171,13 +1169,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 +1241,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++;
@@ -1439,6 +1433,7 @@ int File::get_best_colormodel(Asset *asset, int driver)
                case FILE_CR2:
                case FILE_CR2_LIST:     return FileCR2::get_best_colormodel(asset, driver);
                case FILE_DB:           return FileDB::get_best_colormodel(asset, driver);
+               case FILE_FFMPEG:       return FileFFMPEG::get_best_colormodel(asset, driver);
        }
 
        return BC_RGB888;