Mercurial > libavformat.hg
diff utils.c @ 4647:a9c659873a1e libavformat
Pass packet position to the parser, so frame's AVPacket.pos is computed correctly.
author | schreter |
---|---|
date | Thu, 05 Mar 2009 07:36:16 +0000 |
parents | 3176b13b0881 |
children | fab2e46a5b1a |
line wrap: on
line diff
--- a/utils.c Wed Mar 04 07:57:09 2009 +0000 +++ b/utils.c Thu Mar 05 07:36:16 2009 +0000 @@ -956,9 +956,10 @@ s->cur_st = NULL; break; } else if (st->cur_len > 0 && st->discard < AVDISCARD_ALL) { - len = av_parser_parse(st->parser, st->codec, &pkt->data, &pkt->size, - st->cur_ptr, st->cur_len, - st->cur_pkt.pts, st->cur_pkt.dts); + len = av_parser_parse2(st->parser, st->codec, &pkt->data, &pkt->size, + st->cur_ptr, st->cur_len, + st->cur_pkt.pts, st->cur_pkt.dts, + st->cur_pkt.pos); st->cur_pkt.pts = AV_NOPTS_VALUE; st->cur_pkt.dts = AV_NOPTS_VALUE; /* increment read pointer */ @@ -967,12 +968,12 @@ /* return packet if any */ if (pkt->size) { - pkt->pos = st->cur_pkt.pos; // Isn't quite accurate but close. got_packet: pkt->duration = 0; pkt->stream_index = st->index; pkt->pts = st->parser->pts; pkt->dts = st->parser->dts; + pkt->pos = st->parser->pos; pkt->destruct = av_destruct_packet_nofree; compute_pkt_fields(s, st, st->parser, pkt); @@ -1000,10 +1001,11 @@ for(i = 0; i < s->nb_streams; i++) { st = s->streams[i]; if (st->parser && st->need_parsing) { - av_parser_parse(st->parser, st->codec, + av_parser_parse2(st->parser, st->codec, &pkt->data, &pkt->size, NULL, 0, - AV_NOPTS_VALUE, AV_NOPTS_VALUE); + AV_NOPTS_VALUE, AV_NOPTS_VALUE, + AV_NOPTS_VALUE); if (pkt->size) goto got_packet; }