}
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, use_scaler);
if( result >= 0 && beep > 0 && new_scale != 1 ) {
else
mwindow->beep(2000., 2.0, beep);
}
+ mwindow->edl->session->proxy_disabled_scale = 1;
+ mwindow->gui->lock_window("ProxyDialog::handle_close_event");
+ mwindow->update_project(LOADMODE_REPLACE);
+ mwindow->gui->unlock_window();
}
void ProxyRender::to_proxy_path(char *new_path, Indexable *indexable, int scale)
{
// path is already a proxy
if( strstr(indexable->path, ".proxy") ) return;
- strcpy(new_path, indexable->path);
+ if( !indexable->is_asset ) {
+ char *ifn = indexable->path, *cp = strrchr(ifn, '/');
+ if( cp ) ifn = cp+1;
+ char proxy_path[BCTEXTLEN];
+ File::getenv_path(proxy_path,
+ mwindow->preferences->nested_proxy_path);
+ sprintf(new_path, "%s/%s", proxy_path, ifn);
+ }
+ else
+ strcpy(new_path, indexable->path);
char prxy[BCSTRLEN];
int n = sprintf(prxy, ".proxy%d", scale);
// insert proxy, path.sfx => path.proxy#-sfx.ext
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
+// don't proxy if not readable, or proxy_path not writable
if( idxbl->is_asset && access(idxbl->path, R_OK) ) return 0;
+ int ret = access(new_path, W_OK);
+ if( ret ) {
+ int fd = ::open(new_path,O_WRONLY);
+ if( fd < 0 ) fd = open(new_path,O_WRONLY+O_CREAT,0666);
+ if( fd >= 0 ) { close(fd); ret = 0; }
+ }
+ if( ret ) {
+ eprintf(_("bad proxy path: %s\n"), new_path);
+ 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 )
}
// 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();
if( !scale ) scale = 1;
asset->width = asset->actual_width * scale;
asset->height = asset->actual_height * scale;
- mwindow->mainindexes->add_next_asset(0, asset);
+ mwindow->mainindexes->add_indexable(asset);
mwindow->mainindexes->start_build();
}
else
return new ProxyPackage;
}
-
-ProxyBeep::ProxyBeep(MWindow *mwindow)
- : Thread(1, 0, 0)
-{
- this->mwindow = mwindow;
- audio = new AudioDevice(mwindow);
- playing_audio = 0;
- interrupted = -1;
-}
-
-ProxyBeep::~ProxyBeep()
-{
- stop(0);
- delete audio;
-}
-
-void ProxyBeep::run()
-{
- int channels = 2;
- int64_t bfrsz = BEEP_SAMPLE_RATE;
- EDL *edl = mwindow->edl;
- EDLSession *session = edl->session;
- AudioOutConfig *aconfig = session->playback_config->aconfig;
- audio->open_output(aconfig, BEEP_SAMPLE_RATE, bfrsz, channels, 0);
- audio->start_playback();
-
- double out0[bfrsz], out1[bfrsz], *out[2] = { out0, out1 };
- const double two_pi = 2*M_PI;
- int64_t audio_len = BEEP_SAMPLE_RATE * secs;
- const double dt = two_pi * freq/BEEP_SAMPLE_RATE;
- double th = 0;
-
- audio_pos = 0;
- playing_audio = 1;
- while( !interrupted ) {
- int len = audio_len - audio_pos;
- if( len <= 0 ) break;
- if( len > bfrsz ) len = bfrsz;
- int k = audio_pos;
- for( int i=0; i<len; ++i,++k,th+=dt ) {
- double t = th - two_pi;
- if( t >= 0 ) th = t;
- out0[i] = out1[i] = sin(th) * gain;
- }
- audio->write_buffer(out, channels, len);
- audio_pos = k;
- }
-
- if( !interrupted )
- audio->set_last_buffer();
- audio->stop_audio(interrupted ? 0 : 1);
- playing_audio = 0;
-
- audio->close_all();
-}
-
-void ProxyBeep::start()
-{
- if( running() ) return;
- audio_pos = -1;
- interrupted = 0;
- Thread::start();
-}
-
-void ProxyBeep::stop(int wait)
-{
- if( running() && !interrupted ) {
- interrupted = 1;
- audio->stop_audio(wait);
- }
- Thread::join();
-}
-
-void ProxyBeep::tone(double freq, double secs, double gain)
-{
- stop(0);
- this->freq = freq;
- this->secs = secs;
- this->gain = gain;
- start();
-}
-