diff options
Diffstat (limited to 'src/libmpeg2')
-rw-r--r-- | src/libmpeg2/decode.c | 21 | ||||
-rw-r--r-- | src/libmpeg2/xine_decoder.c | 5 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index 703b269e5..98cc87268 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -362,12 +362,26 @@ void mpeg2_flush (mpeg2dec_t * mpeg2dec) { picture_t *picture = mpeg2dec->picture; if (picture->backward_reference_frame && !picture->backward_reference_frame->drawn) { + vo_frame_t *img; + 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); + picture->backward_reference_frame->displayed (picture->backward_reference_frame); + + /* output a copy instead of the frame used by decoder */ + img = picture->backward_reference_frame->instance->duplicate_frame( + picture->backward_reference_frame->instance, + picture->backward_reference_frame); + img->PTS = 0; + img->SCR = mpeg2dec->scr; + img->bad_frame = 0; + img->drawn = 2; + img->draw(img); + + img->free(img); } } @@ -407,12 +421,13 @@ void mpeg2_close (mpeg2dec_t * mpeg2dec) picture->throwaway_frame->free (picture->throwaway_frame); } - if (picture->backward_reference_frame && !picture->backward_reference_frame->drawn) { + if (picture->backward_reference_frame) { printf ("libmpeg2: blasting out backward reference frame on close\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->draw (picture->backward_reference_frame); + if( !picture->backward_reference_frame->drawn) + picture->backward_reference_frame->draw (picture->backward_reference_frame); picture->backward_reference_frame->free (picture->backward_reference_frame); } diff --git a/src/libmpeg2/xine_decoder.c b/src/libmpeg2/xine_decoder.c index 930562d39..da55cab88 100644 --- a/src/libmpeg2/xine_decoder.c +++ b/src/libmpeg2/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.18 2001/12/11 15:30:06 miguelfreitas Exp $ + * $Id: xine_decoder.c,v 1.19 2001/12/24 00:45:03 guenter Exp $ * * stuff needed to turn libmpeg2 into a xine decoder plugin */ @@ -73,7 +73,8 @@ static void mpeg2dec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) mpeg2_decode_data (&this->mpeg2, buf->content, buf->content + buf->size, buf->PTS, buf->SCR); - + + this->video_out->decoder_started(this->video_out); } } |