# HG changeset patch # User schreter # Date 1236238576 0 # Node ID a9c659873a1e72a720dd1de96831c31622379de6 # Parent 774c340b9e41471fdd56aab11ef75a389d6da05c Pass packet position to the parser, so frame's AVPacket.pos is computed correctly. diff -r 774c340b9e41 -r a9c659873a1e avformat.h --- a/avformat.h Wed Mar 04 07:57:09 2009 +0000 +++ b/avformat.h Thu Mar 05 07:36:16 2009 +0000 @@ -23,7 +23,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 52 #define LIBAVFORMAT_VERSION_MINOR 31 -#define LIBAVFORMAT_VERSION_MICRO 0 +#define LIBAVFORMAT_VERSION_MICRO 1 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff -r 774c340b9e41 -r a9c659873a1e utils.c --- 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; }