diff --git a/plugins/vlc-video/data/locale/en-US.ini b/plugins/vlc-video/data/locale/en-US.ini index 7bf200434..eed6bf258 100644 --- a/plugins/vlc-video/data/locale/en-US.ini +++ b/plugins/vlc-video/data/locale/en-US.ini @@ -12,3 +12,4 @@ Restart="Restart" Stop="Stop" PlaylistNext="Next" PlaylistPrev="Previous" +AudioTrack="Audio Track" diff --git a/plugins/vlc-video/vlc-video-source.c b/plugins/vlc-video/vlc-video-source.c index bea053c2e..bfecbdcfb 100644 --- a/plugins/vlc-video/vlc-video-source.c +++ b/plugins/vlc-video/vlc-video-source.c @@ -18,6 +18,7 @@ #define S_BEHAVIOR_PAUSE_UNPAUSE "pause_unpause" #define S_BEHAVIOR_ALWAYS_PLAY "always_play" #define S_NETWORK_CACHING "network_caching" +#define S_TRACK "track" #define T_(text) obs_module_text(text) #define T_PLAYLIST T_("Playlist") @@ -28,6 +29,7 @@ #define T_BEHAVIOR_PAUSE_UNPAUSE T_("PlaybackBehavior.PauseUnpause") #define T_BEHAVIOR_ALWAYS_PLAY T_("PlaybackBehavior.AlwaysPlay") #define T_NETWORK_CACHING T_("NetworkCaching") +#define T_TRACK T_("AudioTrack") /* ------------------------------------------------------------------------- */ @@ -403,7 +405,7 @@ static int vlcs_audio_setup(void **p_data, char *format, unsigned *rate, } static void add_file(struct vlc_source *c, struct darray *array, - const char *path, int network_caching) + const char *path, int network_caching, int track_index) { DARRAY(struct media_file_data) new_files; struct media_file_data data; @@ -436,6 +438,11 @@ static void add_file(struct vlc_source *c, struct darray *array, network_caching_option.array); dstr_free(&network_caching_option); } + struct dstr track_option = { 0 }; + dstr_catf(&track_option, + ":audio-track=%d", track_index - 1); + libvlc_media_add_option_(new_media, track_option.array); + dstr_free(&track_option); data.path = new_path.array; data.media = new_media; @@ -490,6 +497,7 @@ static void vlcs_update(void *data, obs_data_t *settings) const char *behavior; size_t count; int network_caching; + int track_index; da_init(new_files); da_init(old_files); @@ -503,6 +511,8 @@ static void vlcs_update(void *data, obs_data_t *settings) network_caching = (int)obs_data_get_int(settings, S_NETWORK_CACHING); + track_index = (int)obs_data_get_int(settings, S_TRACK); + if (astrcmpi(behavior, S_BEHAVIOR_PAUSE_UNPAUSE) == 0) { c->behavior = BEHAVIOR_PAUSE_UNPAUSE; } else if (astrcmpi(behavior, S_BEHAVIOR_ALWAYS_PLAY) == 0) { @@ -540,13 +550,14 @@ static void vlcs_update(void *data, obs_data_t *settings) dstr_cat_ch(&dir_path, '/'); dstr_cat(&dir_path, ent->d_name); add_file(c, &new_files.da, dir_path.array, - network_caching); + network_caching, track_index); } dstr_free(&dir_path); os_closedir(dir); } else { - add_file(c, &new_files.da, path, network_caching); + add_file(c, &new_files.da, path, network_caching, + track_index); } obs_data_release(item); @@ -833,6 +844,7 @@ static void vlcs_defaults(obs_data_t *settings) obs_data_set_default_string(settings, S_BEHAVIOR, S_BEHAVIOR_STOP_RESTART); obs_data_set_default_int(settings, S_NETWORK_CACHING, 400); + obs_data_set_default_int(settings, S_TRACK, 1); } static obs_properties_t *vlcs_properties(void *data) @@ -902,6 +914,7 @@ static obs_properties_t *vlcs_properties(void *data) obs_properties_add_int(ppts, S_NETWORK_CACHING, T_NETWORK_CACHING, 100, 60000, 10); + obs_properties_add_int(ppts, S_TRACK, T_TRACK, 1, 10, 1); return ppts; }