summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-25 13:33:08 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-25 13:33:08 +0100
commit872557b0261c0daf2206a24e38f33b1c9871c8a3 (patch)
treeeb48213893311c0b5de4d05c8db8bd273e6ca993 /src/lib/ffmpeg_decoder.cc
parentd9362bdd24f01e4c833e89d63ac3816f36eae36e (diff)
Call Resampler::flush() again.
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
-rw-r--r--src/lib/ffmpeg_decoder.cc46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index d8319723a..e2e5b9d64 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -120,7 +120,32 @@ FFmpegDecoder::~FFmpegDecoder ()
if (_subtitle_codec_context) {
avcodec_close (_subtitle_codec_context);
}
-}
+}
+
+void
+FFmpegDecoder::flush ()
+{
+ /* Get any remaining frames */
+
+ _packet.data = 0;
+ _packet.size = 0;
+
+ /* XXX: should we reset _packet.data and size after each *_decode_* call? */
+
+ if (_decode_video) {
+ while (decode_video_packet ()) {}
+ }
+
+ if (_ffmpeg_content->audio_stream() && _decode_audio) {
+ decode_audio_packet ();
+ }
+
+ AudioDecoder::flush ();
+
+ /* Stop us being asked for any more data */
+ _video_position = _ffmpeg_content->video_length ();
+ _audio_position = _ffmpeg_content->audio_length ();
+}
void
FFmpegDecoder::pass ()
@@ -137,24 +162,7 @@ FFmpegDecoder::pass ()
film->log()->log (String::compose (N_("error on av_read_frame (%1) (%2)"), buf, r));
}
- /* Get any remaining frames */
-
- _packet.data = 0;
- _packet.size = 0;
-
- /* XXX: should we reset _packet.data and size after each *_decode_* call? */
-
- if (_decode_video) {
- while (decode_video_packet ()) {}
- }
-
- if (_ffmpeg_content->audio_stream() && _decode_audio) {
- decode_audio_packet ();
- }
-
- /* Stop us being asked for any more data */
- _video_position = _ffmpeg_content->video_length ();
- _audio_position = _ffmpeg_content->audio_length ();
+ flush ();
return;
}