mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-06-19 19:03:00 +02:00
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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user