Basic jump to selected subtitle (#1200).
[dcpomatic.git] / src / wx / film_viewer.cc
index ccb2b790de4fe816e03c7846967ebff5b581b1b4..9f42aaad25798c18729bab2b162693290e2c3319 100644 (file)
@@ -251,13 +251,18 @@ FilmViewer::recreate_butler ()
                        map.set (i, i, 1);
                }
        } else {
-               /* Special case: stereo output, at least 3 channel input, map L+R to L/R and
-                  C to both, all 3dB down.
+               /* Special case: stereo output, at least 3 channel input.
+                  Map so that Lt = L(-3dB) + Ls(-3dB) + C(-6dB) + Lfe(-10dB)
+                              Rt = R(-3dB) + Rs(-3dB) + C(-6dB) + Lfe(-10dB)
                */
-               map.set (0, 0, 1 / sqrt(2)); // L -> L
-               map.set (1, 1, 1 / sqrt(2)); // R -> R
-               map.set (2, 0, 1 / sqrt(2)); // C -> L
-               map.set (2, 1, 1 / sqrt(2)); // C -> R
+               map.set (dcp::LEFT,   0, 1 / sqrt(2)); // L -> Lt
+               map.set (dcp::RIGHT,  1, 1 / sqrt(2)); // R -> Rt
+               map.set (dcp::CENTRE, 0, 1 / 2.0); // C -> Lt
+               map.set (dcp::CENTRE, 1, 1 / 2.0); // C -> Rt
+               map.set (dcp::LFE,    0, 1 / sqrt(10)); // Lfe -> Lt
+               map.set (dcp::LFE,    1, 1 / sqrt(10)); // Lfe -> Rt
+               map.set (dcp::LS,     0, 1 / sqrt(2)); // Ls -> Lt
+               map.set (dcp::RS,     1, 1 / sqrt(2)); // Rs -> Rt
        }
 
        _butler.reset (new Butler (_player, _film->log(), map, _audio_channels));
@@ -421,6 +426,7 @@ FilmViewer::slider_moved (bool page)
        }
 
        DCPTime t (_slider->GetValue() * _film->length().get() / 4096);
+       t = t.round (_film->video_frame_rate());
        /* Ensure that we hit the end of the film at the end of the slider */
        if (t >= _film->length ()) {
                t = _film->length() - one_video_frame();
@@ -751,6 +757,12 @@ FilmViewer::set_position (DCPTime p)
        update_position_slider ();
 }
 
+void
+FilmViewer::set_position (shared_ptr<Content> content, ContentTime t)
+{
+       set_position (_player->content_time_to_dcp (content, t));
+}
+
 void
 FilmViewer::set_coalesce_player_changes (bool c)
 {