From: John Koleszar Date: Tue, 12 Mar 2013 23:33:38 +0000 (-0700) Subject: fix superframe index with lagged encoding X-Git-Tag: v1.3.0~1151^2~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c11313e31e41e8167dd93c2e2072ba925fa86687;p=libvpx fix superframe index with lagged encoding If a superframe (ARF) is generated while flushing the lagged frames at the end of the clip, the buffer pointer wasn't being properly updated to account for the size of the index, causing the next frame to overwrite the index on the previous frame. Change-Id: Ib158cc8e4183d663bdfb9ba002dd4c98916abdc9 --- diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c index 724f4185f..708cec602 100644 --- a/vp9/vp9_cx_iface.c +++ b/vp9/vp9_cx_iface.c @@ -582,7 +582,7 @@ static void pick_quickcompress_mode(vpx_codec_alg_priv_t *ctx, } -static void write_superframe_index(vpx_codec_alg_priv_t *ctx) { +static int write_superframe_index(vpx_codec_alg_priv_t *ctx) { uint8_t marker = 0xc0; int mag, mask, index_sz; @@ -619,6 +619,7 @@ static void write_superframe_index(vpx_codec_alg_priv_t *ctx) { *x++ = marker; ctx->pending_cx_data_sz += index_sz; } + return index_sz; } static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx, @@ -818,7 +819,7 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx, ctx->pending_frame_sizes[ctx->pending_frame_count++] = size; ctx->pending_frame_magnitude |= size; ctx->pending_cx_data_sz += size; - write_superframe_index(ctx); + size += write_superframe_index(ctx); pkt.data.frame.buf = ctx->pending_cx_data; pkt.data.frame.sz = ctx->pending_cx_data_sz; ctx->pending_cx_data = NULL;