repeat play, in/out <> shortcuts, append to proj wording, cleanup
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 1de35cb915b1da82e6fa4dd25292a9c7db759477..53b5a1937b5bfca4ff1b8bc3b07264e509f26771 100644 (file)
@@ -1217,7 +1217,7 @@ void MWindow::update_mixer_tracks()
 }
 
 void MWindow::queue_mixers(EDL *edl, int command, int wait_tracking,
-               int use_inout, int update_refresh, int toggle_audio)
+               int use_inout, int update_refresh, int toggle_audio, int loop_play)
 {
        zwindows_lock->lock("MWindow::queue_mixers");
        for( int vidx=0; vidx<zwindows.size(); ++vidx ) {
@@ -1249,14 +1249,14 @@ void MWindow::queue_mixers(EDL *edl, int command, int wait_tracking,
                }
                zwindow->change_source(mixer_edl);
                zwindow->issue_command(command,
-                       wait_tracking, use_inout, update_refresh, toggle_audio);
+                       wait_tracking, use_inout, update_refresh, toggle_audio, loop_play);
        }
        zwindows_lock->unlock();
 }
 
 void MWindow::refresh_mixers()
 {
-       queue_mixers(edl,CURRENT_FRAME,0,0,1,0);
+       queue_mixers(edl,CURRENT_FRAME,0,0,1,0,0);
 }
 
 void MWindow::stop_mixers()
@@ -1264,7 +1264,7 @@ void MWindow::stop_mixers()
        for( int vidx=0; vidx<zwindows.size(); ++vidx ) {
                ZWindow *zwindow = zwindows[vidx];
                if( zwindow->idx < 0 ) continue;
-               zwindow->issue_command(STOP, 0, 0, 0, 0);
+               zwindow->issue_command(STOP, 0, 0, 0, 0, 0);
        }
 }
 
@@ -1550,19 +1550,14 @@ void MWindow::restart_brender()
 //printf("MWindow::restart_brender 1\n");
        if( !brender_active || !preferences->use_brender ) return;
        if( !brender ) return;
-       int locked  = gui->get_window_lock();
-       if( locked ) gui->unlock_window();
        brender->restart(edl);
-       if( locked ) gui->lock_window("MWindow::restart_brender");
 }
 
 void MWindow::stop_brender()
 {
        if( !brender ) return;
-       int locked  = gui->get_window_lock();
-       if( locked ) gui->unlock_window();
+// cannot be holding mwindow->gui display lock
        brender->stop();
-       if( locked ) gui->lock_window("MWindow::stop_brender");
 }
 
 int MWindow::brender_available(int position)
@@ -1604,7 +1599,9 @@ void MWindow::set_brender_active(int v, int update)
        }
        else {
                edl->session->brender_start = edl->session->brender_end = 0;
+               gui->unlock_window();
                stop_brender();
+               gui->lock_window("MWindow::set_brender_active");
        }
        if( update ) {
                gui->update_timebar(0);
@@ -1726,6 +1723,11 @@ void MWindow::stop_playback(int wait)
        }
 }
 
+void MWindow::stop_transport()
+{
+       gui->stop_transport(gui->get_window_lock() ? "MWindow::stop_transport" : 0);
+}
+
 int MWindow::load_filenames(ArrayList<char*> *filenames,
        int load_mode,
        int update_filename)
@@ -3243,7 +3245,6 @@ void MWindow::update_project(int load_mode)
        const int debug = 0;
 
        if(debug) PRINT_TRACE
-       init_brender();
        edl->tracks->update_y_pixels(theme);
 
        if(debug) PRINT_TRACE
@@ -3257,6 +3258,7 @@ void MWindow::update_project(int load_mode)
        gui->update(1, 1, 1, 1, 1, 1, 1);
        if(debug) PRINT_TRACE
        gui->unlock_window();
+       init_brender();
 
        cwindow->gui->lock_window("MWindow::update_project 1");
        cwindow->update(0, 0, 1, 1, 1);
@@ -3283,6 +3285,10 @@ void MWindow::update_project(int load_mode)
                        if( !vwindow->is_running() ) continue;
                        vwindow->close_window();
                }
+               for( int i=0; i<edl->vwindow_edls.size(); ++i ) {
+                       VWindow *vwindow = get_viewer(1, -1);
+                       vwindow->change_source(i);
+               }
                if(debug) PRINT_TRACE
                select_zwindow(0);
                close_mixers();
@@ -3987,29 +3993,9 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra
                if( channels < 1 ) channels = 1;
                if( channels > 6 ) channels = 6;
                session->audio_tracks = session->audio_channels = channels;
-               switch( channels ) {
-               case 6:
-                       session->achannel_positions[0] = 90;
-                       session->achannel_positions[1] = 150;
-                       session->achannel_positions[2] = 30;
-                       session->achannel_positions[3] = 210;
-                       session->achannel_positions[4] = 330;
-                       session->achannel_positions[5] = 270;
-                       break;
-               case 2:
-                       session->achannel_positions[0] = 180;
-                       session->achannel_positions[1] = 0;
-                       break;
-               case 1:
-                       session->achannel_positions[1] = 90;
-                       break;
-               default: {
-                       if( !channels ) break;
-                       double t = 0, dt = 360./channels;
-                       for( int i=channels; --i>=0; t+=dt )
-                               session->achannel_positions[i] = int(t+0.5);
-                       break; }
-               }
+
+               int *achannel_positions = preferences->channel_positions[session->audio_channels-1];
+               memcpy(&session->achannel_positions, achannel_positions, sizeof(session->achannel_positions));
                remap_audio(MWindow::AUDIO_1_TO_1);
 
                if( delete_tracks ) {