X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fproxy.C;h=420592ea7e7ec7268928f51a687ff9e8b7d70615;hb=2ce5f3585284c78107b6eab879ee4e94686ff41a;hp=3acfa42247b0a12118d0d53d065d45dfe8efb10f;hpb=540f653df26e5e2d1249de1f7a1a3d888dddf341;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/proxy.C b/cinelerra-5.1/cinelerra/proxy.C index 3acfa422..420592ea 100644 --- a/cinelerra-5.1/cinelerra/proxy.C +++ b/cinelerra-5.1/cinelerra/proxy.C @@ -161,12 +161,18 @@ void ProxyDialog::calculate_sizes() void ProxyDialog::handle_close_event(int result) { if( result ) return; - mwindow->edl->session->proxy_use_scaler = use_scaler; + if( !File::renders_video(asset) ) { + eprintf("Specified format does not render video"); + return; + } mwindow->edl->session->proxy_auto_scale = auto_scale; mwindow->edl->session->proxy_beep = beep; mwindow->edl->session->proxy_disabled_scale = 1; + mwindow->gui->lock_window("ProxyDialog::handle_close_event"); + mwindow->gui->update_proxy_toggle(); + mwindow->gui->unlock_window(); asset->save_defaults(mwindow->defaults, "PROXY_", 1, 1, 0, 0, 0); - result = mwindow->to_proxy(asset, new_scale); + result = mwindow->to_proxy(asset, new_scale, use_scaler); if( result >= 0 && beep && new_scale != 1 ) { static struct { double freq, secs, gain; } tone[2] = { { 2000., 1.5, 0.5 }, { 4000., 0.25, 0.5 } }; @@ -194,9 +200,11 @@ void ProxyRender::to_proxy_path(char *new_path, Indexable *indexable, int scale) sfx = ep; ep += n; } for( char *cp=prxy; --n>=0; ++cp ) *sfx++ = *cp; - const char *ext = format_asset->format == FILE_FFMPEG ? - format_asset->fformat : File::get_tag(format_asset->format); *ep++ = '.'; + const char *ext = indexable->get_video_frames() < 0 ? "png" : + format_asset->format == FILE_FFMPEG ? + format_asset->fformat : + File::get_tag(format_asset->format); while( *ext ) *ep++ = *ext++; *ep = 0; //printf("ProxyRender::to_proxy_path %d %s %s\n", __LINE__, new_path), asset->path); @@ -242,7 +250,6 @@ ProxyRender::~ProxyRender() 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]; @@ -259,7 +266,16 @@ Asset *ProxyRender::add_original(Indexable *idxbl, int new_scale) if( !proxy ) { proxy = new Asset(new_path); // new compression parameters - proxy->copy_format(format_asset, 0); + int64_t video_frames = idxbl->get_video_frames(); + if( video_frames < 0 ) { + proxy->format = FILE_PNG; + proxy->png_use_alpha = 1; + proxy->video_length = -1; + } + else { + proxy->copy_format(format_asset, 0); + proxy->video_length = video_frames; + } proxy->awindow_folder = AW_PROXY_FOLDER; proxy->audio_data = 0; proxy->video_data = 1; @@ -271,10 +287,7 @@ Asset *ProxyRender::add_original(Indexable *idxbl, int 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); @@ -463,6 +476,7 @@ void ProxyUseScaler::update() int ProxyUseScaler::handle_event() { + pwindow->dialog->new_scale = 1; pwindow->dialog->use_scaler = get_value(); pwindow->scale_factor->update_sizes(); pwindow->update(); @@ -650,6 +664,7 @@ void ProxyClient::process_package(LoadPackage *ptr) result = dst_file.open_file(preferences, proxy, 0, 1); if( result ) { proxy_render->failed = 1; + ::remove(proxy->path); return; } @@ -660,8 +675,10 @@ void ProxyClient::process_package(LoadPackage *ptr) VFrame src_frame(src_w,src_h, edl->session->color_model); OverlayFrame scaler(processors); + int64_t video_length = orig->get_video_frames(); + if( video_length < 0 ) video_length = 1; - for( int64_t i=0, length=orig->get_video_frames(); ifailed && !proxy_render->is_canceled(); ++i ) { if( orig->is_asset ) { src_file->set_video_position(i, 0); @@ -697,6 +714,8 @@ void ProxyClient::process_package(LoadPackage *ptr) mwindow->mainindexes->add_next_asset(0, asset); mwindow->mainindexes->start_build(); } + else + ::remove(proxy->path); }