diff options
author | Edgar Hucek <ebsi4711@gmail.com> | 2012-01-31 14:10:23 +0100 |
---|---|---|
committer | Edgar Hucek <ebsi4711@gmail.com> | 2012-01-31 14:10:23 +0100 |
commit | 01062a87c0acfe71f6f5be14dbeb9e0ab66ca7f0 (patch) | |
tree | d3feee8c7056fb457afc7fdf3a47678a52768ca6 | |
parent | ae57a6300677788caeb8dd2b008258b91fe16c47 (diff) | |
download | xine-lib-01062a87c0acfe71f6f5be14dbeb9e0ab66ca7f0.tar.gz xine-lib-01062a87c0acfe71f6f5be14dbeb9e0ab66ca7f0.tar.bz2 |
frame garbage collector in ff_reset
-rw-r--r-- | src/combined/ffmpeg/ff_video_decoder.c | 14 |
1 files changed, 14 insertions, 0 deletions
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); |