Commit f28006a7 authored by Clément Stenac's avatar Clément Stenac

Retry syncing mpeg audio stream if it failed on first block (Closes:#609)

parent e4afdce0
...@@ -68,6 +68,8 @@ struct demux_sys_t ...@@ -68,6 +68,8 @@ struct demux_sys_t
mtime_t i_time_offset; mtime_t i_time_offset;
int i_bitrate_avg; /* extracted from Xing header */ int i_bitrate_avg; /* extracted from Xing header */
vlc_bool_t b_initial_sync_failed;
int i_xing_frames; int i_xing_frames;
int i_xing_bytes; int i_xing_bytes;
int i_xing_bitrate_avg; int i_xing_bitrate_avg;
...@@ -108,6 +110,7 @@ static int mpga_frame_samples( uint32_t h ) ...@@ -108,6 +110,7 @@ static int mpga_frame_samples( uint32_t h )
} }
} }
/***************************************************************************** /*****************************************************************************
* Open: initializes demux structures * Open: initializes demux structures
*****************************************************************************/ *****************************************************************************/
...@@ -252,12 +255,20 @@ static int Open( vlc_object_t * p_this ) ...@@ -252,12 +255,20 @@ static int Open( vlc_object_t * p_this )
p_block_in->i_pts = p_block_in->i_dts = 1; p_block_in->i_pts = p_block_in->i_dts = 1;
p_block_out = p_sys->p_packetizer->pf_packetize( p_block_out = p_sys->p_packetizer->pf_packetize(
p_sys->p_packetizer, &p_block_in ); p_sys->p_packetizer, &p_block_in );
if( p_block_out == NULL )
{
msg_Dbg( p_demux, "did not sync on first block" );
p_sys->b_initial_sync_failed = VLC_TRUE;
}
else
p_sys->b_initial_sync_failed = VLC_FALSE;
p_sys->p_packetizer->fmt_out.b_packetized = VLC_TRUE; p_sys->p_packetizer->fmt_out.b_packetized = VLC_TRUE;
p_sys->p_es = es_out_Add( p_demux->out, p_sys->p_es = es_out_Add( p_demux->out,
&p_sys->p_packetizer->fmt_out); &p_sys->p_packetizer->fmt_out);
p_sys->i_bitrate_avg = p_sys->p_packetizer->fmt_out.i_bitrate; p_sys->i_bitrate_avg = p_sys->p_packetizer->fmt_out.i_bitrate;
if( p_sys->i_xing_bytes && p_sys->i_xing_frames && if( p_sys->i_xing_bytes && p_sys->i_xing_frames &&
p_sys->i_xing_frame_samples ) p_sys->i_xing_frame_samples )
{ {
...@@ -302,7 +313,14 @@ static int Demux( demux_t *p_demux ) ...@@ -302,7 +313,14 @@ static int Demux( demux_t *p_demux )
{ {
return 0; return 0;
} }
p_block_in->i_pts = p_block_in->i_dts = 0; if( p_demux->p_sys->b_initial_sync_failed == VLC_TRUE )
{
p_block_in->i_pts = p_block_in->i_dts = 1;
/* Only try to resync once */
p_demux->p_sys->b_initial_sync_failed = 0;
}
else
p_block_in->i_pts = p_block_in->i_dts = 0;
p_block_out = p_sys->p_packetizer->pf_packetize( p_block_out = p_sys->p_packetizer->pf_packetize(
p_sys->p_packetizer, &p_block_in ); p_sys->p_packetizer, &p_block_in );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment