Set up OV/VF in name according to whether DCP content has been referenced.
[dcpomatic.git] / src / lib / ffmpeg_examiner.cc
index bcc5a86a68dbe2b093b95f76702de22df1b64e2e..576782d0bd0d290b447a2e7b000d95d0559ea77d 100644 (file)
@@ -30,6 +30,7 @@ extern "C" {
 #include "ffmpeg_subtitle_stream.h"
 #include "util.h"
 #include "safe_stringstream.h"
+#include <iostream>
 
 #include "i18n.h"
 
@@ -92,6 +93,7 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
         * where we should look for subtitles (video and audio are always present,
         * so they are ok).
         */
+
        while (true) {
                int r = av_read_frame (_format_context, &_packet);
                if (r < 0) {
@@ -108,10 +110,15 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                        video_packet (context);
                }
 
+               bool got_all_audio = true;
+
                for (size_t i = 0; i < _audio_streams.size(); ++i) {
                        if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) {
                                audio_packet (context, _audio_streams[i]);
                        }
+                       if (!_audio_streams[i]->first_audio) {
+                               got_all_audio = false;
+                       }
                }
 
                for (size_t i = 0; i < _subtitle_streams.size(); ++i) {
@@ -121,6 +128,11 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                }
 
                av_free_packet (&_packet);
+
+               if (_first_video && got_all_audio && _subtitle_streams.empty ()) {
+                       /* All done */
+                       break;
+               }
        }
 }
 
@@ -139,7 +151,7 @@ FFmpegExaminer::video_packet (AVCodecContext* context)
                if (_need_video_length) {
                        _video_length = frame_time (
                                _format_context->streams[_video_stream]
-                               ).get_value_or (ContentTime ()).frames (video_frame_rate().get ());
+                               ).get_value_or (ContentTime ()).frames_round (video_frame_rate().get ());
                }
        }
 }