-
-// convert to new size if not original size
- if( new_scale != 1 ) {
- for( orig_asset = mwindow->edl->assets->first;
- orig_asset;
- orig_asset = orig_asset->next ) {
- if( orig_asset->video_data ) {
- 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;
- proxy_asset = 0;
- for( int i = 0; i < proxy_assets.size(); i++ ) {
- if( !strcmp(proxy_assets.get(i)->path, new_path) ) {
- got_it = 1;
- proxy_asset = (Asset*)proxy_assets.get(i);
- break;
- }
- }
-
- 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;
- proxy_asset->height = orig_asset->height / new_scale;
- 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 ) {
- got_it = 1;
- exists = 1;
- fclose(fd);
-
- FileSystem fs;
-// test if proxy file is newer than original.
- if( fs.get_date(new_path) < fs.get_date(asset->path) ) {
- got_it = 0;
- }
- }
- else {
-// proxy doesn't exist
- got_it = 0;
- }
-
- if( !got_it ) {
-// prompt user to overwrite
- if( exists ) {
- 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 ) {
- ErrorBox error_box(PROGRAM_NAME ": Error",
- mwindow->gui->get_abs_cursor_x(1),
- mwindow->gui->get_abs_cursor_y(1));
- error_box.create_objects(_("Error making proxy."));
- error_box.raise_window();
- error_box.run_window();
- }
- }
-
-// resize project
- if( !failed && !canceled ) {
- mwindow->set_proxy(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();
- }