Change how video timing is done.
[dcpomatic.git] / src / lib / video_mxf_decoder.cc
index 39c4a37fb865be99d11b0769bdaedec453050b37..9f451297b992d9a9fa0ecc7297aedfc340412b73 100644 (file)
@@ -43,35 +43,22 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const Film> film, shared_ptr<const
 {
        video = make_shared<VideoDecoder>(this, content);
 
-       shared_ptr<dcp::MonoPictureAsset> mono;
        try {
-               mono = make_shared<dcp::MonoPictureAsset>(_content->path(0));
+               auto mono = make_shared<dcp::MonoPictureAsset>(_content->path(0));
+               _mono_reader = mono->start_read ();
+               _mono_reader->set_check_hmac (false);
+               _size = mono->size ();
+               return;
        } catch (dcp::MXFFileError& e) {
                /* maybe it's stereo */
        } catch (dcp::ReadError& e) {
                /* maybe it's stereo */
        }
 
-       shared_ptr<dcp::StereoPictureAsset> stereo;
-       try {
-               stereo = make_shared<dcp::StereoPictureAsset>(_content->path(0));
-       } catch (dcp::MXFFileError& e) {
-               if (!mono) {
-                       throw;
-               }
-       } catch (dcp::ReadError& e) {
-               if (!mono) {
-                       throw;
-               }
-       }
-
-       if (mono) {
-               _mono_reader = mono->start_read ();
-               _size = mono->size ();
-       } else {
-               _stereo_reader = stereo->start_read ();
-               _size = stereo->size ();
-       }
+       auto stereo = make_shared<dcp::StereoPictureAsset>(_content->path(0));
+       _stereo_reader = stereo->start_read ();
+       _stereo_reader->set_check_hmac (false);
+       _size = stereo->size ();
 }
 
 
@@ -89,18 +76,18 @@ VideoMXFDecoder::pass ()
                video->emit (
                        film(),
                        std::make_shared<J2KImageProxy>(_mono_reader->get_frame(frame), _size, AV_PIX_FMT_XYZ12LE, optional<int>()),
-                       frame
+                       _next
                        );
        } else {
                video->emit (
                        film(),
                        std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::LEFT, AV_PIX_FMT_XYZ12LE, optional<int>()),
-                       frame
+                       _next
                        );
                video->emit (
                        film(),
                        std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::RIGHT, AV_PIX_FMT_XYZ12LE, optional<int>()),
-                       frame
+                       _next
                        );
        }