struct sout_stream_sys_t
{
- input_thread_t *p_input;
-
mtime_t i_stream_start;
};
p_stream->pf_send = Send;
p_sys = p_stream->p_sys = malloc(sizeof(sout_stream_sys_t));
- p_sys->p_input = NULL;
-
p_sys->i_stream_start = 0;
return VLC_SUCCESS;
sout_stream_id_t *id;
es_format_t *p_fmt_copy;
input_item_t *p_item;
+ input_thread_t *p_input;
msg_Dbg( p_stream, "Adding a stream" );
-
- if( !p_sys->p_input )
- {
- p_sys->p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT,
- FIND_PARENT );
- /* This module is a children of the input object
- * We don't want to keep a reference on it, because we will be alive
- * as long as the input is alive.
- *
- * Since vlc_object_find() increments the reference count,
- * we release the input just after finding it.
- * */
- assert( p_sys->p_input );
- vlc_object_release( p_sys->p_input );
- }
+ p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT, FIND_PARENT );
+ assert( p_input );
- p_item = input_GetItem(p_sys->p_input);
+ p_item = input_GetItem(p_input);
p_fmt_copy = malloc(sizeof(es_format_t));
es_format_Copy( p_fmt_copy, p_fmt );
vlc_mutex_lock( &p_item->lock );
TAB_APPEND( p_item->i_es, p_item->es, p_fmt_copy );
vlc_mutex_unlock( &p_item->lock );
+ vlc_object_release( p_input );
if( p_sys->i_stream_start <= 0 )
p_sys->i_stream_start = mdate();
block_ChainRelease( p_buffer );
- if( p_sys->p_input && p_sys->i_stream_start + 1500000 < mdate() )
- p_sys->p_input->b_eof = true;
+ if( p_sys->i_stream_start + 1500000 < mdate() )
+ {
+ input_thread_t *p_input;
+
+ p_input = vlc_object_find( p_stream, VLC_OBJECT_INPUT, FIND_PARENT );
+ if( p_input )
+ {
+ p_input->b_eof = true;
+ vlc_object_release( p_input );
+ }
+ }
return VLC_SUCCESS;
}