{
if( p_dec->p_owner->b_own_thread )
{
- block_FifoPut( p_dec->p_owner->p_fifo, p_block );
-
if( p_dec->p_owner->p_input->b_out_pace_control )
{
/* FIXME !!!!! */
msleep( 1000 );
}
}
+ else if( p_dec->p_owner->p_fifo->i_size > 50000000 /* 50 MB */ )
+ {
+ /* FIXME: ideally we would check the time amount of data
+ * in the fifo instead of its size. */
+ msg_Warn( p_dec, "decoder/packetizer fifo full (data not "
+ "consummed quickly enough), resetting fifo!" );
+ block_FifoEmpty( p_dec->p_owner->p_fifo );
+ }
+
+ block_FifoPut( p_dec->p_owner->p_fifo, p_block );
}
else
{
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 )