-void sout_MuxSendBuffer ( sout_mux_t *p_mux,
- sout_input_t *p_input,
- sout_buffer_t *p_buffer )
-{
- sout_FifoPut( p_input->p_fifo, p_buffer );
-
- if( p_mux->b_waiting_stream )
- {
- if( p_mux->i_add_stream_start > 0 &&
- p_mux->i_add_stream_start + (mtime_t)1500000 < mdate() )
- {
- /* more than 1.5 second, start muxing */
- p_mux->b_waiting_stream = VLC_FALSE;
- }
- else
- {
- return;
- }
- }
- p_mux->pf_mux( p_mux );
-}
-
-
-
-sout_fifo_t *sout_FifoCreate( sout_instance_t *p_sout )
-{
- sout_fifo_t *p_fifo;
-
- if( !( p_fifo = malloc( sizeof( sout_fifo_t ) ) ) )
- {
- return( NULL );
- }
-
- vlc_mutex_init( p_sout, &p_fifo->lock );
- vlc_cond_init ( p_sout, &p_fifo->wait );
- p_fifo->i_depth = 0;
- p_fifo->p_first = NULL;
- p_fifo->pp_last = &p_fifo->p_first;
-
- return( p_fifo );
-}
-
-void sout_FifoFree( sout_instance_t *p_sout, sout_fifo_t *p_fifo )
-{
- sout_buffer_t *p_buffer;
-
- vlc_mutex_lock( &p_fifo->lock );
- p_buffer = p_fifo->p_first;
- while( p_buffer )
- {
- sout_buffer_t *p_next;
- p_next = p_buffer->p_next;
- sout_BufferDelete( p_sout, p_buffer );
- p_buffer = p_next;
- }
- vlc_mutex_unlock( &p_fifo->lock );
-
- return;
-}
-void sout_FifoDestroy( sout_instance_t *p_sout, sout_fifo_t *p_fifo )
-{
- sout_FifoFree( p_sout, p_fifo );
- vlc_mutex_destroy( &p_fifo->lock );
- vlc_cond_destroy ( &p_fifo->wait );
-
- free( p_fifo );
-}
-
-void sout_FifoPut( sout_fifo_t *p_fifo, sout_buffer_t *p_buffer )
-{
- vlc_mutex_lock( &p_fifo->lock );
-
- do
- {
- *p_fifo->pp_last = p_buffer;
- p_fifo->pp_last = &p_buffer->p_next;
- p_fifo->i_depth++;
-
- p_buffer = p_buffer->p_next;
-
- } while( p_buffer );
-
- /* warm there is data in this fifo */
- vlc_cond_signal( &p_fifo->wait );
- vlc_mutex_unlock( &p_fifo->lock );
-}
-
-sout_buffer_t *sout_FifoGet( sout_fifo_t *p_fifo )
-{
- sout_buffer_t *p_buffer;
-
- vlc_mutex_lock( &p_fifo->lock );
-
- if( p_fifo->p_first == NULL )
- {
- vlc_cond_wait( &p_fifo->wait, &p_fifo->lock );
- }
-
- p_buffer = p_fifo->p_first;
-
- p_fifo->p_first = p_buffer->p_next;
- p_fifo->i_depth--;
-
- if( p_fifo->p_first == NULL )
- {
- p_fifo->pp_last = &p_fifo->p_first;
- }
-
- vlc_mutex_unlock( &p_fifo->lock );
-
- p_buffer->p_next = NULL;
- return( p_buffer );
-}
-
-sout_buffer_t *sout_FifoShow( sout_fifo_t *p_fifo )
-{
- sout_buffer_t *p_buffer;
-
- vlc_mutex_lock( &p_fifo->lock );
-
- if( p_fifo->p_first == NULL )
- {
- vlc_cond_wait( &p_fifo->wait, &p_fifo->lock );
- }
-
- p_buffer = p_fifo->p_first;
-
- vlc_mutex_unlock( &p_fifo->lock );
-
- return( p_buffer );
-}
-
-sout_buffer_t *sout_BufferNew( sout_instance_t *p_sout, size_t i_size )
-{
- sout_buffer_t *p_buffer;
- size_t i_preheader;
-
-#ifdef DEBUG_BUFFER
- msg_Dbg( p_sout, "allocating an new buffer, size:%d", (uint32_t)i_size );
-#endif
-
- p_buffer = malloc( sizeof( sout_buffer_t ) );
- i_preheader = p_sout->i_preheader;
-
- if( i_size > 0 )
- {
- p_buffer->p_allocated_buffer = malloc( i_size + i_preheader );
- p_buffer->p_buffer = p_buffer->p_allocated_buffer + i_preheader;
- }
- else
- {
- p_buffer->p_allocated_buffer = NULL;
- p_buffer->p_buffer = NULL;
- }
- p_buffer->i_allocated_size = i_size + i_preheader;
- p_buffer->i_buffer_size = i_size;
-
- p_buffer->i_size = i_size;
- p_buffer->i_length = 0;
- p_buffer->i_dts = 0;
- p_buffer->i_pts = 0;
- p_buffer->i_bitrate = 0;
- p_buffer->i_flags = 0x0000;
- p_buffer->p_next = NULL;
-
- return( p_buffer );
-}
-int sout_BufferRealloc( sout_instance_t *p_sout, sout_buffer_t *p_buffer, size_t i_size )
-{
- size_t i_preheader;
-
-#ifdef DEBUG_BUFFER
- msg_Dbg( p_sout,
- "realloc buffer old size:%d new size:%d",
- (uint32_t)p_buffer->i_allocated_size,
- (uint32_t)i_size );
-#endif
-
- i_preheader = p_buffer->p_buffer - p_buffer->p_allocated_buffer;
-
- if( !( p_buffer->p_allocated_buffer = realloc( p_buffer->p_allocated_buffer, i_size + i_preheader ) ) )
- {
- msg_Err( p_sout, "realloc failed" );
- p_buffer->i_allocated_size = 0;
- p_buffer->i_buffer_size = 0;
- p_buffer->i_size = 0;
- p_buffer->p_buffer = NULL;
- return( -1 );
- }
- p_buffer->p_buffer = p_buffer->p_allocated_buffer + i_preheader;
-
- p_buffer->i_allocated_size = i_size + i_preheader;
- p_buffer->i_buffer_size = i_size;
-
- return( 0 );
-}
-
-int sout_BufferReallocFromPreHeader( sout_instance_t *p_sout, sout_buffer_t *p_buffer, size_t i_size )