+ProxyRender::ProxyRender(MWindow *mwindow, Asset *format_asset)
+{
+ this->mwindow = mwindow;
+ this->format_asset = format_asset;
+ progress = 0;
+ counter_lock = new Mutex("ProxyDialog::counter_lock");
+ total_rendered = 0;
+ failed = 0; canceled = 0;
+}
+
+ProxyRender::~ProxyRender()
+{
+ delete progress;
+ delete counter_lock;
+
+ for( int i=0,n=orig_idxbls.size(); i<n; ++i ) orig_idxbls[i]->remove_user();
+ for( int i=0,n=orig_proxies.size(); i<n; ++i ) orig_proxies[i]->remove_user();
+ for( int i=0,n=needed_idxbls.size(); i<n; ++i ) needed_idxbls[i]->remove_user();
+ for( int i=0,n=needed_proxies.size(); i<n; ++i ) needed_proxies[i]->remove_user();
+}
+
+Asset *ProxyRender::add_original(Indexable *idxbl, int new_scale)
+{
+ if( !idxbl->have_video() ) return 0;
+ if( idxbl->get_video_frames() <= 0 ) return 0;
+// don't proxy proxies
+ if( strstr(idxbl->path,".proxy") ) return 0;
+ char new_path[BCTEXTLEN];
+ to_proxy_path(new_path, idxbl, new_scale);
+// don't proxy if not readable
+ if( idxbl->is_asset && access(idxbl->path, R_OK) ) return 0;
+// add to orig_idxbls & orig_proxies if it isn't already there.
+ int got_it = 0;
+ for( int i = 0; !got_it && i<orig_proxies.size(); ++i )
+ got_it = !strcmp(orig_proxies[i]->path, new_path);
+ if( got_it ) return 0;
+ Assets *edl_assets = mwindow->edl->assets;
+ Asset *proxy = edl_assets->get_asset(new_path);
+ if( !proxy ) {
+ proxy = new Asset(new_path);
+// new compression parameters
+ proxy->copy_format(format_asset, 0);
+ proxy->awindow_folder = AW_PROXY_FOLDER;
+ proxy->audio_data = 0;
+ proxy->video_data = 1;
+ proxy->layers = 1;
+ proxy->width = idxbl->get_w() / new_scale;
+ if( proxy->width & 1 ) ++proxy->width;
+ proxy->actual_width = proxy->width;
+ proxy->height = idxbl->get_h() / new_scale;
+ if( proxy->height & 1 ) ++proxy->height;
+ proxy->actual_height = proxy->height;
+ proxy->frame_rate = idxbl->get_frame_rate();
+ proxy->video_length = idxbl->get_video_frames();
+ edl_assets->append(proxy);
+ }
+ proxy->add_user();
+ orig_proxies.append(proxy);
+ idxbl->add_user();
+ orig_idxbls.append(idxbl);
+ return proxy;
+}
+
+void ProxyRender::add_needed(Indexable *idxbl, Asset *proxy)
+{
+ needed_idxbls.append(idxbl);
+ idxbl->add_user();
+ needed_proxies.append(proxy);
+ proxy->add_user();
+}
+
+void ProxyRender::update_progress()