summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-06-03 02:43:17 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-06-03 02:43:17 +0000
commitd59591fb02c29b41e5b8d611160971a4493394c2 (patch)
treed6dc37569885195d95202d3b5706589af8df9caa
parentd3ad044ad5a28216147196f61671037d1c5960b4 (diff)
In mpeg1/2 timestamps are associated with the access unit which
contains the first picture startcode that commences in the PES packet, instead of the first access unit that commences in the PES packet. Fix the parser to handle that properly. This was a very long standing bug ... The change to the seek regressions is because the mpeg ts muxer stores too many invalid and randomized timestamps which overflow the 4 entry buffer we use in the parser. Originally committed as revision 13643 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/mpegvideo_parser.c3
-rw-r--r--tests/seek.regression.ref2
2 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c
index 25d1ddc045..30f149d547 100644
--- a/libavcodec/mpegvideo_parser.c
+++ b/libavcodec/mpegvideo_parser.c
@@ -29,6 +29,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
{
ParseContext1 *pc = s->priv_data;
const uint8_t *buf_end;
+ const uint8_t *buf_start= buf;
uint32_t start_code;
int frame_rate_index, ext_type, bytes_left;
int frame_rate_ext_n, frame_rate_ext_d;
@@ -43,6 +44,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
bytes_left = buf_end - buf;
switch(start_code) {
case PICTURE_START_CODE:
+ ff_fetch_timestamp(s, buf-buf_start-4, 1);
+
if (bytes_left >= 2) {
s->pict_type = (buf[1] >> 3) & 7;
}
diff --git a/tests/seek.regression.ref b/tests/seek.regression.ref
index 63bd454dc7..9d8ca2e36d 100644
--- a/tests/seek.regression.ref
+++ b/tests/seek.regression.ref
@@ -3481,7 +3481,7 @@ ret:-1 st:-1 ts:0.460008 flags:0
ret:-1 st:-1 ts:-0.645825 flags:1
----------------
tests/data/b-libav.ts
-ret: 0 st: 0 dts:-0.040000 pts:0.000000 pos:-1 size:24921 flags:1
+ret: 0 st: 0 dts:0.000000 pts:-102481911520608.625000 pos:-1 size:24921 flags:1
ret: 0 st:-1 ts:-1.000000 flags:0
ret: 0 st: 0 dts:0.000000 pts:-102481911520608.625000 pos:-1 size:22036 flags:1
ret: 0 st:-1 ts:1.894167 flags:1