add bump floatautos, add time_references for align timecodes, add menuitem create_key...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / proxy.C
index edeb394ac0fe4d61595045117dfd8b4cb5500289..fff64f37fb1eb850e8df5505f818f3abc4bcc871 100644 (file)
@@ -229,11 +229,11 @@ void ProxyRender::to_proxy_path(char *new_path, Indexable *indexable, int scale)
 //printf("ProxyRender::to_proxy_path %d %s %s\n", __LINE__, new_path), asset->path);
 }
 
-int ProxyRender::from_proxy_path(char *new_path, Indexable *indexable, int scale)
+int ProxyRender::from_proxy_path(char *new_path, Asset *asset, int scale)
 {
        char prxy[BCTEXTLEN];
        int n = sprintf(prxy, ".proxy%d", scale);
-       strcpy(new_path, indexable->path);
+       strcpy(new_path, asset->path);
        char *ptr = strstr(new_path, prxy);
        if( !ptr || (ptr[n] != '-' && ptr[n] != '.') ) return 1;
 // remove proxy, path.proxy#-sfx.ext => path.sfx
@@ -242,6 +242,12 @@ int ProxyRender::from_proxy_path(char *new_path, Indexable *indexable, int scale
        char *cp = ptr + n;
        for( *cp='.'; cp<ext; ++cp ) *ptr++ = *cp;
        *ptr = 0;
+       if( asset->proxy_edl ) {
+               if( (cp = strrchr(new_path, '/')) != 0 ) {
+                       for( ptr=new_path; *++cp; ) *ptr++ = *cp;
+                       *ptr = 0;
+               }
+       }
        return 0;
 }
 
@@ -307,6 +313,7 @@ Asset *ProxyRender::add_original(Indexable *idxbl, int new_scale)
                        proxy->video_length = video_frames;
                }
                proxy->folder_no = AW_PROXY_FOLDER;
+               proxy->proxy_edl = !idxbl->is_asset ? 1 : 0;
                proxy->audio_data = 0;
                proxy->video_data = 1;
                proxy->layers = 1;
@@ -358,8 +365,10 @@ int ProxyRender::create_needed_proxies(int new_scale)
        }
 
 // start progress bar.  MWindow is locked inside this
+       mwindow->gui->lock_window("ProxyRender::create_needed_proxies");
        progress = mwindow->mainprogress->
                start_progress(_("Creating proxy files..."), total_len);
+       mwindow->gui->unlock_window();
 
        ProxyFarm engine(mwindow, this, &needed_idxbls, &needed_proxies);
        engine.process_packages();
@@ -648,7 +657,8 @@ ProxyClient::ProxyClient(MWindow *mwindow,
 ProxyClient::~ProxyClient()
 {
        delete render_engine;
-       delete video_cache;
+       if( video_cache )
+               video_cache->remove_user();
        delete src_file;
 }