[vlc-commits] input: add infos controls
Thomas Guillem
git at videolan.org
Tue Sep 4 18:06:10 CEST 2018
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Sep 4 18:02:47 2018 +0200| [337886df92c0fdc91819644c57e0773f3dfe2005] | committer: Thomas Guillem
input: add infos controls
Since they are only used by es_out.c. Little behavior change: the info event is
now sent only one time for several info changes.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=337886df92c0fdc91819644c57e0773f3dfe2005
---
include/vlc_input.h | 6 ------
src/input/control.c | 44 --------------------------------------------
src/input/es_out.c | 52 ++++++++++++++++++++++++++++++++++++----------------
3 files changed, 36 insertions(+), 66 deletions(-)
diff --git a/include/vlc_input.h b/include/vlc_input.h
index fddede9fc5..6b50929290 100644
--- a/include/vlc_input.h
+++ b/include/vlc_input.h
@@ -514,12 +514,6 @@ enum input_query_e
/** Activate disc Root Menu. res=can fail */
INPUT_NAV_MENU,
- /* Meta datas */
- INPUT_ADD_INFO, /* arg1= char* arg2= char* arg3=... res=can fail */
- INPUT_REPLACE_INFOS,/* arg1= info_category_t * res=cannot fail */
- INPUT_MERGE_INFOS,/* arg1= info_category_t * res=cannot fail */
- INPUT_DEL_INFO, /* arg1= char* arg2= char* res=can fail */
-
/* bookmarks */
INPUT_GET_BOOKMARK, /* arg1= seekpoint_t * res=can fail */
INPUT_GET_BOOKMARKS, /* arg1= seekpoint_t *** arg2= int * res=can fail */
diff --git a/src/input/control.c b/src/input/control.c
index 77da975d36..dc7b7c6c15 100644
--- a/src/input/control.c
+++ b/src/input/control.c
@@ -82,50 +82,6 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
+ INPUT_CONTROL_NAV_ACTIVATE, NULL );
return VLC_SUCCESS;
- case INPUT_ADD_INFO:
- {
- char *psz_cat = va_arg( args, char * );
- char *psz_name = va_arg( args, char * );
- char *psz_format = va_arg( args, char * );
-
- char *psz_value;
-
- if( vasprintf( &psz_value, psz_format, args ) == -1 )
- return VLC_EGENERIC;
-
- int i_ret = input_item_AddInfo( priv->p_item, psz_cat, psz_name,
- "%s", psz_value );
- free( psz_value );
-
- if( !priv->b_preparsing && !i_ret )
- input_SendEventMetaInfo( p_input );
- return i_ret;
- }
- case INPUT_REPLACE_INFOS:
- case INPUT_MERGE_INFOS:
- {
- info_category_t *p_cat = va_arg( args, info_category_t * );
-
- if( i_query == INPUT_REPLACE_INFOS )
- input_item_ReplaceInfos( priv->p_item, p_cat );
- else
- input_item_MergeInfos( priv->p_item, p_cat );
-
- if( !priv->b_preparsing )
- input_SendEventMetaInfo( p_input );
- return VLC_SUCCESS;
- }
- case INPUT_DEL_INFO:
- {
- char *psz_cat = va_arg( args, char * );
- char *psz_name = va_arg( args, char * );
-
- int i_ret = input_item_DelInfo( priv->p_item, psz_cat, psz_name );
-
- if( !priv->b_preparsing && !i_ret )
- input_SendEventMetaInfo( p_input );
- return i_ret;
- }
case INPUT_ADD_BOOKMARK:
p_bkmk = va_arg( args, seekpoint_t * );
p_bkmk = vlc_seekpoint_Duplicate( p_bkmk );
diff --git a/src/input/es_out.c b/src/input/es_out.c
index 7965836512..45cea092b1 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -1243,9 +1243,11 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, const vlc_meta_t *p_me
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
es_out_pgrm_t *p_pgrm;
input_thread_t *p_input = p_sys->p_input;
+ input_item_t *p_item = input_priv(p_input)->p_item;
const char *psz_title = NULL;
const char *psz_provider = NULL;
int i;
+ bool b_has_new_infos = false;
msg_Dbg( p_input, "EsOutProgramMeta: number=%d", i_group );
@@ -1280,7 +1282,9 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, const vlc_meta_t *p_me
{
/* Remove old entries */
char *psz_oldinfokey = EsOutProgramGetMetaName( p_pgrm );
- input_Control( p_input, INPUT_DEL_INFO, psz_oldinfokey, NULL );
+
+ if( !input_item_DelInfo( p_item, psz_oldinfokey, NULL ) )
+ b_has_new_infos = true;
/* TODO update epg name ?
* TODO update scrambled info name ? */
free( psz_oldinfokey );
@@ -1357,7 +1361,12 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, const vlc_meta_t *p_me
"%s",psz_provider );
}
if( p_cat )
- input_Control( p_input, INPUT_MERGE_INFOS, p_cat );
+ {
+ input_item_MergeInfos( p_item, p_cat );
+ b_has_new_infos = true;
+ }
+ if( !input_priv(p_input)->b_preparsing && b_has_new_infos )
+ input_SendEventMetaInfo( p_input );
}
static void EsOutProgramEpgEvent( es_out_t *out, int i_group, const vlc_epg_event_t *p_event )
@@ -1440,16 +1449,17 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, const vlc_epg_t *p_epg
input_item_SetESNowPlaying( input_priv(p_input)->p_item, psz_nowplaying );
input_SendEventMeta( p_input );
+ const char *now_playing_tr =
+ vlc_meta_TypeToLocalizedString(vlc_meta_ESNowPlaying);
+ int ret;
if( psz_nowplaying )
- {
- input_Control( p_input, INPUT_ADD_INFO, psz_cat,
- vlc_meta_TypeToLocalizedString(vlc_meta_ESNowPlaying), "%s", psz_nowplaying );
- }
+ ret = input_item_AddInfo( p_item, psz_cat, now_playing_tr,
+ "%s", psz_nowplaying );
else
- {
- input_Control( p_input, INPUT_DEL_INFO, psz_cat,
- vlc_meta_TypeToLocalizedString(vlc_meta_ESNowPlaying) );
- }
+ ret = input_item_DelInfo( p_item, psz_cat, now_playing_tr );
+
+ if( ret == VLC_SUCCESS && !input_priv(p_input)->b_preparsing )
+ input_SendEventMetaInfo( p_input );
}
free( psz_cat );
@@ -1468,6 +1478,7 @@ static void EsOutProgramUpdateScrambled( es_out_t *p_out, es_out_pgrm_t *p_pgrm
{
es_out_sys_t *p_sys = container_of(p_out, es_out_sys_t, out);
input_thread_t *p_input = p_sys->p_input;
+ input_item_t *p_item = input_priv(p_input)->p_item;
es_out_id_t *es;
bool b_scrambled = false;
@@ -1484,12 +1495,15 @@ static void EsOutProgramUpdateScrambled( es_out_t *p_out, es_out_pgrm_t *p_pgrm
p_pgrm->b_scrambled = b_scrambled;
char *psz_cat = EsOutProgramGetMetaName( p_pgrm );
+ int ret;
if( b_scrambled )
- input_Control( p_input, INPUT_ADD_INFO, psz_cat, _("Scrambled"), _("Yes") );
+ ret = input_item_AddInfo( p_item, psz_cat, _("Scrambled"), _("Yes") );
else
- input_Control( p_input, INPUT_DEL_INFO, psz_cat, _("Scrambled") );
+ ret = input_item_DelInfo( p_item, psz_cat, _("Scrambled") );
free( psz_cat );
+ if( ret == VLC_SUCCESS && !input_priv(p_input)->b_preparsing )
+ input_SendEventMetaInfo( p_input );
input_SendEventProgramScrambled( p_input, p_pgrm->i_id, b_scrambled );
}
@@ -3241,6 +3255,7 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const vlc_meta_t *p
{
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
input_thread_t *p_input = p_sys->p_input;
+ input_item_t *p_item = input_priv(p_input)->p_item;
const es_format_t *p_fmt_es = &es->fmt;
const es_format_t *fmt = es->fmt_out.i_cat != UNKNOWN_ES ? &es->fmt_out : &es->fmt;
@@ -3559,20 +3574,25 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const vlc_meta_t *p
free( ppsz_all_keys );
}
/* */
- input_Control( p_input, INPUT_REPLACE_INFOS, p_cat );
+ input_item_ReplaceInfos( p_item, p_cat );
+ if( !input_priv(p_input)->b_preparsing )
+ input_SendEventMetaInfo( p_input );
}
static void EsOutDeleteInfoEs( es_out_t *out, es_out_id_t *es )
{
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
+ input_thread_t *p_input = p_sys->p_input;
+ input_item_t *p_item = input_priv(p_input)->p_item;
char* psz_info_category;
if( likely( psz_info_category = EsInfoCategoryName( es ) ) )
{
- input_Control( p_sys->p_input, INPUT_DEL_INFO,
- psz_info_category, NULL );
-
+ int ret = input_item_DelInfo( p_item, psz_info_category, NULL );
free( psz_info_category );
+
+ if( ret == VLC_SUCCESS && !input_priv(p_input)->b_preparsing )
+ input_SendEventMetaInfo( p_input );
}
}
More information about the vlc-commits
mailing list