vlc | branch: master | Thomas Guillem <[email protected]> | Mon Jun 17 09:26:50 2019 +0200| [579d28a3a5c99b779fd40dafcfcfcd920cc28f65] | committer: Thomas Guillem
player: merge Set/Get Audio/Subtitle delay into Set/Get Category delay > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=579d28a3a5c99b779fd40dafcfcfcd920cc28f65 --- include/vlc_player.h | 91 +++++++++++---------- modules/gui/macosx/playlist/VLCPlayerController.m | 27 ++++--- modules/gui/qt/components/player_controller.cpp | 35 ++++----- src/input/player.c | 96 +++++++++++------------ src/libvlccore.sym | 6 +- test/src/input/player.c | 15 +--- 6 files changed, 129 insertions(+), 141 deletions(-) diff --git a/include/vlc_player.h b/include/vlc_player.h index 403f405d52..5b7a2fe9a8 100644 --- a/include/vlc_player.h +++ b/include/vlc_player.h @@ -281,8 +281,7 @@ enum vlc_player_seek_speed * * @see vlc_player_SeekByPos() * @see vlc_player_SeekByTime() - * @see vlc_player_SetAudioDelay() - * @see vlc_player_SetSubtitleDelay() + * @see vlc_player_SetCategoryDelay() */ enum vlc_player_whence { @@ -671,28 +670,17 @@ struct vlc_player_cbs bool enabled, void *data); /** - * Called when the player audio delay has changed + * Called when the player category delay has changed * - * @see vlc_player_SetAudioDelay() + * @see vlc_player_SetCategoryDelay() * * @param player locked player instance + * @param cat AUDIO_ES or SPU_ES * @param new_delay audio delay * @param data opaque pointer set by vlc_player_AddListener() */ - void (*on_audio_delay_changed)(vlc_player_t *player, - vlc_tick_t new_delay, void *data); - - /** - * Called when the player subtitle delay has changed - * - * @see vlc_player_SetSubtitleDelay() - * - * @param player locked player instance - * @param new_delay subtitle delay - * @param data opaque pointer set by vlc_player_AddListener() - */ - void (*on_subtitle_delay_changed)(vlc_player_t *player, - vlc_tick_t new_delay, void *data); + void (*on_category_delay_changed)(vlc_player_t *player, + enum es_format_category_e cat, vlc_tick_t new_delay, void *data); /** * Called when associated subtitle has changed @@ -2404,52 +2392,71 @@ vlc_player_ToggleRecording(vlc_player_t *player) } /** - * Get the audio delay for the current media + * Get the delay of a category * - * @see vlc_player_cbs.on_audio_delay_changed + * @see vlc_player_cbs.on_category_delay_changed * * @param player locked player instance + * @param cat AUDIO_ES or SPU_ES (VIDEO_ES not supported yet) + * @return a valid delay or 0 */ VLC_API vlc_tick_t -vlc_player_GetAudioDelay(vlc_player_t *player); +vlc_player_GetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat); /** - * Set the audio delay for the current media + * Set the delay of one category for the current media * * @note A successful call will trigger the - * vlc_player_cbs.on_audio_delay_changed event. + * vlc_player_cbs.on_category_delay_changed event. * * @param player locked player instance + * @param cat AUDIO_ES or SPU_ES (VIDEO_ES not supported yet) * @param delay a valid time * @param whence absolute or relative + * @return VLC_SUCCESS or VLC_EGENERIC if the category is not handled */ -VLC_API void +VLC_API int +vlc_player_SetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat, + vlc_tick_t delay, enum vlc_player_whence whence); + +/** + * Helper to get the audio delay + */ +static inline vlc_tick_t +vlc_player_GetAudioDelay(vlc_player_t *player) +{ + return vlc_player_GetCategoryDelay(player, AUDIO_ES); +} + +/** + * Helper to set the audio delay + */ +static inline void vlc_player_SetAudioDelay(vlc_player_t *player, vlc_tick_t delay, - enum vlc_player_whence whence); + enum vlc_player_whence whence) + +{ + vlc_player_SetCategoryDelay(player, AUDIO_ES, delay, whence); +} /** - * Get the subtitle delay for the current media - * - * @see vlc_player_cbs.on_subtitle_delay_changed - * - * @param player locked player instance + * Helper to get the subtitle delay */ -VLC_API vlc_tick_t -vlc_player_GetSubtitleDelay(vlc_player_t *player); +static inline vlc_tick_t +vlc_player_GetSubtitleDelay(vlc_player_t *player) +{ + return vlc_player_GetCategoryDelay(player, SPU_ES); +} /** - * Set the subtitle delay for the current media - * - * @note A successful call will trigger the - * vlc_player_cbs.on_subtitle_delay_changed event. - * - * @param player locked player instance - * @param delay a valid time - * @param whence absolute or relative + * Helper to set the subtitle delay */ -VLC_API void +static inline void vlc_player_SetSubtitleDelay(vlc_player_t *player, vlc_tick_t delay, - enum vlc_player_whence whence); + enum vlc_player_whence whence) +{ + vlc_player_SetCategoryDelay(player, SPU_ES, delay, whence); +} /** * Set the subtitle text scaling factor diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m b/modules/gui/macosx/playlist/VLCPlayerController.m index 04f71258d0..a3478417ae 100644 --- a/modules/gui/macosx/playlist/VLCPlayerController.m +++ b/modules/gui/macosx/playlist/VLCPlayerController.m @@ -284,21 +284,23 @@ static void cb_player_teletext_transparency_changed(vlc_player_t *p_player, bool }); } -static void cb_player_audio_delay_changed(vlc_player_t *p_player, vlc_tick_t newDelay, void *p_data) +static void cb_player_category_delay_changed(vlc_player_t *p_player, enum es_format_category_e cat, + vlc_tick_t newDelay, void *p_data) { VLC_UNUSED(p_player); dispatch_async(dispatch_get_main_queue(), ^{ VLCPlayerController *playerController = (__bridge VLCPlayerController *)p_data; - [playerController audioDelayChanged:newDelay]; - }); -} - -static void cb_player_subtitle_delay_changed(vlc_player_t *p_player, vlc_tick_t newDelay, void *p_data) -{ - VLC_UNUSED(p_player); - dispatch_async(dispatch_get_main_queue(), ^{ - VLCPlayerController *playerController = (__bridge VLCPlayerController *)p_data; - [playerController subtitlesDelayChanged:newDelay]; + switch (cat) + { + case AUDIO_ES: + [playerController audioDelayChanged:newDelay]; + break; + case SPU_ES: + [playerController subtitlesDelayChanged:newDelay]; + break; + default: + vlc_assert_unreachable(); + } }); } @@ -464,8 +466,7 @@ static const struct vlc_player_cbs player_callbacks = { cb_player_teletext_enabled_changed, cb_player_teletext_page_changed, cb_player_teletext_transparency_changed, - cb_player_audio_delay_changed, - cb_player_subtitle_delay_changed, + cb_player_category_delay_changed, cb_player_associated_subs_fps_changed, cb_player_renderer_changed, cb_player_record_changed, diff --git a/modules/gui/qt/components/player_controller.cpp b/modules/gui/qt/components/player_controller.cpp index 3e386daf69..aeb5954cfa 100644 --- a/modules/gui/qt/components/player_controller.cpp +++ b/modules/gui/qt/components/player_controller.cpp @@ -579,25 +579,25 @@ static void on_player_teletext_transparency_changed(vlc_player_t *, bool enabled }); } -static void on_player_audio_delay_changed(vlc_player_t *, vlc_tick_t new_delay, +static void on_player_category_delay_changed(vlc_player_t *, + enum es_format_category_e cat, vlc_tick_t new_delay, void *data) { PlayerControllerPrivate* that = static_cast<PlayerControllerPrivate*>(data); - msg_Dbg( that->p_intf, "on_player_audio_delay_changed"); - that->callAsync([that,new_delay] (){ - that->m_audioDelay = new_delay; - emit that->q_func()->audioDelayChanged( new_delay ); - }); -} - -static void on_player_subtitle_delay_changed(vlc_player_t *, vlc_tick_t new_delay, - void *data) -{ - PlayerControllerPrivate* that = static_cast<PlayerControllerPrivate*>(data); - msg_Dbg( that->p_intf, "on_player_subtitle_delay_changed"); - that->callAsync([that,new_delay] (){ - that->m_subtitleDelay = new_delay; - emit that->q_func()->subtitleDelayChanged( new_delay ); + msg_Dbg( that->p_intf, "on_player_category_delay_changed: %d", cat ); + that->callAsync([that,cat,new_delay] (){ + switch (cat) + { + case AUDIO_ES: + that->m_audioDelay = new_delay; + emit that->q_func()->audioDelayChanged( new_delay ); + break; + case SPU_ES: + that->m_subtitleDelay = new_delay; + emit that->q_func()->subtitleDelayChanged( new_delay ); + break; + default: vlc_assert_unreachable(); + } }); } @@ -819,8 +819,7 @@ static const struct vlc_player_cbs player_cbs = { on_player_teletext_enabled_changed, on_player_teletext_page_changed, on_player_teletext_transparency_changed, - on_player_audio_delay_changed, - on_player_subtitle_delay_changed, + on_player_category_delay_changed, on_player_associated_subs_fps_changed, on_player_renderer_changed, on_player_record_changed, diff --git a/src/input/player.c b/src/input/player.c index cdb170f167..35c6b554b5 100644 --- a/src/input/player.c +++ b/src/input/player.c @@ -2053,12 +2053,12 @@ input_thread_Events(input_thread_t *input_thread, break; case INPUT_EVENT_AUDIO_DELAY: input->audio_delay = event->audio_delay; - vlc_player_SendEvent(player, on_audio_delay_changed, + vlc_player_SendEvent(player, on_category_delay_changed, AUDIO_ES, input->audio_delay); break; case INPUT_EVENT_SUBTITLE_DELAY: input->subtitle_delay = event->subtitle_delay; - vlc_player_SendEvent(player, on_subtitle_delay_changed, + vlc_player_SendEvent(player, on_category_delay_changed, SPU_ES, input->subtitle_delay); break; case INPUT_EVENT_CACHE: @@ -2823,62 +2823,61 @@ vlc_player_SetRecordingEnabled(vlc_player_t *player, bool enable) _("Recording") : _("Recording done")); } -void -vlc_player_SetAudioDelay(vlc_player_t *player, vlc_tick_t delay, - enum vlc_player_whence whence) +int +vlc_player_SetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat, + vlc_tick_t delay, enum vlc_player_whence whence) { bool absolute = whence == VLC_PLAYER_WHENCE_ABSOLUTE; struct vlc_player_input *input = vlc_player_get_input_locked(player); if (!input) - return; + return VLC_EGENERIC; - input_ControlPush(input->thread, INPUT_CONTROL_SET_AUDIO_DELAY, - &(input_control_param_t) { - .delay = { - .b_absolute = whence == VLC_PLAYER_WHENCE_ABSOLUTE, - .i_val = delay, - }, - }); + switch (cat) + { + case AUDIO_ES: + input_ControlPush(input->thread, INPUT_CONTROL_SET_AUDIO_DELAY, + &(input_control_param_t) { + .delay = { + .b_absolute = absolute, + .i_val = delay, + }, + }); + break; + case SPU_ES: + input_ControlPush(input->thread, INPUT_CONTROL_SET_SPU_DELAY, + &(input_control_param_t) { + .delay = { + .b_absolute = absolute, + .i_val = delay, + }, + }); + break; + default: + return VLC_EGENERIC; + } - if (!absolute) - delay += input->audio_delay; - vlc_player_vout_OSDMessage(player, _("Audio delay: %i ms"), + vlc_player_vout_OSDMessage(player, _("%s delay: %s%i ms"), + es_format_category_to_string(cat), + absolute ? "" : "+", (int)MS_FROM_VLC_TICK(delay)); + return VLC_SUCCESS; } vlc_tick_t -vlc_player_GetAudioDelay(vlc_player_t *player) +vlc_player_GetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat) { struct vlc_player_input *input = vlc_player_get_input_locked(player); - return input ? input->audio_delay : 0; -} - -static void -vlc_player_SetSubtitleDelayInternal(vlc_player_t *player, vlc_tick_t delay, - enum vlc_player_whence whence) -{ - bool absolute = whence == VLC_PLAYER_WHENCE_ABSOLUTE; - struct vlc_player_input *input = vlc_player_get_input_locked(player); if (!input) - return; - - input_ControlPush(input->thread, INPUT_CONTROL_SET_SPU_DELAY, - &(input_control_param_t) { - .delay = { - .b_absolute = absolute, - .i_val = delay, - }, - }); -} - -void -vlc_player_SetSubtitleDelay(vlc_player_t *player, vlc_tick_t delay, - enum vlc_player_whence whence) -{ - vlc_player_SetSubtitleDelayInternal(player, delay, whence); - vlc_player_vout_OSDMessage(player, _("Subtitle delay: %s%i ms"), - whence == VLC_PLAYER_WHENCE_ABSOLUTE ? "" : "+", - (int)MS_FROM_VLC_TICK(delay)); + return 0; + switch (cat) + { + case AUDIO_ES: + return input->audio_delay; + case SPU_ES: + return input->subtitle_delay; + default: + return 0; + } } static struct { @@ -2931,13 +2930,6 @@ vlc_player_GetSubtitleTextScale(vlc_player_t *player) return var_GetInteger(player, "sub-text-scale"); } -vlc_tick_t -vlc_player_GetSubtitleDelay(vlc_player_t *player) -{ - struct vlc_player_input *input = vlc_player_get_input_locked(player); - return input ? input->subtitle_delay : 0; -} - int vlc_player_GetSignal(vlc_player_t *player, float *quality, float *strength) { diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 8cca2bbc01..0cfe87f88c 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -783,8 +783,8 @@ vlc_player_CondWait vlc_player_DisplayPosition vlc_player_DecrementRate vlc_player_Delete -vlc_player_GetAudioDelay vlc_player_GetCapabilities +vlc_player_GetCategoryDelay vlc_player_GetCategoryLanguage vlc_player_GetCurrentMedia vlc_player_GetError @@ -801,7 +801,6 @@ vlc_player_GetSelectedTitleIdx vlc_player_GetSignal vlc_player_GetState vlc_player_GetStatistics -vlc_player_GetSubtitleDelay vlc_player_GetSubtitleTextScale vlc_player_GetTeletextPage vlc_player_GetTime @@ -848,13 +847,12 @@ vlc_player_SelectTitleIdx vlc_player_SelectTrack vlc_player_SetAssociatedSubsFPS vlc_player_SetAtoBLoop -vlc_player_SetAudioDelay +vlc_player_SetCategoryDelay vlc_player_SetCurrentMedia vlc_player_SetMediaStoppedAction vlc_player_SetRecordingEnabled vlc_player_SetRenderer vlc_player_SetStartPaused -vlc_player_SetSubtitleDelay vlc_player_SetSubtitleTextScale vlc_player_SetTeletextEnabled vlc_player_SetTeletextTransparency diff --git a/test/src/input/player.c b/test/src/input/player.c index 2c031f83a4..e467f60073 100644 --- a/test/src/input/player.c +++ b/test/src/input/player.c @@ -104,8 +104,7 @@ struct report_media_subitems X(vlc_player_title_list *, on_titles_changed) \ X(size_t, on_title_selection_changed) \ X(struct report_chapter_selection, on_chapter_selection_changed) \ - X(vlc_tick_t, on_audio_delay_changed) \ - X(vlc_tick_t, on_subtitle_delay_changed) \ + X(vlc_tick_t, on_category_delay_changed) \ X(bool, on_recording_changed) \ X(struct report_signal, on_signal_changed) \ X(struct input_stats_t, on_statistics_changed) \ @@ -389,19 +388,11 @@ player_on_chapter_selection_changed(vlc_player_t *player, } static void -player_on_audio_delay_changed(vlc_player_t *player, vlc_tick_t new_delay, +player_on_category_delay_changed(vlc_player_t *player, vlc_tick_t new_delay, void *data) { struct ctx *ctx = get_ctx(player, data); - VEC_PUSH(on_audio_delay_changed, new_delay); -} - -static void -player_on_subtitle_delay_changed(vlc_player_t *player, vlc_tick_t new_delay, - void *data) -{ - struct ctx *ctx = get_ctx(player, data); - VEC_PUSH(on_subtitle_delay_changed, new_delay); + VEC_PUSH(on_category_delay_changed, new_delay); } static void _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
