ts_indexer: support parse 32bit ext-golomb code. [1/1]

PD#SWPL-128709

Problem:
slice_type maybe wrong cuz only parse 8bit ext-golomb code.

Solution:
parse 32bit ext-golomb code.

Verify:
ubuntu

Change-Id: Id7a84ea873e6e9f92fa2e6d12bc28833d9f5851c
Signed-off-by: Yahui Han <yahui.han@amlogic.com>
diff --git a/src/ts_indexer.c b/src/ts_indexer.c
index 87055c4..8c37f37 100644
--- a/src/ts_indexer.c
+++ b/src/ts_indexer.c
@@ -329,31 +329,34 @@
   return NULL;
 }
 
-uint32_t golomb_uev(uint32_t *pu4_bitstrm_ofst, uint8_t *pu1_bitstrm_buf)
+uint32_t golomb_uev(uint32_t *pu4_bitstrm_ofst, uint32_t *pu4_bitstrm_buf)
 {
   int u4_bitstream_offset = *pu4_bitstrm_ofst;
   uint32_t leadingZeroBits = -1;
   uint32_t codeNum = 0;
+  uint32_t flip_bitstrm_value = 0;
+  uint8_t *pu1_bitstrm_buf = (uint8_t *)pu4_bitstrm_buf;
 
-  if (u4_bitstream_offset >= 8 || u4_bitstream_offset < 0) {
-    //ERR("error!!!! ofset: %d\n", *pu4_bitstrm_ofst);
-    //ERR("0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
-        //pu1_bitstrm_buf[0], pu1_bitstrm_buf[1], pu1_bitstrm_buf[2],
-        //pu1_bitstrm_buf[3], pu1_bitstrm_buf[4], pu1_bitstrm_buf[5]);
+  if (u4_bitstream_offset >= 32 || u4_bitstream_offset < 0) {
+    ERR("error!!!! ofset: %d\n", *pu4_bitstrm_ofst);
     return -1;
   }
 
+  for (int i = 0; i < 4; i++) {
+    flip_bitstrm_value += (pu1_bitstrm_buf[3 - i] << (8 * i));
+  }
+
   /* count the leading zero bits */
-  for (uint8_t b = 0; !b && u4_bitstream_offset < 8; leadingZeroBits++ )
+  for (uint8_t b = 0; !b && u4_bitstream_offset < 32; leadingZeroBits++ )
   {
-    b = ((*pu1_bitstrm_buf) >> (7 - u4_bitstream_offset)) & 0x01;
+    b = (flip_bitstrm_value >> (31 - u4_bitstream_offset)) & 0x01;
     if (!b) {
       u4_bitstream_offset++;
     }
   }
 
   for (int i = 0; i < leadingZeroBits; i++) {
-    codeNum |= (((*pu1_bitstrm_buf) >> (7 - u4_bitstream_offset - 1 - i)) & 0x01);
+    codeNum |= ((flip_bitstrm_value >> (31 - u4_bitstream_offset - 1 - i)) & 0x01);
     if (i < leadingZeroBits - 1)
       codeNum <<= 1;
   }
@@ -395,7 +398,7 @@
     }
 
     uint32_t offset = 0;
-    uint8_t *pu1_bitstrm_buf = &p[1];
+    uint32_t *pu4_bitstrm_buf = (uint32_t *)&p[1];
     uint32_t *pu4_bitstrm_ofst = &offset;
     if (p != NULL)
     {
@@ -403,8 +406,8 @@
       uint16_t u2_first_mb_in_slice;
       uint8_t slice_type;
 
-      u2_first_mb_in_slice = golomb_uev(pu4_bitstrm_ofst, pu1_bitstrm_buf);
-      slice_type = golomb_uev(pu4_bitstrm_ofst, pu1_bitstrm_buf);
+      u2_first_mb_in_slice = golomb_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
+      slice_type = golomb_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
 
       event.pts = stream->PES.pts;
       if (nal_unit_type == NAL_TYPE_IDR) {