ts_indexer: fix HEVC lost slice issue. [1/1]

PD#SWPL-119993

Problem:
some HEVC slice missed if match 0x00000001.
The leading_zero_8bit 0x00 only be present in the first byte stream NAL unit
of the bitstream.

Solution:
use start code 0x000001 to find NALU for AVC/HEVC.

Verify:
linux

Change-Id: I9e9083b86c8d80ab176b82c5706175d28028cd4b
Signed-off-by: Yahui Han <yahui.han@amlogic.com>
diff --git a/src/ts_indexer.c b/src/ts_indexer.c
index cd1a67f..85ec093 100644
--- a/src/ts_indexer.c
+++ b/src/ts_indexer.c
@@ -258,16 +258,15 @@
     return NULL;
 
   //INF("%s enter, len:%#lx\n", __func__, len);
-if (is_hevc) {
-  while (i < len - 5) {
-    if (p[i] == 0x00 && p[i+1] == 0x00 && p[i+2] == 0x00 && p[i+3] == 0x01) {
+  while (i < len - 4) {
+    if (p[i] == 0x00 && p[i+1] == 0x00 && p[i+2] == 0x01) {
       uint8_t *frame_data = data + i;
       size_t frame_data_len = 0;
 
       i += 4;
       //INF("%s start code prefix\n", __func__);
-      for (size_t j = i ; j < len - 5; ++j) {
-        if (p[j] == 0x00 && p[j+1] == 0x00 && p[j+2] == 0x00 && p[j+3] == 0x01) {
+      for (size_t j = i ; j < len - 4; ++j) {
+        if (p[j] == 0x00 && p[j+1] == 0x00 && p[j+2] == 0x01) {
           frame_data_len = j - i;
           break;
         }
@@ -289,47 +288,6 @@
   return NULL;
 }
 
-  while ( i < len - 4) {
-    if ((p[i] == 0x00 && p[i+1] == 0x00 && p[i+2] == 0x01) ||
-        (p[i] == 0x00 && p[i+1] == 0x00 && p[i+2] == 0x00 && p[i+3] == 0x01)) {
-      uint8_t *frame_data = data + i;
-      size_t frame_data_len = 0;
-
-      if (p[i] == 0x00 && p[i+1] == 0x00 && p[i+2] == 0x01) {
-        i += 3;
-        //ERR("find 0x00 0x00 0x01 startcode\n");
-      } else {
-        i += 4;
-        //ERR("find 0x00 0x00 0x00 0x01 startcode\n");
-      }
-
-      //INF("%s start code prefix\n", __func__);
-      size_t j = i;
-      while (j < len - 4) {
-        if ((p[j] == 0x00 && p[j+1] == 0x00 && p[j+2] == 0x01) ||
-            (p[j] == 0x00 && p[j+1] == 0x00 && p[j+2] == 0x00 && p[j+3] == 0x01)) {
-          frame_data_len = j - i;
-          break;
-        }
-        j ++;
-      }
-
-      if (frame_data_len > 0) {
-        *nalu_len = frame_data_len;
-        return frame_data;
-      } else {
-        frame_data_len = len - i;
-        *nalu_len = frame_data_len;
-        return frame_data;
-      }
-    } else {
-      i ++;
-    }
-  }
-
-  return NULL;
-}
-
 uint32_t golomb_uev(uint32_t *pu4_bitstrm_ofst, uint32_t *pu4_bitstrm_buf)
 {
   uint32_t u4_bitstream_offset = *pu4_bitstrm_ofst;
@@ -380,7 +338,7 @@
 
   for (;;) {
     int left = pes_data_len - (nalu - data);
-    if (left <= 6) {
+    if (left <= 5) {
       memcpy(&stream->PES.data[0], nalu, left);
       stream->PES.len = left;
       break;
@@ -392,8 +350,6 @@
 
     if (nalu[0] == 0x00 && nalu[1] == 0x00 && nalu[2] == 0x01) {
       p = &nalu[3];
-    } else if (nalu[0] == 0x00 && nalu[1] == 0x00 && nalu[2] == 0x00 && nalu[3] == 0x01) {
-      p = &nalu[4];
     }
 
     uint32_t offset = 0;
@@ -481,9 +437,10 @@
     if (nalu == NULL)
       break;
 
-    if (nalu[0] == 0x00 && nalu[1] == 0x00 && nalu[2] == 0x00 && nalu[3] == 0x01) {
-      int nalu_type = (nalu[4] & 0x7E) >> 1;
-      //INF("nalu[3]: %#x, nalu_type: %#x\n", nalu[3], nalu_type);
+    if (nalu[0] == 0x00 && nalu[1] == 0x00 && nalu[2] == 0x01) {
+      int nalu_type = (nalu[3] & 0x7E) >> 1;
+      INF("0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x, nalu_type: %d, offset: %#lx\n",
+          nalu[3], nalu[4], nalu[5], nalu[6], nalu[7], nalu[8], nalu_type, event.offset);
       switch (nalu_type) {
         case HEVC_NALU_BLA_W_LP:
             event.type = TS_INDEXER_EVENT_TYPE_HEVC_BLA_W_LP;
diff --git a/test/ts_indexer_test/ts_indexer_test.c b/test/ts_indexer_test/ts_indexer_test.c
index 6c1e2c2..8185c30 100644
--- a/test/ts_indexer_test/ts_indexer_test.c
+++ b/test/ts_indexer_test/ts_indexer_test.c
@@ -60,16 +60,14 @@
       break;
 
     case TS_INDEXER_EVENT_TYPE_VIDEO_PTS:
-      #if 0
+      #if 1
       INF("PID: %#x ", event->pid);
       INF("TS_INDEXER_EVENT_TYPE_VIDEO_PTS, Offset: %lx, Lastoffset: %lx, Pts: %lx\n",
             event->offset, gControl.last_offset, event->pts);
       write_len = ts_indexer->offset - gControl.last_offset;
       if (gControl.dump_file) {
-        INF("ptr: %p, write_len: %#x\n", gControl.ptr, write_len);
         fwrite(gControl.ptr, 1, write_len, gControl.dump_file);
         gControl.ptr += write_len;
-        INF("ptr: %p\n", gControl.ptr);
       }
       gControl.last_offset = ts_indexer->offset;
       #endif
@@ -100,7 +98,7 @@
     case TS_INDEXER_EVENT_TYPE_HEVC_IDR_W_RADL:
     case TS_INDEXER_EVENT_TYPE_HEVC_IDR_N_LP:
     case TS_INDEXER_EVENT_TYPE_HEVC_TRAIL_CRA:
-      INF("type: %d, offset: %lx\n", event->type, event->offset);
+      INF("type: %d, offset: %#lx\n", event->type, event->offset);
       break;
 
     default: