Browse Source

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
tags/v0.5
Michael Niedermayer 17 years ago
parent
commit
d59591fb02
2 changed files with 4 additions and 1 deletions
  1. +3
    -0
      libavcodec/mpegvideo_parser.c
  2. +1
    -1
      tests/seek.regression.ref

+ 3
- 0
libavcodec/mpegvideo_parser.c View File

@@ -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;
}


+ 1
- 1
tests/seek.regression.ref View File

@@ -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


Loading…
Cancel
Save