summaryrefslogtreecommitdiff
path: root/src/libmpeg2/decode.c
diff options
context:
space:
mode:
authorGuenter Bartsch <guenter@users.sourceforge.net>2001-12-24 00:45:03 +0000
committerGuenter Bartsch <guenter@users.sourceforge.net>2001-12-24 00:45:03 +0000
commit52ed4de50d48141bda8f2300749ffa703b55be4b (patch)
tree260c92e7f7f28b59f65707025d23c2e1b558a5e1 /src/libmpeg2/decode.c
parent2ff16582eef3e37548060b6863f4caa419bd4998 (diff)
downloadxine-lib-52ed4de50d48141bda8f2300749ffa703b55be4b.tar.gz
xine-lib-52ed4de50d48141bda8f2300749ffa703b55be4b.tar.bz2
automatic still image detection - based on miguel's work but with modifications to handle still images with audio, works pretty well on episode I, x-men and sleepy hollow and all other dvds I've tested
CVS patchset: 1294 CVS date: 2001/12/24 00:45:03
Diffstat (limited to 'src/libmpeg2/decode.c')
-rw-r--r--src/libmpeg2/decode.c21
1 files changed, 18 insertions, 3 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);
}