From 26210c672a075319aaf1dda40d95f1f0590c5bda Mon Sep 17 00:00:00 2001
From: Deb Mukherjee <debargha@google.com>
Date: Fri, 4 Apr 2014 14:38:29 -0700
Subject: [PATCH] Adds test code for supplemental superframe data

Adds test code to verify that supplemental superframe information
that precedes the normal superframe information will not break
decoding.

Change-Id: Ia252b887d7ee138f51dc9a778376ff739402c455
---
 vp9/vp9_cx_iface.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c
index 07617a4ca0..fe0824c7a4 100644
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -628,7 +628,8 @@ static void pick_quickcompress_mode(vpx_codec_alg_priv_t  *ctx,
   }
 }
 
-
+// Turn on to test if supplemental superframe data breaks decoding
+// #define TEST_SUPPLEMENTAL_SUPERFRAME_DATA
 static int write_superframe_index(vpx_codec_alg_priv_t *ctx) {
   uint8_t marker = 0xc0;
   unsigned int mask;
@@ -654,6 +655,20 @@ static int write_superframe_index(vpx_codec_alg_priv_t *ctx) {
   if (ctx->pending_cx_data_sz + index_sz < ctx->cx_data_sz) {
     uint8_t *x = ctx->pending_cx_data + ctx->pending_cx_data_sz;
     int i, j;
+#ifdef TEST_SUPPLEMENTAL_SUPERFRAME_DATA
+    uint8_t marker_test = 0xc0;
+    int mag_test = 2;     // 1 - 4
+    int frames_test = 4;  // 1 - 8
+    int index_sz_test = 2 + mag_test * frames_test;
+    marker_test |= frames_test - 1;
+    marker_test |= (mag_test - 1) << 3;
+    *x++ = marker_test;
+    for (i = 0; i < mag_test * frames_test; ++i)
+      *x++ = 0;  // fill up with arbitrary data
+    *x++ = marker_test;
+    ctx->pending_cx_data_sz += index_sz_test;
+    printf("Added supplemental superframe data\n");
+#endif
 
     *x++ = marker;
     for (i = 0; i < ctx->pending_frame_count; i++) {
@@ -666,6 +681,9 @@ static int write_superframe_index(vpx_codec_alg_priv_t *ctx) {
     }
     *x++ = marker;
     ctx->pending_cx_data_sz += index_sz;
+#ifdef TEST_SUPPLEMENTAL_SUPERFRAME_DATA
+    index_sz += index_sz_test;
+#endif
   }
   return index_sz;
 }
-- 
GitLab