add scalability experiment

cmake: -DCONFIG_SCALABILITY=1

Change-Id: Ifa908f809bcf904bdf0ed87b351e1ef3accc2b3f
diff --git a/obudec.c b/obudec.c
index 8f1ca00..f859a68 100644
--- a/obudec.c
+++ b/obudec.c
@@ -19,10 +19,17 @@
 #include "av1/common/common.h"
 
 #define OBU_HEADER_SIZE_BYTES 1
+#if CONFIG_SCALABILITY
+#define OBU_HEADER_EXTENSION_SIZE_BYTES 1
+#endif
 
 #if CONFIG_OBU_NO_IVF
 int obu_read_temporal_unit(FILE *infile, uint8_t **buffer, size_t *bytes_read,
+#if CONFIG_SCALABILITY
+                           size_t *buffer_size, int last_layer_id) {
+#else
                            size_t *buffer_size) {
+#endif
   size_t ret;
   const size_t obu_length_header_size =
       PRE_OBU_SIZE_BYTES + OBU_HEADER_SIZE_BYTES;
@@ -60,6 +67,26 @@
       break;
     }
 
+#if CONFIG_SCALABILITY
+    // break if obu_extension_flag is found and enhancement_id change
+    if ((data[PRE_OBU_SIZE_BYTES] & 0x1)) {
+      uint8_t obu_extension_header;
+      int total_obu_header_size =
+          (int)obu_length_header_size + OBU_HEADER_EXTENSION_SIZE_BYTES;
+      int curr_layer_id;
+      fread(&obu_extension_header, 1, OBU_HEADER_EXTENSION_SIZE_BYTES, infile);
+      curr_layer_id = (obu_extension_header >> 3) & 0x3;
+      if (curr_layer_id && (curr_layer_id > last_layer_id)) {
+        // new enhancement layer
+        *bytes_read -= obu_length_header_size;
+        fseek(infile, -total_obu_header_size, SEEK_CUR);
+        break;
+      } else {
+        fseek(infile, -OBU_HEADER_EXTENSION_SIZE_BYTES, SEEK_CUR);
+      }
+    }
+#endif
+
 // otherwise, read the OBU payload into memory
 #if CONFIG_OBU_SIZING
     aom_uleb_decode(data, PRE_OBU_SIZE_BYTES, &obu_size);
@@ -112,6 +139,7 @@
     return 0;
   }
   // fprintf(stderr, "Starting to parse OBU stream\n");
+
   return 1;
 }