Skip to content

Commit

Permalink
Lock (and disable) jack for CanvasViews while jack enabled in Preview
Browse files Browse the repository at this point in the history
  • Loading branch information
blackwarthog authored and morevnaproject committed Mar 31, 2015
1 parent 4ceeb41 commit c4ee3e2
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
18 changes: 18 additions & 0 deletions synfig-studio/src/gui/preview.cpp
Expand Up @@ -386,6 +386,7 @@ Widget_Preview::Widget_Preview():
jack_enabled(false),
jack_is_playing(false),
jack_time(0),
jack_initial_time(0),
jack_offset(0),
#ifdef WITH_JACK
jack_client(NULL),
Expand Down Expand Up @@ -607,6 +608,7 @@ Widget_Preview::Widget_Preview():

studio::Widget_Preview::~Widget_Preview()
{
set_jack_enabled(false);
}

void studio::Widget_Preview::update()
Expand Down Expand Up @@ -1353,6 +1355,9 @@ void Widget_Preview::set_jack_enabled(bool value) {
jack_enabled = value;
if (jack_enabled)
{
// lock jack in canvas views
App::jack_lock();

// initialize jack
jack_client = jack_client_open("synfigstudiopreview", JackNullOption, 0);
jack_set_sync_callback(jack_client, jack_sync_callback, this);
Expand All @@ -1361,14 +1366,27 @@ void Widget_Preview::set_jack_enabled(bool value) {
jack_client_close(jack_client);
jack_client = NULL;
jack_enabled = false;
App::jack_unlock();
} else {
// remember time
on_jack_sync();
jack_initial_time = jack_time;
}
}
else
{
// restore time
jack_nframes_t sr = jack_get_sample_rate(jack_client);
jack_nframes_t nframes = ((double)sr * (jack_initial_time));
jack_transport_locate(jack_client, nframes);

// deinitialize jack
jack_deactivate(jack_client);
jack_client_close(jack_client);
jack_client = NULL;

// unlock jack in canvas views
App::jack_unlock();
}

//jackdial->toggle_enable_jack(jack_enabled);
Expand Down
1 change: 1 addition & 0 deletions synfig-studio/src/gui/preview.h
Expand Up @@ -322,6 +322,7 @@ class Widget_Preview : public Gtk::Table
bool jack_is_playing;
synfig::Time jack_time;
synfig::Time jack_offset;
synfig::Time jack_initial_time;

bool get_jack_enabled() { return jack_enabled; }
void set_jack_enabled(bool value);
Expand Down

0 comments on commit c4ee3e2

Please sign in to comment.