Commit ac6c7eab authored by Gildas Bazin's avatar Gildas Bazin

* modules/mug/ogg.c: fixed recent breakage.

parent 06844395
...@@ -163,7 +163,7 @@ static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts ) ...@@ -163,7 +163,7 @@ static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
else else
{ {
// wait that all fifo have at least 3 packets (3 vorbis headers) // wait that all fifo have at least 3 packets (3 vorbis headers)
return( -1 ); return -1;
} }
} }
if( pi_stream ) if( pi_stream )
...@@ -174,7 +174,7 @@ static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts ) ...@@ -174,7 +174,7 @@ static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
{ {
*pi_dts = i_dts; *pi_dts = i_dts;
} }
return( i_stream ); return i_stream;
} }
/***************************************************************************** /*****************************************************************************
...@@ -217,8 +217,7 @@ struct sout_mux_sys_t ...@@ -217,8 +217,7 @@ struct sout_mux_sys_t
}; };
static void OggSetDate( block_t *, mtime_t , mtime_t ); static void OggSetDate( block_t *, mtime_t , mtime_t );
static block_t *OggStreamFlush( sout_mux_t *, ogg_stream_state *, static block_t *OggStreamFlush( sout_mux_t *, ogg_stream_state *, mtime_t );
mtime_t );
/***************************************************************************** /*****************************************************************************
* Open: Open muxer * Open: Open muxer
...@@ -371,7 +370,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -371,7 +370,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
default: default:
FREE( p_input->p_sys ); FREE( p_input->p_sys );
return( VLC_EGENERIC ); return VLC_EGENERIC;
} }
break; break;
...@@ -419,7 +418,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -419,7 +418,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
default: default:
FREE( p_input->p_sys ); FREE( p_input->p_sys );
return( VLC_EGENERIC ); return VLC_EGENERIC;
} }
break; break;
...@@ -433,19 +432,19 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -433,19 +432,19 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
default: default:
FREE( p_input->p_sys ); FREE( p_input->p_sys );
return( VLC_EGENERIC ); return VLC_EGENERIC;
} }
break; break;
default: default:
FREE( p_input->p_sys ); FREE( p_input->p_sys );
return( VLC_EGENERIC ); return VLC_EGENERIC;
} }
p_stream->b_new = VLC_TRUE; p_stream->b_new = VLC_TRUE;
p_sys->i_add_streams++; p_sys->i_add_streams++;
return( VLC_SUCCESS ); return VLC_SUCCESS;
} }
/***************************************************************************** /*****************************************************************************
...@@ -455,7 +454,7 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -455,7 +454,7 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
{ {
sout_mux_sys_t *p_sys = p_mux->p_sys; sout_mux_sys_t *p_sys = p_mux->p_sys;
ogg_stream_t *p_stream = (ogg_stream_t*)p_input->p_sys; ogg_stream_t *p_stream = (ogg_stream_t*)p_input->p_sys;
block_t *p_og; block_t *p_og;
msg_Dbg( p_mux, "removing input" ); msg_Dbg( p_mux, "removing input" );
...@@ -488,7 +487,6 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -488,7 +487,6 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
else else
{ {
/* Wasn't already added so get rid of it */ /* Wasn't already added so get rid of it */
ogg_stream_clear( &p_stream->os );
FREE( p_stream ); FREE( p_stream );
p_sys->i_add_streams--; p_sys->i_add_streams--;
} }
...@@ -496,30 +494,22 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -496,30 +494,22 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
p_input->p_sys = NULL; p_input->p_sys = NULL;
return( 0 ); return 0;
} }
/***************************************************************************** /*****************************************************************************
* Ogg bitstream manipulation routines * Ogg bitstream manipulation routines
*****************************************************************************/ *****************************************************************************/
static block_t *OggStreamFlush( sout_mux_t *p_mux, static block_t *OggStreamFlush( sout_mux_t *p_mux,
ogg_stream_state *p_os, mtime_t i_pts ) ogg_stream_state *p_os, mtime_t i_pts )
{ {
block_t *p_og, *p_og_first = NULL; block_t *p_og, *p_og_first = NULL;
ogg_page og; ogg_page og;
for( ;; ) while( ogg_stream_flush( p_os, &og ) )
{ {
/* flush all data */ /* Flush all data */
int i_result; p_og = block_New( p_mux, og.header_len + og.body_len );
int i_size;
if( ( i_result = ogg_stream_flush( p_os, &og ) ) == 0 )
{
break;
}
i_size = og.header_len + og.body_len;
p_og = block_New( p_mux, i_size);
memcpy( p_og->p_buffer, og.header, og.header_len ); memcpy( p_og->p_buffer, og.header, og.header_len );
memcpy( p_og->p_buffer + og.header_len, og.body, og.body_len ); memcpy( p_og->p_buffer + og.header_len, og.body, og.body_len );
...@@ -527,32 +517,24 @@ static block_t *OggStreamFlush( sout_mux_t *p_mux, ...@@ -527,32 +517,24 @@ static block_t *OggStreamFlush( sout_mux_t *p_mux,
p_og->i_pts = i_pts; p_og->i_pts = i_pts;
p_og->i_length = 0; p_og->i_length = 0;
i_pts = 0; // write it only once i_pts = 0; // write it only once
block_ChainAppend( &p_og_first, p_og ); block_ChainAppend( &p_og_first, p_og );
} }
return( p_og_first ); return p_og_first;
} }
static block_t *OggStreamPageOut( sout_mux_t *p_mux, static block_t *OggStreamPageOut( sout_mux_t *p_mux,
ogg_stream_state *p_os, mtime_t i_pts ) ogg_stream_state *p_os, mtime_t i_pts )
{ {
block_t *p_og, *p_og_first = NULL; block_t *p_og, *p_og_first = NULL;
ogg_page og; ogg_page og;
for( ;; ) while( ogg_stream_pageout( p_os, &og ) )
{ {
/* flush all data */ /* Flush all data */
int i_result; p_og = block_New( p_mux, og.header_len + og.body_len );
int i_size;
if( ( i_result = ogg_stream_pageout( p_os, &og ) ) == 0 )
{
break;
}
i_size = og.header_len + og.body_len;
p_og = block_New( p_mux, i_size);
memcpy( p_og->p_buffer, og.header, og.header_len ); memcpy( p_og->p_buffer, og.header, og.header_len );
memcpy( p_og->p_buffer + og.header_len, og.body, og.body_len ); memcpy( p_og->p_buffer + og.header_len, og.body, og.body_len );
...@@ -560,12 +542,12 @@ static block_t *OggStreamPageOut( sout_mux_t *p_mux, ...@@ -560,12 +542,12 @@ static block_t *OggStreamPageOut( sout_mux_t *p_mux,
p_og->i_pts = i_pts; p_og->i_pts = i_pts;
p_og->i_length = 0; p_og->i_length = 0;
i_pts = 0; // write them only once i_pts = 0; // write them only once
block_ChainAppend( &p_og_first, p_og ); block_ChainAppend( &p_og_first, p_og );
} }
return( p_og_first ); return p_og_first;
} }
static block_t *OggCreateHeader( sout_mux_t *p_mux, mtime_t i_dts ) static block_t *OggCreateHeader( sout_mux_t *p_mux, mtime_t i_dts )
...@@ -739,7 +721,7 @@ static block_t *OggCreateHeader( sout_mux_t *p_mux, mtime_t i_dts ) ...@@ -739,7 +721,7 @@ static block_t *OggCreateHeader( sout_mux_t *p_mux, mtime_t i_dts )
{ {
p_og->i_flags |= BLOCK_FLAG_HEADER; p_og->i_flags |= BLOCK_FLAG_HEADER;
} }
return( p_hdr ); return p_hdr;
} }
static block_t *OggCreateFooter( sout_mux_t *p_mux, mtime_t i_dts ) static block_t *OggCreateFooter( sout_mux_t *p_mux, mtime_t i_dts )
...@@ -801,7 +783,7 @@ static block_t *OggCreateFooter( sout_mux_t *p_mux, mtime_t i_dts ) ...@@ -801,7 +783,7 @@ static block_t *OggCreateFooter( sout_mux_t *p_mux, mtime_t i_dts )
ogg_stream_clear( &p_sys->pp_del_streams[i]->os ); ogg_stream_clear( &p_sys->pp_del_streams[i]->os );
} }
return( p_hdr ); return p_hdr;
} }
static void OggSetDate( block_t *p_og, mtime_t i_dts, mtime_t i_length ) static void OggSetDate( block_t *p_og, mtime_t i_dts, mtime_t i_length )
...@@ -831,7 +813,7 @@ static void OggSetDate( block_t *p_og, mtime_t i_dts, mtime_t i_length ) ...@@ -831,7 +813,7 @@ static void OggSetDate( block_t *p_og, mtime_t i_dts, mtime_t i_length )
static int Mux( sout_mux_t *p_mux ) static int Mux( sout_mux_t *p_mux )
{ {
sout_mux_sys_t *p_sys = p_mux->p_sys; sout_mux_sys_t *p_sys = p_mux->p_sys;
block_t *p_og = NULL; block_t *p_og = NULL;
int i_stream; int i_stream;
mtime_t i_dts; mtime_t i_dts;
...@@ -841,7 +823,7 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -841,7 +823,7 @@ static int Mux( sout_mux_t *p_mux )
if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 ) if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 )
{ {
msg_Dbg( p_mux, "waiting for data..." ); msg_Dbg( p_mux, "waiting for data..." );
return( VLC_SUCCESS ); return VLC_SUCCESS;
} }
if( p_sys->i_streams ) if( p_sys->i_streams )
...@@ -876,14 +858,14 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -876,14 +858,14 @@ static int Mux( sout_mux_t *p_mux )
for( ;; ) for( ;; )
{ {
sout_input_t *p_input; sout_input_t *p_input;
ogg_stream_t *p_stream; ogg_stream_t *p_stream;
block_t *p_data; block_t *p_data;
ogg_packet op; ogg_packet op;
if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 ) if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 )
{ {
return( VLC_SUCCESS ); return VLC_SUCCESS;
} }
p_input = p_mux->pp_inputs[i_stream]; p_input = p_mux->pp_inputs[i_stream];
...@@ -895,7 +877,7 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -895,7 +877,7 @@ static int Mux( sout_mux_t *p_mux )
p_stream->i_fourcc != VLC_FOURCC( 's', 'p', 'x', ' ' ) && p_stream->i_fourcc != VLC_FOURCC( 's', 'p', 'x', ' ' ) &&
p_stream->i_fourcc != VLC_FOURCC( 't', 'h', 'e', 'o' ) ) p_stream->i_fourcc != VLC_FOURCC( 't', 'h', 'e', 'o' ) )
{ {
p_data = block_Realloc( p_data, 1, 0 ); p_data = block_Realloc( p_data, 1, p_data->i_buffer );
p_data->p_buffer[0] = PACKET_IS_SYNCPOINT; // FIXME p_data->p_buffer[0] = PACKET_IS_SYNCPOINT; // FIXME
} }
...@@ -948,13 +930,11 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -948,13 +930,11 @@ static int Mux( sout_mux_t *p_mux )
{ {
/* Subtitles or Speex packets are quite small so they /* Subtitles or Speex packets are quite small so they
* need to be flushed to be sent on time */ * need to be flushed to be sent on time */
block_ChainAppend( &p_og, OggStreamFlush( p_mux, &p_stream->os, p_og = OggStreamFlush( p_mux, &p_stream->os, p_data->i_dts );
p_data->i_dts ) );
} }
else else
{ {
block_ChainAppend( &p_og, OggStreamPageOut( p_mux, &p_stream->os, p_og = OggStreamPageOut( p_mux, &p_stream->os, p_data->i_dts );
p_data->i_dts ) );
} }
if( p_og ) if( p_og )
...@@ -964,8 +944,6 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -964,8 +944,6 @@ static int Mux( sout_mux_t *p_mux )
p_stream->i_length = 0; p_stream->i_length = 0;
sout_AccessOutWrite( p_mux->p_access, p_og ); sout_AccessOutWrite( p_mux->p_access, p_og );
p_og = NULL;
} }
else else
{ {
......
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