X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fes_out.c;h=1f3271df6e1705a35eca966a56348dbd5d8c8681;hb=61449225d8d700446822548239298f99bded0b10;hp=f444d9529c0ed129ea437d1454db95d29d3ce3b8;hpb=70a8bb9649c3e44350d0fd579c24b8a9ddd7af34;p=vlc diff --git a/src/input/es_out.c b/src/input/es_out.c index f444d9529c..1f3271df6e 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -28,7 +28,6 @@ #include #include -#include #include #include @@ -487,12 +486,10 @@ static void EsOutProgramSelect( es_out_t *out, es_out_pgrm_t *p_pgrm ) } /* Update now playing */ - vlc_mutex_lock( &p_input->p->input.p_item->lock ); - vlc_meta_SetNowPlaying( p_input->p->input.p_item->p_meta, - p_pgrm->psz_now_playing ); - vlc_meta_SetPublisher( p_input->p->input.p_item->p_meta, - p_pgrm->psz_publisher ); - vlc_mutex_unlock( &p_input->p->input.p_item->lock ); + input_item_SetNowPlaying( p_input->p->input.p_item, + p_pgrm->psz_now_playing ); + input_item_SetPublisher( p_input->p->input.p_item, + p_pgrm->psz_publisher ); var_SetBool( p_sys->p_input, "intf-change", VLC_TRUE ); } @@ -605,15 +602,18 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) es_out_pgrm_t *p_pgrm = NULL; input_thread_t *p_input = p_sys->p_input; char *psz_cat; - char *psz_title = NULL; - char *psz_provider = NULL; + const char *psz_title = NULL; + const char *psz_provider = NULL; int i; msg_Dbg( p_input, "EsOutProgramMeta: number=%d", i_group ); /* Check against empty meta data (empty for what we handle) */ - if( !p_meta->psz_title && !p_meta->psz_nowplaying && !p_meta->psz_publisher && p_meta->i_extra <= 0 ) - return; + if( !vlc_meta_Get( p_meta, vlc_meta_Title) && + !vlc_meta_Get( p_meta, vlc_meta_NowPlaying) && + !vlc_meta_Get( p_meta, vlc_meta_Publisher) && + vlc_dictionary_keys_count( &p_meta->extra_tags ) <= 0 ) + return; /* Find program */ for( i = 0; i < p_sys->i_pgrm; i++ ) { @@ -627,8 +627,8 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) p_pgrm = EsOutProgramAdd( out, i_group ); /* Create it */ /* */ - psz_title = p_meta->psz_title; - psz_provider = p_meta->psz_publisher; + psz_title = vlc_meta_Get( p_meta, vlc_meta_Title); + psz_provider = vlc_meta_Get( p_meta, vlc_meta_Publisher); /* Update the description text of the program */ if( psz_title && *psz_title ) @@ -660,7 +660,7 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) } else { - text.psz_string = psz_title; + text.psz_string = (char *)psz_title; var_Change( p_input, "program", VLC_VAR_ADDCHOICE, &val, &text ); } } @@ -669,15 +669,17 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta ) if( psz_provider ) { if( p_sys->p_pgrm == p_pgrm ) - { - vlc_mutex_lock( &p_input->p->input.p_item->lock ); - vlc_meta_SetPublisher( p_input->p->input.p_item->p_meta, psz_provider ); - vlc_mutex_unlock( &p_input->p->input.p_item->lock ); - } - input_Control( p_input, INPUT_ADD_INFO, psz_cat, _(VLC_META_PUBLISHER), psz_provider ); + input_item_SetPublisher( p_input->p->input.p_item, psz_provider ); + input_Control( p_input, INPUT_ADD_INFO, psz_cat, input_MetaTypeToLocalizedString(vlc_meta_Publisher), psz_provider ); } - for( i = 0; i < p_meta->i_extra; i++ ) - input_Control( p_input, INPUT_ADD_INFO, psz_cat, _(p_meta->ppsz_extra_name[i]), p_meta->ppsz_extra_value[i] ); + char ** ppsz_all_keys = vlc_dictionary_all_keys( &p_meta->extra_tags ); + for( i = 0; ppsz_all_keys[i]; i++ ) + { + input_Control( p_input, INPUT_ADD_INFO, psz_cat, _(ppsz_all_keys[i]), + vlc_dictionary_value_for_key( &p_meta->extra_tags, ppsz_all_keys[i] ) ); + free( ppsz_all_keys[i] ); + } + free( ppsz_all_keys ); free( psz_cat ); } @@ -734,7 +736,6 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) input_thread_t *p_input = p_sys->p_input; es_out_pgrm_t *p_pgrm = NULL; char *psz_cat; - char *psz_epg; int i; /* Find program */ @@ -757,7 +758,9 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) /* Update info */ psz_cat = EsOutProgramGetMetaName( p_pgrm ); #ifdef HAVE_LOCALTIME_R - asprintf( &psz_epg, "EPG %s", psz_cat ); + char *psz_epg; + if( asprintf( &psz_epg, "EPG %s", psz_cat ) == -1 ) + psz_epg = NULL; input_Control( p_input, INPUT_DEL_INFO, psz_epg, NULL ); msg_Dbg( p_input, "EsOutProgramEpg: number=%d name=%s", i_group, p_pgrm->p_epg->psz_name ); for( i = 0; i < p_pgrm->p_epg->i_event; i++ ) @@ -789,15 +792,20 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg ) if( p_epg->p_current && p_epg->p_current->psz_name && *p_epg->p_current->psz_name ) p_pgrm->psz_now_playing = strdup( p_epg->p_current->psz_name ); - vlc_mutex_lock( &p_input->p->input.p_item->lock ); if( p_pgrm == p_sys->p_pgrm ) - vlc_meta_SetNowPlaying( p_input->p->input.p_item->p_meta, p_pgrm->psz_now_playing ); - vlc_mutex_unlock( &p_input->p->input.p_item->lock ); + input_item_SetNowPlaying( p_input->p->input.p_item, p_pgrm->psz_now_playing ); if( p_pgrm->psz_now_playing ) - input_Control( p_input, INPUT_ADD_INFO, psz_cat, _(VLC_META_NOW_PLAYING), p_pgrm->psz_now_playing ); + { + input_Control( p_input, INPUT_ADD_INFO, psz_cat, + input_MetaTypeToLocalizedString(vlc_meta_NowPlaying), + p_pgrm->psz_now_playing ); + } else - input_Control( p_input, INPUT_DEL_INFO, psz_cat, _(VLC_META_NOW_PLAYING) ); + { + input_Control( p_input, INPUT_DEL_INFO, psz_cat, + input_MetaTypeToLocalizedString(vlc_meta_NowPlaying) ); + } free( psz_cat ); }