X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fvlc_block.h;h=e56e4c7efa57d9ae644892f7e66bf98902f7ce14;hb=8ae383786f5b891966ee7ff2a8918916b3e4f774;hp=60092e38bbf6866a06ec6389a28444461a20c6f5;hpb=cf1498fbbea930f08a58a2b1954f007ce6613491;p=vlc diff --git a/include/vlc_block.h b/include/vlc_block.h index 60092e38bb..e56e4c7efa 100644 --- a/include/vlc_block.h +++ b/include/vlc_block.h @@ -1,24 +1,24 @@ /***************************************************************************** * vlc_block.h: Data blocks management functions ***************************************************************************** - * Copyright (C) 2003 the VideoLAN team + * Copyright (C) 2003 VLC authors and VideoLAN * $Id$ * * Authors: Laurent Aimar * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef VLC_BLOCK_H @@ -30,10 +30,11 @@ * */ +#include /* for ssize_t */ + /**************************************************************************** * block: **************************************************************************** - * - block_sys_t is opaque and thus block_t->p_sys is PRIVATE * - 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. @@ -49,7 +50,6 @@ * (don't duplicate yourself in a bigger buffer, block_Realloc is * optimised for preheader/postdatas increase) ****************************************************************************/ -typedef struct block_sys_t block_sys_t; /** The content doesn't follow the last block, or is probably broken */ #define BLOCK_FLAG_DISCONTINUITY 0x0001 @@ -101,19 +101,20 @@ typedef void (*block_free_t) (block_t *); struct block_t { - block_t *p_next; + block_t *p_next; + + uint8_t *p_buffer; /**< Payload start */ + size_t i_buffer; /**< Payload length */ + uint8_t *p_start; /**< Buffer start */ + size_t i_size; /**< Buffer total size */ uint32_t i_flags; + unsigned i_nb_samples; /* Used for audio */ mtime_t i_pts; mtime_t i_dts; mtime_t i_length; - unsigned i_nb_samples; /* Used for audio */ - - size_t i_buffer; - uint8_t *p_buffer; - /* Rudimentary support for overloading block (de)allocation. */ block_free_t pf_release; }; @@ -135,10 +136,17 @@ struct block_t * - block_Duplicate : create a copy of a block. ****************************************************************************/ VLC_API void block_Init( block_t *, void *, size_t ); -VLC_API block_t * block_Alloc( size_t ) VLC_USED; -VLC_API block_t * block_Realloc( block_t *, ssize_t i_pre, size_t i_body ) VLC_USED; +VLC_API block_t *block_Alloc( size_t ) VLC_USED VLC_MALLOC; +VLC_API block_t *block_Realloc( block_t *, ssize_t i_pre, size_t i_body ) VLC_USED; -#define block_New( dummy, size ) block_Alloc(size) +static inline void block_CopyProperties( block_t *dst, block_t *src ) +{ + dst->i_flags = src->i_flags; + dst->i_nb_samples = src->i_nb_samples; + dst->i_dts = src->i_dts; + dst->i_pts = src->i_pts; + dst->i_length = src->i_length; +} VLC_USED static inline block_t *block_Duplicate( block_t *p_block ) @@ -147,11 +155,7 @@ static inline block_t *block_Duplicate( block_t *p_block ) if( p_dup == NULL ) return NULL; - p_dup->i_dts = p_block->i_dts; - p_dup->i_pts = p_block->i_pts; - p_dup->i_flags = p_block->i_flags; - p_dup->i_length = p_block->i_length; - p_dup->i_nb_samples = p_block->i_nb_samples; + block_CopyProperties( p_dup, p_block ); memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer ); return p_dup; @@ -162,9 +166,11 @@ static inline void block_Release( block_t *p_block ) p_block->pf_release( p_block ); } -VLC_API block_t * block_heap_Alloc(void *, void *, size_t) VLC_USED; -VLC_API block_t * block_mmap_Alloc(void *addr, size_t length) VLC_USED; -VLC_API block_t * block_File(int fd) VLC_USED; +VLC_API block_t *block_heap_Alloc(void *, size_t) VLC_USED VLC_MALLOC; +VLC_API block_t *block_mmap_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; +VLC_API block_t * block_shm_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; +VLC_API block_t *block_File(int fd) VLC_USED VLC_MALLOC; +VLC_API block_t *block_FilePath(const char *) VLC_USED VLC_MALLOC; static inline void block_Cleanup (void *block) { @@ -297,18 +303,16 @@ static inline block_t *block_ChainGather( block_t *p_list ) * 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_FifoWake : wake ups a thread with block_FifoGet() = NULL - * (this is used to wakeup a thread when there is no data to queue) * * block_FifoGet and block_FifoShow are cancellation points. ****************************************************************************/ -VLC_API block_fifo_t * block_FifoNew( void ) VLC_USED; +VLC_API block_fifo_t *block_FifoNew( void ) VLC_USED VLC_MALLOC; VLC_API void block_FifoRelease( block_fifo_t * ); VLC_API void block_FifoPace( block_fifo_t *fifo, size_t max_depth, size_t max_size ); VLC_API void block_FifoEmpty( block_fifo_t * ); VLC_API size_t block_FifoPut( block_fifo_t *, block_t * ); -VLC_API void block_FifoWake( block_fifo_t * ); +void block_FifoWake( block_fifo_t * ); VLC_API block_t * block_FifoGet( block_fifo_t * ) VLC_USED; VLC_API block_t * block_FifoShow( block_fifo_t * ); size_t block_FifoSize( const block_fifo_t *p_fifo ) VLC_USED;