summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-05-23 00:36:49 +0100
committerCarl Hetherington <cth@carlh.net>2015-05-23 00:36:49 +0100
commit3c6a9cb63daa0b02adf9d2f6425f1c247603216c (patch)
tree9ef18c49d28a54988ce374f952498a6eca7c573e /src
parent77da4163a25a358cbbbe4237b1728d5e79189482 (diff)
6ebdd1b08ec3156c637db59d6a42efc8fa63ab8f from master; fix failure to import some video MXFs (#566).
Diffstat (limited to 'src')
-rw-r--r--src/lib/ffmpeg.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc
index 08349fba4..0cbf7e128 100644
--- a/src/lib/ffmpeg.cc
+++ b/src/lib/ffmpeg.cc
@@ -103,16 +103,31 @@ FFmpeg::setup_general ()
/* Find video stream */
+ int video_stream_undefined_frame_rate = -1;
+
for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
AVStream* s = _format_context->streams[i];
/* Files from iTunes sometimes have two video streams, one with the avg_frame_rate.num and .den set
to zero. Ignore these streams.
*/
- if (s->codec->codec_type == AVMEDIA_TYPE_VIDEO && s->avg_frame_rate.num > 0 && s->avg_frame_rate.den > 0) {
- _video_stream = i;
+ if (s->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
+ if (s->avg_frame_rate.num > 0 && s->avg_frame_rate.den > 0) {
+ /* This is definitely our video stream */
+ _video_stream = i;
+ } else {
+ /* This is our video stream if we don't get a better offer */
+ video_stream_undefined_frame_rate = i;
+ }
}
}
+ /* Files from iTunes sometimes have two video streams, one with the avg_frame_rate.num and .den set
+ to zero. Only use such a stream if there is no alternative.
+ */
+ if (_video_stream == -1 && video_stream_undefined_frame_rate != -1) {
+ _video_stream = video_stream_undefined_frame_rate;
+ }
+
if (_video_stream < 0) {
throw DecodeError (N_("could not find video stream"));
}