[vlc-commits] packetizer: hxxx_nal: startcode simplication
Francois Cartegnie
git at videolan.org
Wed Dec 16 17:50:55 CET 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Dec 16 17:45:57 2015 +0100| [c2a21b270617c229d29645fdfb43990b762f08c1] | committer: Francois Cartegnie
packetizer: hxxx_nal: startcode simplication
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c2a21b270617c229d29645fdfb43990b762f08c1
---
modules/packetizer/hxxx_nal.h | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/modules/packetizer/hxxx_nal.h b/modules/packetizer/hxxx_nal.h
index 8e116e5..39557d5 100644
--- a/modules/packetizer/hxxx_nal.h
+++ b/modules/packetizer/hxxx_nal.h
@@ -29,27 +29,30 @@
static const uint8_t annexb_startcode4[] = { 0x00, 0x00, 0x00, 0x01 };
#define annexb_startcode3 (&annexb_startcode4[1])
+/* strips any AnnexB startcode [0] 0 0 1 */
static inline bool hxxx_strip_AnnexB_startcode( const uint8_t **pp_data, size_t *pi_data )
{
+ unsigned bitflow = 0;
const uint8_t *p_data = *pp_data;
- if(*pi_data < 4 || p_data[0])
- return false;
+ size_t i_data = *pi_data;
- /* Skip 4 bytes startcode */
- if( !memcmp(&p_data[1], &annexb_startcode4[1], 3) )
+ while( i_data && p_data[0] <= 1 )
{
- *pp_data += 4;
- *pi_data -= 4;
- }
- /* Skip 3 bytes startcode */
- else if( !memcmp(&p_data[1], &annexb_startcode4[2], 2) )
- {
- *pp_data += 3;
- *pi_data -= 3;
+ bitflow = (bitflow << 1) | (!p_data[0]);
+ p_data++;
+ i_data--;
+ if( !(bitflow & 0x01) )
+ {
+ if( (bitflow & 0x06) == 0x06 ) /* there was at least 2 leading zeros */
+ {
+ *pi_data = i_data;
+ *pp_data = p_data;
+ return true;
+ }
+ return false;
+ }
}
- else
- return false;
- return true;
+ return false;
}
/* Discards emulation prevention three bytes */
More information about the vlc-commits
mailing list