No-op: remove all trailing whitespace.
[dcpomatic.git] / src / lib / ffmpeg.cc
index 741716b0400acc818c23d965b02eb97071d8278e..f5d114e8f946c59cecbcc8e4efb72c31d1eccc5e 100644 (file)
@@ -85,14 +85,14 @@ FFmpeg::setup_general ()
        _avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper);
        _format_context = avformat_alloc_context ();
        _format_context->pb = _avio_context;
        _avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper);
        _format_context = avformat_alloc_context ();
        _format_context->pb = _avio_context;
-       
+
        AVDictionary* options = 0;
        /* These durations are in microseconds, and represent how far into the content file
           we will look for streams.
        */
        av_dict_set (&options, "analyzeduration", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
        av_dict_set (&options, "probesize", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
        AVDictionary* options = 0;
        /* These durations are in microseconds, and represent how far into the content file
           we will look for streams.
        */
        av_dict_set (&options, "analyzeduration", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
        av_dict_set (&options, "probesize", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
-       
+
        if (avformat_open_input (&_format_context, 0, 0, &options) < 0) {
                throw OpenFileError (_ffmpeg_content->path(0).string ());
        }
        if (avformat_open_input (&_format_context, 0, 0, &options) < 0) {
                throw OpenFileError (_ffmpeg_content->path(0).string ());
        }
@@ -126,24 +126,28 @@ FFmpeg::setup_general ()
        */
        if (_video_stream == -1 && video_stream_undefined_frame_rate != -1) {
                _video_stream = video_stream_undefined_frame_rate;
        */
        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"));
        }
 
        if (_video_stream < 0) {
                throw DecodeError (N_("could not find video stream"));
        }
 
-       /* Hack: if the AVStreams have zero IDs, put some in.  We
-          use the IDs so that we can cope with VOBs, in which streams
+       /* Hack: if the AVStreams have duplicate IDs, replace them with our
+          own.  We use the IDs so that we can cope with VOBs, in which streams
           move about in index but remain with the same ID in different
           move about in index but remain with the same ID in different
-          VOBs.  However, some files have all-zero IDs, hence this hack.
+          VOBs.  However, some files have duplicate IDs, hence this hack.
        */
        */
-          
-       uint32_t i = 0;
-       while (i < _format_context->nb_streams && _format_context->streams[i]->id == 0) {
-               ++i;
+
+       bool duplicates = false;
+       for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
+               for (uint32_t j = i + 1; j < _format_context->nb_streams; ++j) {
+                       if (_format_context->streams[i]->id == _format_context->streams[j]->id) {
+                               duplicates = true;
+                       }
+               }
        }
 
        }
 
-       if (i == _format_context->nb_streams) {
+       if (duplicates) {
                /* Put in our own IDs */
                for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
                        _format_context->streams[i]->id = i;
                /* Put in our own IDs */
                for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
                        _format_context->streams[i]->id = i;
@@ -163,7 +167,7 @@ FFmpeg::setup_decoders ()
 
        for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
                AVCodecContext* context = _format_context->streams[i]->codec;
 
        for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
                AVCodecContext* context = _format_context->streams[i]->codec;
-               
+
                AVCodec* codec = avcodec_find_decoder (context->codec_id);
                if (codec) {
 
                AVCodec* codec = avcodec_find_decoder (context->codec_id);
                if (codec) {
 
@@ -173,7 +177,7 @@ FFmpeg::setup_decoders ()
                        */
                        AVDictionary* options = 0;
                        av_dict_set (&options, "disable_footer", "1", 0);
                        */
                        AVDictionary* options = 0;
                        av_dict_set (&options, "disable_footer", "1", 0);
-                       
+
                        if (avcodec_open2 (context, codec, &options) < 0) {
                                throw DecodeError (N_("could not open decoder"));
                        }
                        if (avcodec_open2 (context, codec, &options) < 0) {
                                throw DecodeError (N_("could not open decoder"));
                        }
@@ -195,7 +199,7 @@ FFmpeg::subtitle_codec_context () const
        if (!_ffmpeg_content->subtitle_stream ()) {
                return 0;
        }
        if (!_ffmpeg_content->subtitle_stream ()) {
                return 0;
        }
-       
+
        return _ffmpeg_content->subtitle_stream()->stream(_format_context)->codec;
 }
 
        return _ffmpeg_content->subtitle_stream()->stream(_format_context)->codec;
 }
 
@@ -211,6 +215,6 @@ FFmpeg::avio_seek (int64_t const pos, int whence)
        if (whence == AVSEEK_SIZE) {
                return _file_group.length ();
        }
        if (whence == AVSEEK_SIZE) {
                return _file_group.length ();
        }
-       
+
        return _file_group.seek (pos, whence);
 }
        return _file_group.seek (pos, whence);
 }