* - 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)
-#define BLOCK_FLAG_PRIVATE_MASK 0xffff0000
-#define BLOCK_FLAG_PRIVATE_SHIFT 16
+/* These are for input core private usage only */
+#define BLOCK_FLAG_CORE_PRIVATE_MASK 0x00ff0000
+#define BLOCK_FLAG_CORE_PRIVATE_SHIFT 16
+
+/* These are for module private usage only */
+#define BLOCK_FLAG_PRIVATE_MASK 0xff000000
+#define BLOCK_FLAG_PRIVATE_SHIFT 24
typedef void (*block_free_t) (block_t *);
struct block_t
{
block_t *p_next;
- block_t *p_prev;
uint32_t i_flags;
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
{
size_t i_size = 0;
mtime_t i_length = 0;
- int i_count;
+ int i_count = 0;
while( p_list )
{
****************************************************************************
* - 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)
* needed), be carefull, you can use it ONLY if you are sure to be the
* only one getting data from the fifo.
* - block_FifoCount : how many packets are waiting in the fifo
- * - block_FifoSize : how many cumulated bytes are waiting in the fifo
* - block_FifoWake : wake ups a thread with block_FifoGet() = NULL
* (this is used to wakeup a thread when there is no data to queue)
*
VLC_EXPORT( block_fifo_t *, block_FifoNew, ( void ) LIBVLC_USED );
VLC_EXPORT( void, block_FifoRelease, ( block_fifo_t * ) );
+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 * ) );
VLC_EXPORT( block_t *, block_FifoGet, ( block_fifo_t * ) LIBVLC_USED );
VLC_EXPORT( block_t *, block_FifoShow, ( block_fifo_t * ) );
-VLC_EXPORT( size_t, block_FifoSize, ( const block_fifo_t *p_fifo ) LIBVLC_USED );
+size_t block_FifoSize( const block_fifo_t *p_fifo ) LIBVLC_USED;
VLC_EXPORT( size_t, block_FifoCount, ( const block_fifo_t *p_fifo ) LIBVLC_USED );
#endif /* VLC_BLOCK_H */