[vlc-commits] mux: mp4: use hxxx iterator

Francois Cartegnie git at videolan.org
Wed Nov 22 11:27:53 CET 2017


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Nov 22 10:45:41 2017 +0100| [e1da2b0f54fcfc3abdbacfefa3687ed4175f7dbc] | committer: Francois Cartegnie

mux: mp4: use hxxx iterator

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e1da2b0f54fcfc3abdbacfefa3687ed4175f7dbc
---

 modules/mux/mp4/libmp4mux.c | 31 ++++++++++---------------------
 1 file changed, 10 insertions(+), 21 deletions(-)

diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c
index 3b3397c19d..226b4f4a65 100644
--- a/modules/mux/mp4/libmp4mux.c
+++ b/modules/mux/mp4/libmp4mux.c
@@ -705,26 +705,19 @@ static bo_t *GetHvcCTag(es_format_t *p_fmt, bool b_completeness)
     uint8_t i_bit_depth_chroma_minus8 = 0;
     bool b_temporalIdNested = false;
 
-    uint32_t cmp = 0xFFFFFFFF;
-    while (i_buffer) {
-        /* look for start code 0X0000001 */
-        while (i_buffer) {
-            cmp = (cmp << 8) | *p_buffer;
-            if((cmp ^ UINT32_C(0x100)) <= UINT32_C(0xFF))
-                break;
-            p_buffer++;
-            i_buffer--;
-        }
-        if (p_nal)
-            p_nal->i_buffer = p_buffer - p_nal->p_buffer - ((i_buffer)?3:0);
+
+    struct nal nalu;
+    hxxx_iterator_ctx_t it;
+    hxxx_iterator_init( &it, p_buffer, i_buffer, 0 );
+
+    while (hxxx_annexb_iterate_next( &it, &nalu.p_buffer, &nalu.i_buffer )) {
 
         switch (hevc_getNALType(p_buffer)) {
 
         case HEVC_NAL_VPS:
             if(i_vps > HEVC_VPS_ID_MAX)
                 break;
-            p_nal = &rg_vps[i_vps++];
-            p_nal->p_buffer = p_buffer;
+            rg_vps[i_vps++] = nalu;
             /* Only keep the general profile from the first VPS
              * if there are several (this shouldn't happen so soon) */
             if (i_vps == 1) {
@@ -737,8 +730,7 @@ static bo_t *GetHvcCTag(es_format_t *p_fmt, bool b_completeness)
         case HEVC_NAL_SPS: {
             if(i_sps > HEVC_SPS_ID_MAX)
                 break;
-            p_nal = &rg_sps[i_sps++];
-            p_nal->p_buffer = p_buffer;
+            rg_sps[i_sps++] = nalu;
             if (i_sps == 1 && i_buffer > 15) {
                 /* Get Chroma_idc and bitdepths */
                 hevcParseSPS(p_buffer, i_buffer, &i_chroma_idc,
@@ -751,8 +743,7 @@ static bo_t *GetHvcCTag(es_format_t *p_fmt, bool b_completeness)
         case HEVC_NAL_PPS: {
             if(i_pps > HEVC_PPS_ID_MAX)
                 break;
-            p_nal = &rg_pps[i_pps++];
-            p_nal->p_buffer = p_buffer;
+            rg_pps[i_pps++] = nalu;
             if (i_pps == 1)
                 i_num_arrays++;
             break;
@@ -764,14 +755,12 @@ static bo_t *GetHvcCTag(es_format_t *p_fmt, bool b_completeness)
             if (!p_tmp)
                 break;
             p_sei = p_tmp;
-            p_nal = &p_sei[i_sei++];
-            p_nal->p_buffer = p_buffer;
+            p_sei[i_sei++] = nalu;
             if(i_sei == 1)
                 i_num_arrays++;
             break;
         }
         default:
-            p_nal = NULL;
             break;
         }
     }



More information about the vlc-commits mailing list