avcodec: Fix duration error after seek operation

After seek, s->duration need recalculation, AVCodecParserContext need be set
again. Without the fix, the first audio packet would be dropped after
compute_pkt_fields() as the final pts/dts become invalid.

Signed-off-by: wangxingchao <wangxingchao@xiaomi.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
wangxingchao 2013-11-15 15:42:46 +08:00 committed by Michael Niedermayer
parent 8cc59ec881
commit 68900bf16b

View File

@ -40,11 +40,12 @@ static int cook_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
{
CookParseContext *s = s1->priv_data;
if (s->duration)
s1->duration = s->duration;
else if (avctx->extradata && avctx->extradata_size >= 8 && avctx->channels)
if (!s->duration &&
avctx->extradata && avctx->extradata_size >= 8 && avctx->channels)
s->duration = AV_RB16(avctx->extradata + 4) / avctx->channels;
s1->duration = s->duration;
/* always return the full packet. this parser isn't doing any splitting or
combining, only setting packet duration */
*poutbuf = buf;