mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-04 09:11:33 +02:00
Only reference the input when we have at least one codec - fixes #1287.
Some stream output guru should really review this.
This commit is contained in:
parent
ef4a863507
commit
0faa56acde
@ -76,6 +76,7 @@ static int Send( sout_stream_t *, sout_stream_id_t *, block_t* );
|
||||
struct sout_stream_sys_t
|
||||
{
|
||||
input_thread_t *p_input;
|
||||
unsigned i_es;
|
||||
|
||||
vlc_bool_t b_audio;
|
||||
vlc_bool_t b_video;
|
||||
@ -96,14 +97,8 @@ static int Open( vlc_object_t *p_this )
|
||||
p_stream->p_cfg );
|
||||
|
||||
p_sys = malloc( sizeof( sout_stream_sys_t ) );
|
||||
p_sys->p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT,
|
||||
FIND_PARENT );
|
||||
if( !p_sys->p_input )
|
||||
{
|
||||
msg_Err( p_stream, "cannot find p_input" );
|
||||
free( p_sys );
|
||||
return VLC_EGENERIC;
|
||||
}
|
||||
p_sys->p_input = NULL;
|
||||
p_sys->i_es = 0;
|
||||
|
||||
var_Get( p_stream, SOUT_CFG_PREFIX "audio", &val );
|
||||
p_sys->b_audio = val.b_bool;
|
||||
@ -137,7 +132,6 @@ static void Close( vlc_object_t * p_this )
|
||||
/* update p_sout->i_out_pace_nocontrol */
|
||||
p_stream->p_sout->i_out_pace_nocontrol--;
|
||||
|
||||
vlc_object_release( p_sys->p_input );
|
||||
free( p_sys );
|
||||
}
|
||||
|
||||
@ -158,6 +152,20 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
|
||||
}
|
||||
|
||||
id = malloc( sizeof( sout_stream_id_t ) );
|
||||
if( id == NULL )
|
||||
return NULL;
|
||||
|
||||
if( p_sys->i_es == 0 )
|
||||
{
|
||||
p_sys->p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT,
|
||||
FIND_PARENT );
|
||||
if( p_sys->p_input == NULL )
|
||||
{
|
||||
msg_Err( p_stream, "cannot find input" );
|
||||
free( id );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
id->p_dec = input_DecoderNew( p_sys->p_input, p_fmt, VLC_TRUE );
|
||||
if( id->p_dec == NULL )
|
||||
@ -165,15 +173,21 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
|
||||
msg_Err( p_stream, "cannot create decoder for fcc=`%4.4s'",
|
||||
(char*)&p_fmt->i_codec );
|
||||
free( id );
|
||||
if( p_sys->i_es == 0 )
|
||||
vlc_object_release( p_sys->p_input );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
p_sys->i_es++;
|
||||
return id;
|
||||
}
|
||||
|
||||
static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
|
||||
{
|
||||
input_DecoderDelete( id->p_dec );
|
||||
if( --p_stream->p_sys->i_es == 0)
|
||||
vlc_object_release( p_stream->p_sys->p_input );
|
||||
|
||||
free( id );
|
||||
return VLC_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user