]> git.sesse.net Git - vlc/blobdiff - modules/packetizer/packetizer_helper.h
avcodec: reduce indentation, fix spelling
[vlc] / modules / packetizer / packetizer_helper.h
index b2fd905b80df3d91a160522531ebcf47ca7c7653..50c80565048137d4fc5249cb45ffa132ca7abdc4 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * packetizer.h: Packetizer helpers
+ * packetizer_helper.h: Packetizer helpers
  *****************************************************************************
  * Copyright (C) 2009 Laurent Aimar
  * $Id$
 enum
 {
     STATE_NOSYNC,
-    STATE_NEXT_SYNC
+    STATE_SYNC,
+    STATE_HEADER,
+    STATE_NEXT_SYNC,
+    STATE_GET_DATA,
+    STATE_SEND_DATA
 };
 
 typedef void (*packetizer_reset_t)( void *p_private, bool b_broken );
@@ -49,6 +53,8 @@ typedef struct
     int i_au_prepend;
     const uint8_t *p_au_prepend;
 
+    unsigned i_au_min_size;
+
     void *p_private;
     packetizer_reset_t    pf_reset;
     packetizer_parse_t    pf_parse;
@@ -59,18 +65,20 @@ typedef struct
 static inline void packetizer_Init( packetizer_t *p_pack,
                                     const uint8_t *p_startcode, int i_startcode,
                                     const uint8_t *p_au_prepend, int i_au_prepend,
+                                    unsigned i_au_min_size,
                                     packetizer_reset_t pf_reset,
                                     packetizer_parse_t pf_parse,
                                     packetizer_validate_t pf_validate,
                                     void *p_private )
 {
     p_pack->i_state = STATE_NOSYNC;
-    p_pack->bytestream = block_BytestreamInit();
+    block_BytestreamInit( &p_pack->bytestream );
     p_pack->i_offset = 0;
     p_pack->b_flushing = false;
 
     p_pack->i_au_prepend = i_au_prepend;
     p_pack->p_au_prepend = p_au_prepend;
+    p_pack->i_au_min_size = i_au_min_size;
 
     p_pack->i_startcode = i_startcode;
     p_pack->p_startcode = p_startcode;
@@ -167,11 +175,19 @@ static inline block_t *packetizer_Packetize( packetizer_t *p_pack, block_t **pp_
             p_pack->i_offset = 0;
 
             /* Parse the NAL */
-            p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic );
-            if( b_used_ts )
+            if( p_pic->i_buffer < p_pack->i_au_min_size )
+            {
+                block_Release( p_pic );
+                p_pic = NULL;
+            }
+            else
             {
-                p_block_bytestream->i_dts = VLC_TS_INVALID;
-                p_block_bytestream->i_pts = VLC_TS_INVALID;
+                p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic );
+                if( b_used_ts )
+                {
+                    p_block_bytestream->i_dts = VLC_TS_INVALID;
+                    p_block_bytestream->i_pts = VLC_TS_INVALID;
+                }
             }
 
             if( !p_pic )