shithub: libvpx

Download patch

ref: c11313e31e41e8167dd93c2e2072ba925fa86687
parent: a2c6f6e94592fbc0df239bd17c65454d07572453
author: John Koleszar <jkoleszar@google.com>
date: Tue Mar 12 12:33:38 EDT 2013

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

--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -582,7 +582,7 @@
 }
 
 
-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 @@
     *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 @@
             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;
--