/*****************************************************************************
* block.c: Data blocks management functions
*****************************************************************************
- * Copyright (C) 2003-2004 VideoLAN
+ * Copyright (C) 2003-2004 the VideoLAN team
* $Id$
*
* Authors: Laurent Aimar <fenrir@videolan.org>
*
* 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.
*****************************************************************************/
/*****************************************************************************
/* We do only one malloc
* TODO bench if doing 2 malloc but keeping a pool of buffer is better
* 16 -> align on 16
- * 2*BLOCK_PADDING_SIZE -> pre + post padding
+ * 2 * BLOCK_PADDING_SIZE -> pre + post padding
*/
- const int i_alloc = i_size + 2*BLOCK_PADDING_SIZE + 16;
- block_t *p_block = malloc( sizeof( block_t ) + sizeof( block_sys_t ) + i_alloc );
block_sys_t *p_sys;
+ const int i_alloc = i_size + 2 * BLOCK_PADDING_SIZE + 16;
+ block_t *p_block =
+ malloc( sizeof( block_t ) + sizeof( block_sys_t ) + i_alloc );
- if( p_block == NULL )
- return NULL;
+ if( p_block == NULL ) return NULL;
/* Fill opaque data */
p_sys = (block_sys_t*)( (uint8_t*)p_block + sizeof( block_t ) );
p_sys->i_allocated_buffer = i_alloc;
- p_sys->p_allocated_buffer = (uint8_t*)p_block + sizeof( block_t ) + sizeof( block_sys_t );
+ p_sys->p_allocated_buffer = (uint8_t*)p_block + sizeof( block_t ) +
+ sizeof( block_sys_t );
/* Fill all fields */
p_block->p_next = NULL;
+ p_block->p_prev = NULL;
p_block->i_flags = 0;
p_block->i_pts = 0;
p_block->i_dts = 0;
p_block->i_length = 0;
p_block->i_rate = 0;
p_block->i_buffer = i_size;
- p_block->p_buffer = &p_sys->p_allocated_buffer[32+15-((long)p_sys->p_allocated_buffer % 16 )];
+ p_block->p_buffer =
+ &p_sys->p_allocated_buffer[BLOCK_PADDING_SIZE +
+ 16 - ((uintptr_t)p_sys->p_allocated_buffer % 16 )];
p_block->pf_release = BlockRelease;
- p_block->p_manager = VLC_OBJECT( p_obj->p_vlc ); /* Is ok, as no comunication between p_vlc */
+
+ /* Is ok, as no comunication between p_vlc */
+ p_block->p_manager = VLC_OBJECT( p_obj->p_vlc );
p_block->p_sys = p_sys;
return p_block;
if( i_body < 0 || i_buffer_size <= 0 ) return NULL;
- if( i_prebody < ( p_block->p_buffer - p_block->p_sys->p_allocated_buffer +
- p_block->p_sys->i_allocated_buffer ) ||
- p_block->p_buffer - i_prebody > p_block->p_sys->p_allocated_buffer )
+ if( p_block->p_buffer - i_prebody > p_block->p_sys->p_allocated_buffer &&
+ p_block->p_buffer - i_prebody < p_block->p_sys->p_allocated_buffer +
+ p_block->p_sys->i_allocated_buffer )
{
p_block->p_buffer -= i_prebody;
p_block->i_buffer += i_prebody;
{
block_t *p_rea = block_New( p_block->p_manager, i_buffer_size );
- p_rea->i_dts = p_block->i_dts;
- p_rea->i_pts = p_block->i_pts;
- p_rea->i_flags = p_block->i_flags;
- p_rea->i_length= p_block->i_length;
- p_rea->i_rate = p_block->i_rate;
+ p_rea->i_dts = p_block->i_dts;
+ p_rea->i_pts = p_block->i_pts;
+ p_rea->i_flags = p_block->i_flags;
+ p_rea->i_length = p_block->i_length;
+ p_rea->i_rate = p_block->i_rate;
+ p_rea->i_samples = p_block->i_samples;
memcpy( p_rea->p_buffer + i_prebody, p_block->p_buffer,
__MIN( p_block->i_buffer, p_rea->i_buffer - i_prebody ) );
p_fifo = malloc( sizeof( vlc_object_t ) );
vlc_mutex_init( p_obj, &p_fifo->lock );
vlc_cond_init( p_obj, &p_fifo->wait );
- p_fifo->i_depth = 0;
+ p_fifo->i_depth = p_fifo->i_size = 0;
p_fifo->p_first = NULL;
p_fifo->pp_last = &p_fifo->p_first;
b = p_next;
}
- p_fifo->i_depth = 0;
+ p_fifo->i_depth = p_fifo->i_size = 0;
p_fifo->p_first = NULL;
p_fifo->pp_last = &p_fifo->p_first;
vlc_mutex_unlock( &p_fifo->lock );
*p_fifo->pp_last = p_block;
p_fifo->pp_last = &p_block->p_next;
p_fifo->i_depth++;
+ p_fifo->i_size += p_block->i_buffer;
p_block = p_block->p_next;
p_fifo->p_first = b->p_next;
p_fifo->i_depth--;
+ p_fifo->i_size -= b->i_buffer;
if( p_fifo->p_first == NULL )
{
vlc_mutex_unlock( &p_fifo->lock );
b->p_next = NULL;
- return( b );
+ return b;
}
block_t *block_FifoShow( block_fifo_t *p_fifo )