vlc | branch: master | Pierre Ynard <[email protected]> | Fri Nov 26 03:23:53 2010 +0100| [48029873dd449de187979e0e9c46c9fed0887715] | committer: Pierre Ynard
vlm: make proper use of semaphore > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=48029873dd449de187979e0e9c46c9fed0887715 --- include/vlc_sout.h | 1 - modules/stream_out/description.c | 3 --- src/input/vlm.c | 28 ++++++++++++++++++---------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/include/vlc_sout.h b/include/vlc_sout.h index 2c8f2a1..1374856 100644 --- a/include/vlc_sout.h +++ b/include/vlc_sout.h @@ -273,7 +273,6 @@ typedef struct sout_description_data_t int i_es; es_format_t **es; vlc_sem_t *sem; - bool stop; } sout_description_data_t; #ifdef __cplusplus diff --git a/modules/stream_out/description.c b/modules/stream_out/description.c index a53ae96..ba44fb0 100644 --- a/modules/stream_out/description.c +++ b/modules/stream_out/description.c @@ -143,10 +143,7 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id, block_ChainRelease( p_buffer ); if( p_sys->i_stream_start + 1500000 < mdate() ) - { - p_sys->data->stop = true; vlc_sem_post(p_sys->data->sem); - } return VLC_SUCCESS; } diff --git a/src/input/vlm.c b/src/input/vlm.c index df2674d..8bae04d 100644 --- a/src/input/vlm.c +++ b/src/input/vlm.c @@ -70,15 +70,21 @@ static void vlm_Destructor( vlm_t *p_vlm ); static void* Manage( void * ); static int vlm_MediaVodControl( void *, vod_media_t *, const char *, int, va_list ); +typedef struct preparse_data_t +{ + vlc_sem_t *p_sem; + bool b_mux; +} preparse_data_t; + static int InputEventPreparse( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { VLC_UNUSED(p_this); VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); - vlc_sem_t *p_sem_preparse = p_data; + preparse_data_t *p_pre = p_data; if( newval.i_int == INPUT_EVENT_DEAD || - newval.i_int == INPUT_EVENT_ITEM_META ) - vlc_sem_post( p_sem_preparse ); + ( p_pre->b_mux && newval.i_int == INPUT_EVENT_ITEM_META ) ) + vlc_sem_post( p_pre->p_sem ); return VLC_SUCCESS; } @@ -623,19 +629,21 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media ) { vlc_sem_t sem_preparse; vlc_sem_init( &sem_preparse, 0 ); - var_AddCallback( p_input, "intf-event", InputEventPreparse, &sem_preparse ); - data.stop = false; + + preparse_data_t preparse = { .p_sem = &sem_preparse, + .b_mux = (p_cfg->vod.psz_mux != NULL) }; + var_AddCallback( p_input, "intf-event", InputEventPreparse, + &preparse ); + data.sem = &sem_preparse; var_Create( p_input, "sout-description-data", VLC_VAR_ADDRESS ); var_SetAddress( p_input, "sout-description-data", &data ); if( !input_Start( p_input ) ) - { - while( !data.stop && !p_input->b_dead && ( !p_cfg->vod.psz_mux || !input_item_IsPreparsed( p_media->vod.p_item ) ) ) - vlc_sem_wait( &sem_preparse ); - } + vlc_sem_wait( &sem_preparse ); - var_DelCallback( p_input, "intf-event", InputEventPreparse, &sem_preparse ); + var_DelCallback( p_input, "intf-event", InputEventPreparse, + &preparse ); input_Stop( p_input, true ); vlc_thread_join( p_input ); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
