Commit 579d28a3 authored by Thomas Guillem's avatar Thomas Guillem

player: merge Set/Get Audio/Subtitle delay into Set/Get Category delay

parent b400bf9e
......@@ -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
......
......@@ -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,
......
......@@ -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,
......
......@@ -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)
{
......
......@@ -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
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment