diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-04-09 03:37:59 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-04-09 03:37:59 +0000 |
commit | 645f84663db1951293a7c821dccba45ebdabfcfe (patch) | |
tree | 25921d66b1107950db591aa98e2086623c5e83cd /src/libmpeg2/decode.c | |
parent | 28fd212fe15c240f337575a12057d3468e5ee05d (diff) | |
download | xine-lib-645f84663db1951293a7c821dccba45ebdabfcfe.tar.gz xine-lib-645f84663db1951293a7c821dccba45ebdabfcfe.tar.bz2 |
- new (fast) demuxer seeking scheme
- updated decoder api to allow reseting internal state on seeks
CVS patchset: 1696
CVS date: 2002/04/09 03:37:59
Diffstat (limited to 'src/libmpeg2/decode.c')
-rw-r--r-- | src/libmpeg2/decode.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index 86d9cc0f4..f5bff3815 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -181,8 +181,8 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, if (((picture->picture_structure == FRAME_PICTURE) || (picture->second_field)) ) { - if (!mpeg2dec->drop_frame) - picture->current_frame->bad_frame = 0; + if (mpeg2dec->drop_frame) + picture->current_frame->bad_frame = 1; if (picture->picture_coding_type == B_TYPE) { if( picture->current_frame && !picture->current_frame->drawn ) { @@ -481,6 +481,41 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end, return ret; } +void mpeg2_reset (mpeg2dec_t * mpeg2dec) { + + picture_t *picture = mpeg2dec->picture; + + if( !picture ) + return; + + mpeg2dec->pts = 0; + + if( !picture->mpeg1 ) + mpeg2dec->is_sequence_needed = 1; + + mpeg2dec->in_slice = 0; + + /* to free reference frames one also needs to fix slice.c to + * abort when they are NULL. unfortunately it seems to break + * DVD menus. + */ + /* + if ( picture->current_frame && + picture->current_frame != picture->backward_reference_frame && + picture->current_frame != picture->forward_reference_frame ) + picture->current_frame->free (picture->current_frame); + picture->current_frame = NULL; + + if (picture->forward_reference_frame) + picture->forward_reference_frame->free (picture->forward_reference_frame); + picture->forward_reference_frame = NULL; + + if (picture->backward_reference_frame) + picture->backward_reference_frame->free (picture->backward_reference_frame); + picture->backward_reference_frame = NULL; + */ +} + void mpeg2_flush (mpeg2dec_t * mpeg2dec) { picture_t *picture = mpeg2dec->picture; |