From 01062a87c0acfe71f6f5be14dbeb9e0ab66ca7f0 Mon Sep 17 00:00:00 2001 From: Edgar Hucek Date: Tue, 31 Jan 2012 14:10:23 +0100 Subject: frame garbage collector in ff_reset --- src/combined/ffmpeg/ff_video_decoder.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c index 90eeadffe..ecfa0a88a 100644 --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -1647,8 +1647,22 @@ static void ff_reset (video_decoder_t *this_gen) { this->size = 0; if(this->context && this->decoder_ok) + { + xine_list_iterator_t it; + AVFrame *av_frame; + avcodec_flush_buffers(this->context); + /* frame garbage collector here - workaround for buggy ffmpeg codecs that + * don't release their DR1 frames */ + while( (it = xine_list_front(this->dr1_frames)) != NULL ) + { + av_frame = (AVFrame *)xine_list_get_value(this->dr1_frames, it); + release_buffer(this->context, av_frame); + } + xine_list_clear(this->dr1_frames); + } + if (this->is_mpeg12) mpeg_parser_reset(this->mpeg_parser); -- cgit v1.2.3