* - i_flags may not always be set (ie could be 0, even for a key frame
* it depends where you receive the buffer (before/after a packetizer
* and the demux/packetizer implementations.
- * - i_dts/i_pts could be 0, it means no pts
+ * - i_dts/i_pts could be VLC_TS_INVALID, it means no pts/dts
* - i_length: length in microseond of the packet, can be null except in the
* sout where it is mandatory.
* - i_rate 0 or a valid input rate, look at vlc_input.h
* - p_buffer: pointer over datas. You should never overwrite it, you can
* only incremment it to skip datas, in others cases use block_Realloc
* (don't duplicate yourself in a bigger buffer, block_Realloc is
- * optimised for prehader/postdatas increase)
+ * optimised for preheader/postdatas increase)
****************************************************************************/
typedef struct block_sys_t block_sys_t;
#define BLOCK_FLAG_PREROLL 0x0800
/** This block is corrupted and/or there is data loss */
#define BLOCK_FLAG_CORRUPTED 0x1000
+/** This block contains an interlaced picture with top field first */
+#define BLOCK_FLAG_TOP_FIELD_FIRST 0x2000
+/** This block contains an interlaced picture with bottom field first */
+#define BLOCK_FLAG_BOTTOM_FIELD_FIRST 0x4000
+
+/** This block contains an interlaced picture */
+#define BLOCK_FLAG_INTERLACED_MASK \
+ (BLOCK_FLAG_TOP_FIELD_FIRST|BLOCK_FLAG_BOTTOM_FIELD_FIRST)
#define BLOCK_FLAG_TYPE_MASK \
(BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B|BLOCK_FLAG_TYPE_PB)
mtime_t i_dts;
mtime_t i_length;
- int i_samples; /* Used for audio */
+ unsigned i_nb_samples; /* Used for audio */
int i_rate;
size_t i_buffer;
p_dup->i_flags = p_block->i_flags;
p_dup->i_length = p_block->i_length;
p_dup->i_rate = p_block->i_rate;
- p_dup->i_samples = p_block->i_samples;
+ p_dup->i_nb_samples = p_block->i_nb_samples;
memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer );
return p_dup;
p_block->pf_release( p_block );
}
+VLC_EXPORT( block_t *, block_heap_Alloc, (void *, void *, size_t) LIBVLC_USED );
VLC_EXPORT( block_t *, block_mmap_Alloc, (void *addr, size_t length) LIBVLC_USED );
VLC_EXPORT( block_t *, block_File, (int fd) LIBVLC_USED );
****************************************************************************
* - block_ChainAppend : append a block to the last block of a chain. Try to
* avoid using with a lot of data as it's really slow, prefer
- * block_ChainLastAppend
+ * block_ChainLastAppend, p_block can be NULL
* - block_ChainLastAppend : use a pointer over a pointer to the next blocks,
* and update it.
* - block_ChainRelease : release a chain of block
****************************************************************************
* - block_FifoNew : create and init a new fifo
* - block_FifoRelease : destroy a fifo and free all blocks in it.
+ * - block_FifoPace : wait for a fifo to drain to a specified number of packets or total data size
* - block_FifoEmpty : free all blocks in a fifo
* - block_FifoPut : put a block
* - block_FifoGet : get a packet from the fifo (and wait if it is empty)
VLC_EXPORT( block_fifo_t *, block_FifoNew, ( void ) LIBVLC_USED );
VLC_EXPORT( void, block_FifoRelease, ( block_fifo_t * ) );
-/* TODO: do we need to export this? */
-void block_FifoPace (block_fifo_t *fifo, size_t max_depth, size_t max_size);
+VLC_EXPORT( void, block_FifoPace, ( block_fifo_t *fifo, size_t max_depth, size_t max_size ) );
VLC_EXPORT( void, block_FifoEmpty, ( block_fifo_t * ) );
VLC_EXPORT( size_t, block_FifoPut, ( block_fifo_t *, block_t * ) );
VLC_EXPORT( void, block_FifoWake, ( block_fifo_t * ) );