/*****************************************************************************
* bridge.c: bridge stream output module
*****************************************************************************
- * Copyright (C) 2005 VideoLAN
+ * Copyright (C) 2005 the VideoLAN team
* $Id$
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
else
{
p_bridge = val.p_address;
- }
+ }
return p_bridge;
}
p_es->b_changed = VLC_TRUE;
vlc_mutex_unlock( p_sys->p_lock );
+ p_sys->b_inited = VLC_FALSE;
+
return VLC_SUCCESS;
}
b_no_es = VLC_FALSE;
while ( p_bridge->pp_es[i]->p_block != NULL
- && (p_bridge->pp_es[i]->p_block->i_dts < mdate()
+ && (p_bridge->pp_es[i]->p_block->i_dts + p_sys->i_delay
+ < mdate()
|| p_bridge->pp_es[i]->p_block->i_dts + p_sys->i_delay
< p_bridge->pp_es[i]->i_last) )
{
block_t *p_block = p_bridge->pp_es[i]->p_block;
+ msg_Dbg( p_stream, "dropping a packet (" I64Fd ")",
+ mdate() - p_block->i_dts - p_sys->i_delay );
p_bridge->pp_es[i]->p_block
= p_bridge->pp_es[i]->p_block->p_next;
block_Release( p_block );
}
else
{
- if ( p_bridge->pp_es[i]->p_block == NULL )
+ /* We need at least two packets to enter the mux. */
+ if ( p_bridge->pp_es[i]->p_block == NULL
+ || p_bridge->pp_es[i]->p_block->p_next == NULL )
{
continue;
}
if ( p_bridge->pp_es[i]->id != NULL )
{
block_t *p_block = p_bridge->pp_es[i]->p_block;
- p_bridge->pp_es[i]->i_last = p_bridge->pp_es[i]->p_block->i_dts
- + p_bridge->pp_es[i]->p_block->i_length;
while ( p_block != NULL )
{
+ p_bridge->pp_es[i]->i_last = p_block->i_dts;
p_block->i_pts += p_sys->i_delay;
p_block->i_dts += p_sys->i_delay;
p_block = p_block->p_next;