# HG changeset patch # User michael # Date 1212460997 0 # Node ID 5a5ded44808a8e1e46835150ad1933639d1a4917 # Parent 91a3324f4abcfd277c2ad7666183ca34935c5e68 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. diff -r 91a3324f4abc -r 5a5ded44808a mpegvideo_parser.c --- a/mpegvideo_parser.c Mon Jun 02 23:00:04 2008 +0000 +++ b/mpegvideo_parser.c Tue Jun 03 02:43:17 2008 +0000 @@ -29,6 +29,7 @@ { 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 @@ 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; }