summaryrefslogtreecommitdiff
path: root/src/libmpeg2
diff options
context:
space:
mode:
authorGuenter Bartsch <guenter@users.sourceforge.net>2001-06-16 14:34:48 +0000
committerGuenter Bartsch <guenter@users.sourceforge.net>2001-06-16 14:34:48 +0000
commit528a7fbfe28ea118599df54bdb17b4c5f4850704 (patch)
tree911cee93cc6b5fcc7ce6c6b9540d1802635f9cc8 /src/libmpeg2
parent6756ef958edc37a504f7ec4e1645e7b22ba8967c (diff)
downloadxine-lib-528a7fbfe28ea118599df54bdb17b4c5f4850704.tar.gz
xine-lib-528a7fbfe28ea118599df54bdb17b4c5f4850704.tar.bz2
more seeking/stopping bugfixes
CVS patchset: 191 CVS date: 2001/06/16 14:34:48
Diffstat (limited to 'src/libmpeg2')
-rw-r--r--src/libmpeg2/decode.c14
-rw-r--r--src/libmpeg2/mpeg2.h2
-rw-r--r--src/libmpeg2/xine_decoder.c3
3 files changed, 14 insertions, 5 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index d23d8d106..cc813ba82 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -82,6 +82,9 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
if (mpeg2dec->is_sequence_needed && (code != 0xb3))
return 0;
+ if (mpeg2dec->is_frame_needed && (code != 0x00))
+ return 0;
+
stats_header (code, buffer);
picture = mpeg2dec->picture;
@@ -93,7 +96,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
if (((picture->picture_structure == FRAME_PICTURE) ||
(picture->second_field)) ) {
- picture->current_frame->bFrameBad = mpeg2dec->drop_frame;
+ picture->current_frame->bFrameBad |= mpeg2dec->drop_frame;
if (picture->picture_coding_type == B_TYPE) {
if (picture->mpeg1)
@@ -120,6 +123,8 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
exit (1);
}
+ mpeg2dec->is_frame_needed=0;
+
if (!picture->second_field) {
/* find out if we want to skip this frame */
mpeg2dec->drop_frame = 0;
@@ -229,6 +234,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
picture->backward_reference_frame;
picture->backward_reference_frame = picture->current_frame;
}
+ picture->current_frame->bFrameBad = 0;
picture->current_frame->PTS = mpeg2dec->pts;
mpeg2dec->pts = 0;
@@ -301,6 +307,8 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end,
mpeg2dec->chunk_ptr = mpeg2dec->chunk_buffer;
mpeg2dec->code = 0xb4;
mpeg2dec->seek_mode = 0;
+ mpeg2dec->shift = 0xffffff00;
+ mpeg2dec->is_frame_needed = 1;
}
while (current != end) {
@@ -310,6 +318,7 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end,
return ret;
ret += parse_chunk (mpeg2dec, code, mpeg2dec->chunk_buffer);
}
+
return ret;
}
@@ -318,7 +327,7 @@ void mpeg2_close (mpeg2dec_t * mpeg2dec)
static uint8_t finalizer[] = {0,0,1,0xb4};
picture_t *picture = mpeg2dec->picture;
- mpeg2_decode_data (mpeg2dec, finalizer, finalizer+4, 0);
+ /* mpeg2_decode_data (mpeg2dec, finalizer, finalizer+4, 0); */
if (picture->throwaway_frame)
picture->throwaway_frame->free (picture->throwaway_frame);
@@ -356,7 +365,6 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
}
if (mpeg2dec->is_sequence_needed) {
- printf ("libmpeg2: found sequence header! :-)\n");
mpeg2dec->is_sequence_needed = 0;
picture->forward_reference_frame =
diff --git a/src/libmpeg2/mpeg2.h b/src/libmpeg2/mpeg2.h
index 7f70bca05..4172d2291 100644
--- a/src/libmpeg2/mpeg2.h
+++ b/src/libmpeg2/mpeg2.h
@@ -32,7 +32,7 @@ typedef struct mpeg2dec_s {
int is_sequence_needed;
int frames_to_drop, drop_frame;
int in_slice;
- int seek_mode;
+ int seek_mode, is_frame_needed;
/* the maximum chunk size is determined by vbv_buffer_size */
/* which is 224K for MP@ML streams. */
diff --git a/src/libmpeg2/xine_decoder.c b/src/libmpeg2/xine_decoder.c
index 9094ecb0f..7490e9e56 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.8 2001/06/14 09:19:44 guenter Exp $
+ * $Id: xine_decoder.c,v 1.9 2001/06/16 14:34:49 guenter Exp $
*
* stuff needed to turn libmpeg2 into a xine decoder plugin
*/
@@ -69,6 +69,7 @@ static void mpeg2dec_close (video_decoder_t *this_gen) {
mpeg2dec_decoder_t *this = (mpeg2dec_decoder_t *) this_gen;
mpeg2_close (&this->mpeg2);
+
this->video_out->close(this->video_out);
}