[vlc-commits] packetizer: hevc: add NALType and hvcC nal length helpers

Francois Cartegnie git at videolan.org
Fri Jan 15 16:26:57 CET 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Jan 15 16:08:47 2016 +0100| [b9d7a7540c67e804013151c1d2df62de4ad9d0af] | committer: Francois Cartegnie

packetizer: hevc: add NALType and hvcC nal length helpers

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

 modules/demux/mpeg/h26x.c     |    2 +-
 modules/mux/mp4/libmp4mux.c   |    2 +-
 modules/packetizer/hevc.c     |    2 +-
 modules/packetizer/hevc_nal.c |    6 +++---
 modules/packetizer/hevc_nal.h |   10 ++++++++++
 5 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/modules/demux/mpeg/h26x.c b/modules/demux/mpeg/h26x.c
index 28654c9..bfea7b0 100644
--- a/modules/demux/mpeg/h26x.c
+++ b/modules/demux/mpeg/h26x.c
@@ -117,7 +117,7 @@ static int ProbeHEVC( const uint8_t *p_peek, size_t i_peek, void *p_priv )
     if( p_peek[0] & 0x80 )
         return -1;
 
-    const uint8_t i_type = (p_peek[0] & 0x7E) >> 1;
+    const uint8_t i_type = hevc_getNALType( p_peek );
     const uint8_t i_layer = hevc_getNALLayer( p_peek );
 
    if ( i_type == HEVC_NAL_VPS ) /* VPS */
diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c
index f7e940f..51f5c7f 100644
--- a/modules/mux/mp4/libmp4mux.c
+++ b/modules/mux/mp4/libmp4mux.c
@@ -620,7 +620,7 @@ static bo_t *GetHvcCTag(es_format_t *p_fmt, bool b_completeness)
         if (p_nal)
             p_nal->i_buffer = p_buffer - p_nal->p_buffer - ((i_buffer)?3:0);
 
-        switch ((*p_buffer & 0x7E) >> 1) {
+        switch (hevc_getNALType(p_buffer)) {
 
         case HEVC_NAL_VPS:
             if(i_vps == HEVC_VPS_MAX)
diff --git a/modules/packetizer/hevc.c b/modules/packetizer/hevc.c
index 124f17d..2c61627 100644
--- a/modules/packetizer/hevc.c
+++ b/modules/packetizer/hevc.c
@@ -421,7 +421,7 @@ static block_t *ParseNALBlock(decoder_t *p_dec, bool *pb_ts_used, block_t *p_fra
     }
 
     /* Get NALU type */
-    uint8_t i_nal_type = ((p_frag->p_buffer[4] & 0x7E) >> 1);
+    uint8_t i_nal_type = hevc_getNALType(&p_frag->p_buffer[4]);
     if (i_nal_type < HEVC_NAL_VPS)
     {
         /* NAL is a VCL NAL */
diff --git a/modules/packetizer/hevc_nal.c b/modules/packetizer/hevc_nal.c
index 24f12ff..2eb896c 100644
--- a/modules/packetizer/hevc_nal.c
+++ b/modules/packetizer/hevc_nal.c
@@ -364,7 +364,7 @@ uint8_t * hevc_hvcC_to_AnnexB_NAL( const uint8_t *p_buf, size_t i_buf,
         return NULL;
 
     if( pi_nal_length_size )
-        *pi_nal_length_size = (p_buf[21] & 0x03) + 1;
+        *pi_nal_length_size = hevc_getNALLengthSize( p_buf );
 
     uint8_t *p_ret;
     uint8_t *p_out_buf = p_ret = malloc( *pi_result );
@@ -504,7 +504,7 @@ bool hevc_get_xps_id(const uint8_t *p_buf, size_t i_buf, uint8_t *pi_id)
     if(unlikely(!hxxx_strip_AnnexB_startcode(&p_buf, &i_buf) || i_buf < 3))
         return false;
     /* No need to lookup convert from emulation for that data */
-    uint8_t i_nal_type = ((p_buf[0] & 0x7E) >> 1);
+    uint8_t i_nal_type = hevc_getNALType(p_buf);
     bs_t bs;
     bs_init(&bs, &p_buf[2], i_buf - 2);
     if(i_nal_type == HEVC_NAL_PPS)
@@ -1114,7 +1114,7 @@ hevc_slice_segment_header_t * hevc_decode_slice_header( const uint8_t *p_buf, si
     hevc_slice_segment_header_t *p_sh = calloc(1, sizeof(hevc_slice_segment_header_t));
     if(likely(p_sh))
     {
-        uint8_t i_nal_type = ((p_buf[0] & 0x7E) >> 1);
+        uint8_t i_nal_type = hevc_getNALType(p_buf);
         bs_t bs;
         bs_init( &bs, p_buf, i_buf );
         unsigned i_bitflow = 0;
diff --git a/modules/packetizer/hevc_nal.h b/modules/packetizer/hevc_nal.h
index f3abd54..3e857c0 100644
--- a/modules/packetizer/hevc_nal.h
+++ b/modules/packetizer/hevc_nal.h
@@ -135,6 +135,16 @@ static inline bool hevc_ishvcC( const uint8_t *p_buf, size_t i_buf )
            );
 }
 
+static inline uint8_t hevc_getNALLengthSize( const uint8_t *p_hvcC )
+{
+    return (p_hvcC[21] & 0x03) + 1;
+}
+
+static inline uint8_t hevc_getNALType( const uint8_t *p_buf )
+{
+    return ((p_buf[0] & 0x7E) >> 1);
+}
+
 static inline uint8_t hevc_getNALLayer( const uint8_t *p_buf )
 {
     return ((p_buf[0] & 0x01) << 6) | (p_buf[1] >> 3);



More information about the vlc-commits mailing list