[vlc-devel] [PATCH v4 1/9] core: change the "--clock-master" type to string

Thomas Guillem thomas at gllm.fr
Thu Apr 1 14:00:24 UTC 2021


Keeping compatibility with the legacy type (0 and 1).
---
 src/input/es_out.c  | 42 +++++++++++++++++++++++++++++++++++++++++-
 src/libvlc-module.c |  9 ++++-----
 2 files changed, 45 insertions(+), 6 deletions(-)

diff --git a/src/input/es_out.c b/src/input/es_out.c
index b3b35621052..d0c8ee587e1 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -264,6 +264,46 @@ static int LanguageArrayIndex( char **ppsz_langs, const char *psz_lang );
 static char *EsOutProgramGetMetaName( es_out_pgrm_t *p_pgrm );
 static char *EsInfoCategoryName( es_out_id_t* es );
 
+struct clock_source_mapping
+{
+    char key[sizeof("monotonic")];
+    enum vlc_clock_master_source val;
+};
+
+static int clock_source_mapping_cmp(const void *key, const void *val)
+{
+    const struct clock_source_mapping *entry = val;
+    return strcasecmp( key, entry->key );
+}
+
+static enum vlc_clock_master_source
+clock_source_Inherit(vlc_object_t *obj)
+{
+    static const struct clock_source_mapping clock_source_list[] =
+    {
+        { "0", VLC_CLOCK_MASTER_AUDIO }, /* legacy option */
+        { "1", VLC_CLOCK_MASTER_MONOTONIC }, /* legacy option */
+        { "audio", VLC_CLOCK_MASTER_AUDIO },
+        { "monotonic", VLC_CLOCK_MASTER_MONOTONIC },
+    };
+
+    char *master_source_str = var_InheritString(obj, "clock-master");
+    if (master_source_str == NULL)
+        goto default_val;
+
+    const struct clock_source_mapping *entry =
+        bsearch(master_source_str, clock_source_list, ARRAY_SIZE(clock_source_list),
+                sizeof (*clock_source_list), clock_source_mapping_cmp);
+    free(master_source_str);
+    if (entry == NULL)
+        goto default_val;
+
+    return entry->val;
+
+default_val:
+    return VLC_CLOCK_MASTER_DEFAULT;
+}
+
 static inline int EsOutGetClosedCaptionsChannel( const es_format_t *p_fmt )
 {
     int i_channel;
@@ -517,7 +557,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input, input_source_t *main_source,
     p_sys->i_group_id = var_GetInteger( p_input, "program" );
 
     enum vlc_clock_master_source master_source =
-        var_InheritInteger( p_input, "clock-master" );
+        clock_source_Inherit( VLC_OBJECT(p_input) );
     switch( master_source )
     {
         case VLC_CLOCK_MASTER_AUDIO:
diff --git a/src/libvlc-module.c b/src/libvlc-module.c
index 16d96d53b5c..94b6a644e5f 100644
--- a/src/libvlc-module.c
+++ b/src/libvlc-module.c
@@ -538,9 +538,8 @@ static const char *const screensaver_texts[] = {
 
 #define CLOCK_MASTER_TEXT N_("Clock master source")
 
-static const int pi_clock_master_values[] = {
-    VLC_CLOCK_MASTER_AUDIO,
-    VLC_CLOCK_MASTER_MONOTONIC,
+static const char *const ppsz_clock_master_values[] = {
+    "audio", "monotonic",
 };
 static const char *const ppsz_clock_master_descriptions[] = {
     N_("Audio"),
@@ -1977,9 +1976,9 @@ vlc_module_begin ()
     add_integer( "clock-jitter", 5000, CLOCK_JITTER_TEXT,
               CLOCK_JITTER_LONGTEXT, true )
         change_safe()
-    add_integer( "clock-master", VLC_CLOCK_MASTER_DEFAULT,
+    add_string( "clock-master", "audio",
                  CLOCK_MASTER_TEXT, NULL, true )
-        change_integer_list( pi_clock_master_values, ppsz_clock_master_descriptions )
+        change_string_list( ppsz_clock_master_values, ppsz_clock_master_descriptions )
 
     add_directory("input-record-path", NULL,
                   INPUT_RECORD_PATH_TEXT, INPUT_RECORD_PATH_LONGTEXT)
-- 
2.30.0



More information about the vlc-devel mailing list