summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuenter Bartsch <guenter@users.sourceforge.net>2001-07-08 18:05:35 +0000
committerGuenter Bartsch <guenter@users.sourceforge.net>2001-07-08 18:05:35 +0000
commitfbf6214d84dbed2b9e22da164748eca8c762cb82 (patch)
treea25a81fea2b96e8854be36675306531939ad7c40
parente2f69e77580ed38028377abd910a0aaa15ad6127 (diff)
downloadxine-lib-fbf6214d84dbed2b9e22da164748eca8c762cb82.tar.gz
xine-lib-fbf6214d84dbed2b9e22da164748eca8c762cb82.tar.bz2
corrected more pts handling / header searching bugs
CVS patchset: 258 CVS date: 2001/07/08 18:05:35
-rw-r--r--src/libmpeg2/decode.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index 6a0f963c6..ebb6b95e1 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -76,14 +76,20 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
picture_t * picture;
int is_frame_done;
- /* printf ("parse_chunk %d\n", code); */
+ /* printf ("libmpeg2: parse_chunk 0x%02x\n", code); */
/* wait for sequence_header_code */
- if (mpeg2dec->is_sequence_needed && (code != 0xb3))
- return 0;
-
- if (mpeg2dec->is_frame_needed && (code != 0x00))
+ if (mpeg2dec->is_sequence_needed) {
+ if (code != 0xb3) {
+ /* printf ("libmpeg2: waiting for sequence header\n"); */
+ mpeg2dec->pts = 0;
return 0;
+ }
+ } else if (mpeg2dec->is_frame_needed && (code != 0x00)) {
+ /* printf ("libmpeg2: waiting for frame start\n"); */
+ mpeg2dec->pts = 0;
+ return 0;
+ }
stats_header (code, buffer);
@@ -319,9 +325,6 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end,
uint8_t code;
ret = 0;
- if (pts)
- mpeg2dec->pts = pts;
-
if (mpeg2dec->seek_mode) {
mpeg2dec->chunk_ptr = mpeg2dec->chunk_buffer;
mpeg2dec->code = 0xb4;
@@ -330,6 +333,9 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec, uint8_t * current, uint8_t * end,
mpeg2dec->is_frame_needed = 1;
}
+ if (pts)
+ mpeg2dec->pts = pts;
+
while (current != end) {
code = mpeg2dec->code;
current = copy_chunk (mpeg2dec, current, end);
@@ -381,7 +387,7 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
if (current == NULL)
return ;
- /* printf ("looking for sequence header... %02x\n", code); */
+ /* printf ("looking for sequence header... %02x\n", code); */
stats_header (code, mpeg2dec->chunk_buffer);
@@ -417,7 +423,7 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
}
} else if (code == 0xb5) { /* extension_start_code */
if (header_process_extension (picture, mpeg2dec->chunk_buffer)) {
- printf ("mpeg2dec: bad extension\n");
+ printf ("libmpeg2: bad extension\n");
continue ;
}
}