-
-// convert to new size if not original size
- if( new_scale != 1 ) {
- orig_asset = assets->first;
- for( ; orig_asset; orig_asset=orig_asset->next ) {
- if( !orig_asset->video_data ) continue;
- char new_path[BCTEXTLEN];
- to_proxy_path(new_path, orig_asset, new_scale);
-// add to proxy_assets & orig_assets if it isn't already there.
- int got_it = 0;
- for( int i = 0; !got_it && i<proxy_assets.size(); ++i )
- got_it = !strcmp(proxy_assets[i]->path, new_path);
- if( !got_it ) {
- proxy_asset = new Asset;
-// new compression parameters
- proxy_asset->copy_format(asset, 0);
- proxy_asset->update_path(new_path);
- proxy_asset->audio_data = 0;
- proxy_asset->video_data = 1;
- proxy_asset->layers = 1;
- proxy_asset->width = orig_asset->width / new_scale;
- if( proxy_asset->width & 1 ) ++proxy_asset->width;
- proxy_asset->actual_width = proxy_asset->width;
- proxy_asset->height = orig_asset->height / new_scale;
- if( proxy_asset->height & 1 ) ++proxy_asset->height;
- proxy_asset->actual_height = proxy_asset->height;
- proxy_asset->frame_rate = orig_asset->frame_rate;
- proxy_asset->video_length = orig_asset->video_length;
- proxy_assets.append(proxy_asset);
- orig_asset->add_user();
- orig_assets.append(orig_asset);
- }
-
-// test if proxy file exists.
- int exists = 0;
- FILE *fd = fopen(new_path, "r");
- if( fd ) {
- exists = 1;
- fclose(fd);
- FileSystem fs;
-// got it if proxy file is newer than original.
- got_it = fs.get_date(new_path) > fs.get_date(asset->path);
- }
- else
- got_it = 0;
-
- if( !got_it ) {
- if( exists ) // prompt user to overwrite
- confirm_paths.append(cstrdup(new_path));
-
- needed_assets.append(proxy_asset);
- proxy_asset->add_user();
- needed_orig_assets.append(orig_asset);
- orig_asset->add_user();
-//printf("ProxyThread::handle_close_event %d %s\n", __LINE__, new_path);
- }
- }
-
-// test for existing files
- int result = 0;
- if( confirm_paths.size() ) {
- result = ConfirmSave::test_files(mwindow, &confirm_paths);
- confirm_paths.remove_all_objects();
- }
-
- if( !result ) {
- int canceled = 0;
- failed = 0;
-
-// create proxy assets which don't already exist
- if( needed_orig_assets.size() > 0 ) {
- int64_t total_len = 0;
- for( int i = 0; i < needed_orig_assets.size(); i++ )
- total_len += needed_orig_assets.get(i)->video_length;
-// start progress bar. MWindow is locked inside this
- progress = mwindow->mainprogress->
- start_progress(_("Creating proxy files..."), total_len);
- total_rendered = 0;
-
- ProxyFarm engine(mwindow, this,
- &needed_assets, &needed_orig_assets);
- engine.process_packages();
-printf("failed=%d canceled=%d\n", failed, progress->is_cancelled());
-
-// stop progress bar
- canceled = progress->is_cancelled();
- progress->stop_progress();
- delete progress; progress = 0;
-
- if( failed && !canceled ) {
- int cx, cy;
- mwindow->gui->get_abs_cursor_xy(cx, cy, 1);
- ErrorBox error_box(PROGRAM_NAME ": Error", cx, cy);
- error_box.create_objects(_("Error making proxy."));
- error_box.raise_window();
- error_box.run_window();
- }
- }
-
-// resize project
- if( !failed && !canceled ) {
- mwindow->set_proxy(use_scaler, new_scale, &orig_assets, &proxy_assets);
- }
- }
-
- for( int i = 0; i < proxy_assets.size(); i++ )
- proxy_assets.get(i)->Garbage::remove_user();
- for( int i = 0; i < orig_assets.size(); i++ )
- orig_assets.get(i)->Garbage::remove_user();
- for( int i = 0; i < needed_assets.size(); i++ )
- needed_assets.get(i)->Garbage::remove_user();
- for( int i = 0; i < needed_orig_assets.size(); i++ )
- needed_orig_assets.get(i)->Garbage::remove_user();
- }
-
- mwindow->undo->update_undo_after(_("proxy"), LOAD_ALL);
- mwindow->edl->Garbage::remove_user();
- mwindow->restart_brender();
-
- mwindow->gui->lock_window("ProxyThread::to_proxy");
- mwindow->update_project(LOAD_ALL);
- mwindow->gui->unlock_window();