Extract common code out into kdm_for_screen()
[dcpomatic.git] / src / lib / content.cc
index 2ca029d5ae321d9b4f8019b4ac2d031383f70192..a722cd15dae37fde8c2a17554753243d5651aa65 100644 (file)
@@ -52,6 +52,7 @@ using boost::shared_ptr;
 using boost::optional;
 using dcp::raw_convert;
 using dcp::locale_convert;
+using namespace dcpomatic;
 
 int const ContentProperty::PATH = 400;
 int const ContentProperty::POSITION = 401;
@@ -219,7 +220,13 @@ Content::set_position (shared_ptr<const Film> film, DCPTime p, bool force_emit)
                video->modify_position (film, p);
        }
 
-       if (audio) {
+       /* Only allow the audio to modify if we have no video;
+          sometimes p can't be on an integer video AND audio frame,
+          and in these cases we want the video constraint to be
+          satisfied since (I think) the audio code is better able to
+          cope.
+       */
+       if (!video && audio) {
                audio->modify_position (film, p);
        }
 
@@ -245,7 +252,8 @@ Content::set_trim_start (ContentTime t)
                video->modify_trim_start (t);
        }
 
-       if (audio) {
+       /* See note in ::set_position */
+       if (!video && audio) {
                audio->modify_trim_start (t);
        }