Only do long probes of FFmpeg content with the examiner, not the decoder.
[dcpomatic.git] / src / lib / ffmpeg_decoder.cc
index ede724b5f26e9d03fdb85223a8a05985c89ceeb8..be32475377da2c851647bc4ea8f247218c9d24f5 100644 (file)
@@ -61,9 +61,9 @@ using libdcp::Size;
 FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> f, shared_ptr<const FFmpegContent> c, bool video, bool audio)
        : Decoder (f)
        , VideoDecoder (f, c)
-       , AudioDecoder (f)
+       , AudioDecoder (f, c)
        , SubtitleDecoder (f)
-       , FFmpeg (c)
+       , FFmpeg (c, false)
        , _subtitle_codec_context (0)
        , _subtitle_codec (0)
        , _decode_video (video)
@@ -97,6 +97,8 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> f, shared_ptr<const FFmpegC
                _video_pts_offset = _audio_pts_offset = - min (c->first_video().get(), c->audio_stream()->first_audio.get());
        } else if (have_video) {
                _video_pts_offset = - c->first_video().get();
+       } else if (have_audio) {
+               _audio_pts_offset = - c->audio_stream()->first_audio.get();
        }
 
        /* Now adjust both so that the video pts starts on a frame */
@@ -337,6 +339,7 @@ FFmpegDecoder::seek (VideoContent::Frame frame, bool accurate)
                }
 
                if (_packet.stream_index != _video_stream) {
+                       av_free_packet (&_packet);
                        continue;
                }
                
@@ -385,7 +388,7 @@ FFmpegDecoder::decode_audio_packet ()
                                /* Where we are in the source, in seconds */
                                double const pts = av_q2d (_format_context->streams[copy_packet.stream_index]->time_base)
                                        * av_frame_get_best_effort_timestamp(_frame) + _audio_pts_offset;
-                               
+
                                if (pts > 0) {
                                        /* Emit some silence */
                                        shared_ptr<AudioBuffers> silence (