]> git.sesse.net Git - vlc/blobdiff - include/vlc_block.h
Fix block_New failure check
[vlc] / include / vlc_block.h
index 4f705c60f77e537b614e231e2be1ccd1d0b7259f..0c82565094d421e27535c1905ad1d6aa20cd7ce7 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * vlc_block.h: Data blocks management functions
  *****************************************************************************
- * Copyright (C) 2003 VideoLAN
+ * Copyright (C) 2003 the VideoLAN team
  * $Id$
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
+#if !defined( __LIBVLC__ )
+  #error You are not libvlc or one of its plugins. You cannot include this file
+#endif
+
 #ifndef _VLC_BLOCK_H
 #define _VLC_BLOCK_H 1
 
@@ -56,12 +60,20 @@ typedef struct block_sys_t block_sys_t;
 #define BLOCK_FLAG_TYPE_B        0x0008
 /** For inter frame when you don't know the real type */
 #define BLOCK_FLAG_TYPE_PB       0x0010
-/** Warm that this block is a header one */
+/** Warn that this block is a header one */
 #define BLOCK_FLAG_HEADER        0x0020
 /** This is the last block of the frame */
 #define BLOCK_FLAG_END_OF_FRAME  0x0040
-/** No keyframes present */
+/** This is not a key frame for bitrate shaping */
 #define BLOCK_FLAG_NO_KEYFRAME   0x0080
+/** This block contains a clock reference */
+#define BLOCK_FLAG_CLOCK         0x0200
+/** This block is scrambled */
+#define BLOCK_FLAG_SCRAMBLED     0x0400
+/** This block has to be decoded but not be displayed */
+#define BLOCK_FLAG_PREROLL       0x0800
+/** This block is corrupted and/or there is data loss  */
+#define BLOCK_FLAG_CORRUPTED     0x1000
 
 #define BLOCK_FLAG_PRIVATE_MASK  0xffff0000
 #define BLOCK_FLAG_PRIVATE_SHIFT 16
@@ -69,6 +81,7 @@ typedef struct block_sys_t block_sys_t;
 struct block_t
 {
     block_t     *p_next;
+    block_t     *p_prev;
 
     uint32_t    i_flags;
 
@@ -120,6 +133,8 @@ VLC_EXPORT( block_t *, block_Realloc,       ( block_t *, int i_pre, int i_body )
 static inline block_t *block_Duplicate( block_t *p_block )
 {
     block_t *p_dup = block_New( p_block->p_manager, p_block->i_buffer );
+    if( p_dup == NULL )
+        return NULL;
 
     p_dup->i_dts     = p_block->i_dts;
     p_dup->i_pts     = p_block->i_pts;
@@ -127,9 +142,7 @@ static inline block_t *block_Duplicate( block_t *p_block )
     p_dup->i_length  = p_block->i_length;
     p_dup->i_rate    = p_block->i_rate;
     p_dup->i_samples = p_block->i_samples;
-
-    if( p_dup && p_block->i_buffer > 0 )
-        memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer );
+    memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer );
 
     return p_dup;
 }
@@ -210,13 +223,17 @@ static int block_ChainExtract( block_t *p_list, void *p_data, int i_max )
 static inline block_t *block_ChainGather( block_t *p_list )
 {
     int     i_total = 0;
+    mtime_t i_length = 0;
     block_t *b, *g;
 
     if( p_list->p_next == NULL )
         return p_list;  /* Already gathered */
 
     for( b = p_list; b != NULL; b = b->p_next )
+    {
         i_total += b->i_buffer;
+        i_length += b->i_length;
+    }
 
     g = block_New( p_list->p_manager, i_total );
     block_ChainExtract( p_list, g->p_buffer, g->i_buffer );
@@ -224,6 +241,7 @@ static inline block_t *block_ChainGather( block_t *p_list )
     g->i_flags = p_list->i_flags;
     g->i_pts   = p_list->i_pts;
     g->i_dts   = p_list->i_dts;
+    g->i_length = i_length;
 
     /* free p_list */
     block_ChainRelease( p_list );
@@ -242,7 +260,7 @@ static inline block_t *block_ChainGather( block_t *p_list )
  * - block_FifoPut : put a block
  * - block_FifoGet : get a packet from the fifo (and wait if it is empty)
  * - block_FifoShow : show the first packet of the fifo (and wait if
- *      needed), becarefull, you can use it ONLY if you are sure to be the
+ *      needed), be carefull, you can use it ONLY if you are sure to be the
  *      only one getting data from the fifo.
  ****************************************************************************/
 struct block_fifo_t
@@ -256,7 +274,6 @@ struct block_fifo_t
     int                 i_size;
 };
 
-
 #define block_FifoNew( a ) __block_FifoNew( VLC_OBJECT(a) )
 VLC_EXPORT( block_fifo_t *, __block_FifoNew,    ( vlc_object_t * ) );
 VLC_EXPORT( void,           block_FifoRelease,  ( block_fifo_t * ) );