Mercurial > libavcodec.hg
diff parser.c @ 2030:f796043935f3 libavcodec
mpeg audio timestamp fix
author | michael |
---|---|
date | Sun, 23 May 2004 01:10:15 +0000 |
parents | f65d87bfdd5a |
children | bec4623c2201 |
line wrap: on
line diff
--- a/parser.c Fri May 21 14:40:35 2004 +0000 +++ b/parser.c Sun May 23 01:10:15 2004 +0000 @@ -60,6 +60,7 @@ return NULL; } } + s->fetch_timestamp=1; return s; } @@ -87,7 +88,8 @@ s->cur_frame_dts[k] = dts; /* fill first PTS/DTS */ - if (s->cur_offset == 0) { + if (s->fetch_timestamp){ + s->fetch_timestamp=0; s->last_pts = pts; s->last_dts = dts; } @@ -95,6 +97,7 @@ /* WARNING: the returned index can be negative */ index = s->parser->parser_parse(s, avctx, poutbuf, poutbuf_size, buf, buf_size); +//av_log(NULL, AV_LOG_DEBUG, "parser: in:%lld, %lld, out:%lld, %lld, in:%d out:%d %d\n", pts, dts, s->last_pts, s->last_dts, buf_size, *poutbuf_size, avctx->codec_id); /* update the file pointer */ if (*poutbuf_size) { /* fill the data for the current frame */ @@ -116,8 +119,15 @@ break; k = (k - 1) & (AV_PARSER_PTS_NB - 1); } + s->last_pts = s->cur_frame_pts[k]; s->last_dts = s->cur_frame_dts[k]; + + /* some parsers tell us the packet size even before seeing the first byte of the next packet, + so the next pts/dts is in the next chunk */ + if(index == buf_size){ + s->fetch_timestamp=1; + } } if (index < 0) index = 0;