From 96056accd3b60b48527d521b85a3d50d78d3d42f Mon Sep 17 00:00:00 2001 From: Heiko Schaefer Date: Tue, 13 Nov 2001 21:47:57 +0000 Subject: metronom logic changed CVS patchset: 1030 CVS date: 2001/11/13 21:47:57 --- src/libmpeg2/decode.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/libmpeg2/decode.c') diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index fb28f5d28..1064e6fed 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -119,8 +119,9 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, picture->current_frame->free (picture->current_frame); picture->current_frame = NULL; picture->throwaway_frame = NULL; - } else if (picture->forward_reference_frame) { + } else if (picture->forward_reference_frame && !picture->forward_reference_frame->drawn) { mpeg2dec->frames_to_drop = picture->forward_reference_frame->draw (picture->forward_reference_frame); + picture->forward_reference_frame->drawn = 1; } #ifdef ARCH_X86 @@ -256,6 +257,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, picture->backward_reference_frame = picture->current_frame; } picture->current_frame->bad_frame = 0; + picture->current_frame->drawn = 0; picture->current_frame->PTS = mpeg2dec->pts; picture->current_frame->SCR = mpeg2dec->scr; mpeg2dec->pts = 0; @@ -354,6 +356,21 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end, return ret; } +void mpeg2_flush (mpeg2dec_t * mpeg2dec) { + + picture_t *picture = mpeg2dec->picture; + + if (picture->backward_reference_frame && !picture->backward_reference_frame->drawn) { + printf ("libmpeg2: blasting out backward reference frame on flush\n"); + picture->backward_reference_frame->PTS = 0; + picture->backward_reference_frame->SCR = mpeg2dec->scr; + picture->backward_reference_frame->bad_frame = 0; + picture->backward_reference_frame->drawn = 1; + picture->backward_reference_frame->draw (picture->backward_reference_frame); + } + +} + void mpeg2_close (mpeg2dec_t * mpeg2dec) { picture_t *picture = mpeg2dec->picture; @@ -389,7 +406,7 @@ void mpeg2_close (mpeg2dec_t * mpeg2dec) picture->throwaway_frame->free (picture->throwaway_frame); } - if (picture->backward_reference_frame) { + if (picture->backward_reference_frame && !picture->backward_reference_frame->drawn) { printf ("libmpeg2: blasting out backward reference frame on close\n"); picture->backward_reference_frame->PTS = 0; picture->backward_reference_frame->SCR = mpeg2dec->scr; -- cgit v1.2.3