[vlc-devel] [PATCH 3/3] player: check input_PushControl*() return values
Thomas Guillem
thomas at gllm.fr
Mon Aug 26 15:10:29 CEST 2019
And modify return values of public functions to return the status.
Don't send event or notify via osd if it returns an error.
input_PushControl() returns an error when the control array is full. We could
fix it by using a dynamic array but we will still have to check for the
allocation in that case.
---
include/vlc_player.h | 152 +++++++++++-------
src/player/input.c | 10 +-
src/player/player.c | 375 +++++++++++++++++++++++++------------------
3 files changed, 312 insertions(+), 225 deletions(-)
diff --git a/include/vlc_player.h b/include/vlc_player.h
index 0e0ae33680..98caca567f 100644
--- a/include/vlc_player.h
+++ b/include/vlc_player.h
@@ -455,24 +455,27 @@ vlc_player_Stop(vlc_player_t *player);
* Pause the playback
*
* @param player locked player instance
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_Pause(vlc_player_t *player);
/**
* Resume the playback from a pause
*
* @param player locked player instance
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_Resume(vlc_player_t *player);
/**
* Pause and display the next video frame
*
* @param player locked player instance
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_NextVideoFrame(vlc_player_t *player);
/**
@@ -531,16 +534,17 @@ vlc_player_IsPaused(vlc_player_t *player)
/**
* Helper to toggle the pause state
*/
-static inline void
+static inline int
vlc_player_TogglePause(vlc_player_t *player)
{
if (vlc_player_IsStarted(player))
{
if (vlc_player_IsPaused(player))
- vlc_player_Resume(player);
+ return vlc_player_Resume(player);
else
- vlc_player_Pause(player);
+ return vlc_player_Pause(player);
}
+ return VLC_EGENERIC;
}
/**
@@ -610,24 +614,27 @@ vlc_player_GetRate(vlc_player_t *player);
*
* @param player locked player instance
* @param rate new rate (< 1.f is slower, > 1.f is faster)
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_ChangeRate(vlc_player_t *player, float rate);
/**
* Increment the rate of the player (faster)
*
* @param player locked player instance
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_IncrementRate(vlc_player_t *player);
/**
* Decrement the rate of the player (Slower)
*
* @param player locked player instance
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_DecrementRate(vlc_player_t *player);
/**
@@ -680,8 +687,9 @@ vlc_player_GetPosition(vlc_player_t *player);
* @param position position in the range [0.f;1.f]
* @param speed precise of fast
* @param whence absolute or relative
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SeekByPos(vlc_player_t *player, float position,
enum vlc_player_seek_speed speed,
enum vlc_player_whence whence);
@@ -698,8 +706,9 @@ vlc_player_SeekByPos(vlc_player_t *player, float position,
* @param time a time in the range [0;length]
* @param speed precise of fast
* @param whence absolute or relative
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SeekByTime(vlc_player_t *player, vlc_tick_t time,
enum vlc_player_seek_speed speed,
enum vlc_player_whence whence);
@@ -707,65 +716,65 @@ vlc_player_SeekByTime(vlc_player_t *player, vlc_tick_t time,
/**
* Helper to set the absolute position precisely
*/
-static inline void
+static inline int
vlc_player_SetPosition(vlc_player_t *player, float position)
{
- vlc_player_SeekByPos(player, position, VLC_PLAYER_SEEK_PRECISE,
- VLC_PLAYER_WHENCE_ABSOLUTE);
+ return vlc_player_SeekByPos(player, position, VLC_PLAYER_SEEK_PRECISE,
+ VLC_PLAYER_WHENCE_ABSOLUTE);
}
/**
* Helper to set the absolute position fast
*/
-static inline void
+static inline int
vlc_player_SetPositionFast(vlc_player_t *player, float position)
{
- vlc_player_SeekByPos(player, position, VLC_PLAYER_SEEK_FAST,
- VLC_PLAYER_WHENCE_ABSOLUTE);
+ return vlc_player_SeekByPos(player, position, VLC_PLAYER_SEEK_FAST,
+ VLC_PLAYER_WHENCE_ABSOLUTE);
}
/**
* Helper to jump the position precisely
*/
-static inline void
+static inline int
vlc_player_JumpPos(vlc_player_t *player, float jumppos)
{
/* No fask seek for jumps. Indeed, jumps can seek to the current position
* if not precise enough or if the jump value is too small. */
- vlc_player_SeekByPos(player, jumppos, VLC_PLAYER_SEEK_PRECISE,
- VLC_PLAYER_WHENCE_RELATIVE);
+ return vlc_player_SeekByPos(player, jumppos, VLC_PLAYER_SEEK_PRECISE,
+ VLC_PLAYER_WHENCE_RELATIVE);
}
/**
* Helper to set the absolute time precisely
*/
-static inline void
+static inline int
vlc_player_SetTime(vlc_player_t *player, vlc_tick_t time)
{
- vlc_player_SeekByTime(player, time, VLC_PLAYER_SEEK_PRECISE,
- VLC_PLAYER_WHENCE_ABSOLUTE);
+ return vlc_player_SeekByTime(player, time, VLC_PLAYER_SEEK_PRECISE,
+ VLC_PLAYER_WHENCE_ABSOLUTE);
}
/**
* Helper to set the absolute time fast
*/
-static inline void
+static inline int
vlc_player_SetTimeFast(vlc_player_t *player, vlc_tick_t time)
{
- vlc_player_SeekByTime(player, time, VLC_PLAYER_SEEK_FAST,
- VLC_PLAYER_WHENCE_ABSOLUTE);
+ return vlc_player_SeekByTime(player, time, VLC_PLAYER_SEEK_FAST,
+ VLC_PLAYER_WHENCE_ABSOLUTE);
}
/**
* Helper to jump the time precisely
*/
-static inline void
+static inline int
vlc_player_JumpTime(vlc_player_t *player, vlc_tick_t jumptime)
{
/* No fask seek for jumps. Indeed, jumps can seek to the current position
* if not precise enough or if the jump value is too small. */
- vlc_player_SeekByTime(player, jumptime, VLC_PLAYER_SEEK_PRECISE,
- VLC_PLAYER_WHENCE_RELATIVE);
+ return vlc_player_SeekByTime(player, jumptime, VLC_PLAYER_SEEK_PRECISE,
+ VLC_PLAYER_WHENCE_RELATIVE);
}
/**
@@ -817,8 +826,9 @@ vlc_player_GetAtoBLoop(vlc_player_t *player, vlc_tick_t *a_time, float *a_pos,
*
* @param player locked player instance
* @param nav navigation key
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_Navigate(vlc_player_t *player, enum vlc_player_nav nav);
/**
@@ -829,7 +839,7 @@ vlc_player_Navigate(vlc_player_t *player, enum vlc_player_nav nav);
* @param whence absolute or relative
* @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_UpdateViewpoint(vlc_player_t *player,
const vlc_viewpoint_t *viewpoint,
enum vlc_player_whence whence);
@@ -853,8 +863,9 @@ vlc_player_IsRecording(vlc_player_t *player);
*
* @param player locked player instance
* @param enabled true to enable recording
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SetRecordingEnabled(vlc_player_t *player, bool enabled);
/**
@@ -1041,8 +1052,9 @@ vlc_player_GetSelectedTitle(vlc_player_t *player)
*
* @param player locked player instance
* @param index valid index in the range [0;count[
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectTitleIdx(vlc_player_t *player, size_t index);
/**
@@ -1056,8 +1068,9 @@ vlc_player_SelectTitleIdx(vlc_player_t *player, size_t index);
*
* @param player locked player instance
* @param title a valid title coming from the vlc_player_title_list
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectTitle(vlc_player_t *player,
const struct vlc_player_title *title);
@@ -1070,8 +1083,9 @@ vlc_player_SelectTitle(vlc_player_t *player,
* @param player locked player instance
* @param title the selected title
* @param chapter_idx index from vlc_player_title.chapters
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectChapter(vlc_player_t *player,
const struct vlc_player_title *title,
size_t chapter_idx);
@@ -1080,16 +1094,18 @@ vlc_player_SelectChapter(vlc_player_t *player,
* Select the next title for the current media
*
* @see vlc_player_SelectTitleIdx()
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectNextTitle(vlc_player_t *player);
/**
* Select the previous title for the current media
*
* @see vlc_player_SelectTitleIdx()
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectPrevTitle(vlc_player_t *player);
/**
@@ -1125,24 +1141,27 @@ vlc_player_GetSelectedChapter(vlc_player_t *player)
*
* @param player locked player instance
* @param index valid index in the range [0;vlc_player_title.chapter_count[
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectChapterIdx(vlc_player_t *player, size_t index);
/**
* Select the next chapter for the current media
*
* @see vlc_player_SelectChapterIdx()
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectNextChapter(vlc_player_t *player);
/**
* Select the previous chapter for the current media
*
* @see vlc_player_SelectChapterIdx()
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectPrevChapter(vlc_player_t *player);
/** @} vlc_player__titles */
@@ -1232,24 +1251,27 @@ vlc_player_GetProgram(vlc_player_t *player, int group_id);
* @param player locked player instance
* @param group_id a program ID (retrieved from
* vlc_player_cbs.on_program_list_changed or vlc_player_GetProgramAt())
+ * @return VLC_SUCCESS or VLC_EGENERIC in case of error
*/
-VLC_API void
+VLC_API int
vlc_player_SelectProgram(vlc_player_t *player, int group_id);
/**
* Select the next program
*
* @param player locked player instance
+ * @return VLC_SUCCESS or VLC_EGENERIC in case of error
*/
-VLC_API void
+VLC_API int
vlc_player_SelectNextProgram(vlc_player_t *player);
/**
* Select the previous program
*
* @param player locked player instance
+ * @return VLC_SUCCESS or VLC_EGENERIC in case of error
*/
-VLC_API void
+VLC_API int
vlc_player_SelectPrevProgram(vlc_player_t *player);
/**
@@ -1511,9 +1533,9 @@ vlc_player_GetSelectedTrack(vlc_player_t *player, enum es_format_category_e cat)
* @param id an ES ID (retrieved from vlc_player_cbs.on_track_list_changed or
* vlc_player_GetTrackAt())
* @param policy exclusive or simultaneous
- * @return the number of track selected for es_id category
+ * @return the number of track selected for es_id category or a VLC error code
*/
-VLC_API unsigned
+VLC_API int
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *es_id,
enum vlc_player_select_policy policy);
@@ -1521,7 +1543,7 @@ vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *es_id,
/**
* Helper to select a track
*/
-static inline unsigned
+static inline int
vlc_player_SelectTrack(vlc_player_t *player,
const struct vlc_player_track *track,
enum vlc_player_select_policy policy)
@@ -1549,9 +1571,9 @@ vlc_player_SelectTrack(vlc_player_t *player,
* corresponding to the category will be ignored.
* (ES IDs can be retrieved from vlc_player_cbs.on_track_list_changed or
* vlc_player_GetTrackAt())
- * @return the number of track selected for that category
+ * @return the number of track selected for that category or a VLC error code
*/
-VLC_API unsigned
+VLC_API int
vlc_player_SelectEsIdList(vlc_player_t *player,
enum es_format_category_e cat,
vlc_es_id_t *const es_id_list[]);
@@ -1568,8 +1590,9 @@ vlc_player_SelectEsIdList(vlc_player_t *player,
*
* @param player locked player instance
* @param cat VIDEO_ES, AUDIO_ES or SPU_ES
+ * @return the number of newly track selected or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectNextTrack(vlc_player_t *player,
enum es_format_category_e cat);
@@ -1585,8 +1608,9 @@ vlc_player_SelectNextTrack(vlc_player_t *player,
*
* @param player locked player instance
* @param cat VIDEO_ES, AUDIO_ES or SPU_ES
+ * @return the number of newly track selected or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectPrevTrack(vlc_player_t *player,
enum es_format_category_e cat);
@@ -1601,18 +1625,19 @@ vlc_player_SelectPrevTrack(vlc_player_t *player,
* @param player locked player instance
* @param id an ES ID (retrieved from vlc_player_cbs.on_track_list_changed or
* vlc_player_GetTrackAt())
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_UnselectEsId(vlc_player_t *player, vlc_es_id_t *es_id);
/**
* Helper to unselect a track
*/
-static inline void
+static inline int
vlc_player_UnselectTrack(vlc_player_t *player,
const struct vlc_player_track *track)
{
- vlc_player_UnselectEsId(player, track->es_id);
+ return vlc_player_UnselectEsId(player, track->es_id);
}
/**
@@ -1642,18 +1667,19 @@ vlc_player_UnselectTrackCategory(vlc_player_t *player,
* @param player locked player instance
* @param id an ES ID (retrieved from vlc_player_cbs.on_track_list_changed or
* vlc_player_GetTrackAt())
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_RestartEsId(vlc_player_t *player, vlc_es_id_t *es_id);
/**
* Helper to restart a track
*/
-static inline void
+static inline int
vlc_player_RestartTrack(vlc_player_t *player,
const struct vlc_player_track *track)
{
- vlc_player_RestartEsId(player, track->es_id);
+ return vlc_player_RestartEsId(player, track->es_id);
}
/**
@@ -1995,11 +2021,12 @@ vlc_player_HasTeletextMenu(vlc_player_t *player);
*
* @note A successful call will trigger the
* vlc_player_cbs.on_teletext_enabled_changed event.
- *
+ *
* @param player locked player instance
* @param enabled true to enable
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SetTeletextEnabled(vlc_player_t *player, bool enabled);
/**
@@ -2026,8 +2053,9 @@ vlc_player_IsTeletextEnabled(vlc_player_t *player);
*
* @param player locked player instance
* @param page a page in the range ]0;888] or a valid key
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SelectTeletextPage(vlc_player_t *player, unsigned page);
/**
@@ -2050,8 +2078,9 @@ vlc_player_GetTeletextPage(vlc_player_t *player);
*
* @param player locked player instance
* @param enabled true to enable
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SetTeletextTransparency(vlc_player_t *player, bool enabled);
/**
@@ -2080,8 +2109,9 @@ vlc_player_IsTeletextTransparent(vlc_player_t *player);
* @param player locked player instance
* @param renderer a valid renderer item or NULL (to disable it), the item will
* be held by the player
+ * @return VLC_SUCCESS or a VLC error code
*/
-VLC_API void
+VLC_API int
vlc_player_SetRenderer(vlc_player_t *player, vlc_renderer_item_t *renderer);
/**
diff --git a/src/player/input.c b/src/player/input.c
index 4ffe59522c..afb88ed1cd 100644
--- a/src/player/input.c
+++ b/src/player/input.c
@@ -794,10 +794,12 @@ vlc_player_input_New(vlc_player_t *player, input_item_t *item)
const input_control_param_t param = {
.cat_delay = { i, cat_delays[i] }
};
- input_ControlPush(input->thread, INPUT_CONTROL_SET_CATEGORY_DELAY,
- ¶m);
- vlc_player_SendEvent(player, on_category_delay_changed, i,
- cat_delays[i]);
+ int ret = input_ControlPush(input->thread,
+ INPUT_CONTROL_SET_CATEGORY_DELAY,
+ ¶m);
+ if (ret == VLC_SUCCESS)
+ vlc_player_SendEvent(player, on_category_delay_changed, i,
+ cat_delays[i]);
}
}
return input;
diff --git a/src/player/player.c b/src/player/player.c
index 0b1b031e0d..54b6d41aef 100644
--- a/src/player/player.c
+++ b/src/player/player.c
@@ -273,30 +273,32 @@ vlc_player_GetProgram(vlc_player_t *player, int id)
return prgm;
}
-void
+int
vlc_player_SelectProgram(vlc_player_t *player, int id)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
+ return VLC_EGENERIC;
const struct vlc_player_program *prgm =
vlc_player_program_vector_FindById(&input->program_vector,
id, NULL);
- if (prgm)
- {
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_PROGRAM,
- &(vlc_value_t) { .i_int = id });
+ if (!prgm)
+ return VLC_EGENERIC;
+ int ret = input_ControlPushHelper(input->thread,
+ INPUT_CONTROL_SET_PROGRAM,
+ &(vlc_value_t) { .i_int = id });
+ if (ret == VLC_SUCCESS)
vlc_player_osd_Program(player, prgm->name);
- }
+ return ret;
}
-static void
+static int
vlc_player_CycleProgram(vlc_player_t *player, bool next)
{
size_t count = vlc_player_GetProgramCount(player);
if (!count)
- return;
+ return VLC_EGENERIC;
size_t index = 0;
bool selected = false;
for (size_t i = 0; i < count; ++i)
@@ -322,19 +324,19 @@ vlc_player_CycleProgram(vlc_player_t *player, bool next)
const struct vlc_player_program *prgm =
vlc_player_GetProgramAt(player, index);
assert(prgm);
- vlc_player_SelectProgram(player, prgm->group_id);
+ return vlc_player_SelectProgram(player, prgm->group_id);
}
-void
+int
vlc_player_SelectNextProgram(vlc_player_t *player)
{
- vlc_player_CycleProgram(player, true);
+ return vlc_player_CycleProgram(player, true);
}
-void
+int
vlc_player_SelectPrevProgram(vlc_player_t *player)
{
- vlc_player_CycleProgram(player, false);
+ return vlc_player_CycleProgram(player, false);
}
size_t
@@ -429,7 +431,7 @@ vlc_player_GetEsIdFromVout(vlc_player_t *player, vout_thread_t *vout)
return NULL;
}
-unsigned
+int
vlc_player_SelectEsIdList(vlc_player_t *player,
enum es_format_category_e cat,
vlc_es_id_t *const es_id_list[])
@@ -444,7 +446,7 @@ vlc_player_SelectEsIdList(vlc_player_t *player,
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return 0;
+ return VLC_EGENERIC;
const size_t max_tracks = max_tracks_by_cat[cat];
@@ -464,7 +466,7 @@ vlc_player_SelectEsIdList(vlc_player_t *player,
vlc_alloc(track_count + 1, sizeof(vlc_es_id_t *));
if (allocated_ids == NULL)
- return 0;
+ return VLC_ENOMEM;
track_count = 0;
for (size_t i = 0; es_id_list[i] != NULL; i++)
@@ -479,11 +481,13 @@ vlc_player_SelectEsIdList(vlc_player_t *player,
allocated_ids[track_count] = NULL;
/* Attempt to select all the requested tracks */
- input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_LIST,
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_LIST,
&(input_control_param_t) {
.list.cat = cat,
.list.ids = allocated_ids,
});
+ if (ret != VLC_SUCCESS)
+ return ret;
/* Display track selection message */
const char *cat_name = es_format_category_to_string(cat);
@@ -517,20 +521,17 @@ vlc_player_SelectEsIdList(vlc_player_t *player,
return track_count;
}
-unsigned
+int
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *id,
enum vlc_player_select_policy policy)
{
+ int ret;
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
return 0;
if (policy == VLC_PLAYER_SELECT_EXCLUSIVE)
- {
- input_ControlPushEsHelper(input->thread, INPUT_CONTROL_SET_ES, id);
- vlc_player_osd_Track(player, id, true);
- return 1;
- }
+ goto select_one;
/* VLC_PLAYER_SELECT_SIMULTANEOUS */
const enum es_format_category_e cat = vlc_es_id_GetCat(id);
@@ -549,16 +550,12 @@ vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *id,
}
if (selected_track_count == 1)
- {
- input_ControlPushEsHelper(input->thread, INPUT_CONTROL_SET_ES, id);
- vlc_player_osd_Track(player, id, true);
- return 1;
- }
+ goto select_one;
vlc_es_id_t **es_id_list =
vlc_alloc(selected_track_count + 1, sizeof(vlc_es_id_t*));
if (!es_id_list)
- return 0;
+ return VLC_ENOMEM;
size_t es_id_list_idx = 0;
/* Assure to select the requeste track */
@@ -573,18 +570,26 @@ vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *id,
}
es_id_list[selected_track_count] = NULL;
- unsigned ret = vlc_player_SelectEsIdList(player, cat, es_id_list);
+ ret = vlc_player_SelectEsIdList(player, cat, es_id_list);
free(es_id_list);
return ret;
+
+select_one:
+ ret = input_ControlPushEsHelper(input->thread, INPUT_CONTROL_SET_ES, id);
+ if (ret != VLC_SUCCESS)
+ return ret;
+ vlc_player_osd_Track(player, id, true);
+ return 1;
+
}
-static void
+static int
vlc_player_CycleTrack(vlc_player_t *player, enum es_format_category_e cat,
bool next)
{
size_t count = vlc_player_GetTrackCount(player, cat);
if (!count)
- return;
+ return 0;
size_t index;
bool selected = false;
@@ -599,7 +604,7 @@ vlc_player_CycleTrack(vlc_player_t *player, enum es_format_category_e cat,
{
/* Can't cycle through tracks if there are more than one
* selected */
- return;
+ return VLC_EGENERIC;
}
index = i;
selected = true;
@@ -624,43 +629,48 @@ vlc_player_CycleTrack(vlc_player_t *player, enum es_format_category_e cat,
const struct vlc_player_track *track =
vlc_player_GetTrackAt(player, cat, index);
if (selected)
- vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
+ return vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
else
- vlc_player_UnselectTrack(player, track);
+ return vlc_player_UnselectTrack(player, track);
}
-void
+int
vlc_player_SelectNextTrack(vlc_player_t *player,
enum es_format_category_e cat)
{
- vlc_player_CycleTrack(player, cat, true);
+ return vlc_player_CycleTrack(player, cat, true);
}
-void
+int
vlc_player_SelectPrevTrack(vlc_player_t *player,
enum es_format_category_e cat)
{
- vlc_player_CycleTrack(player, cat, false);
+ return vlc_player_CycleTrack(player, cat, false);
}
-void
+int
vlc_player_UnselectEsId(vlc_player_t *player, vlc_es_id_t *id)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
+ return VLC_EGENERIC;
- input_ControlPushEsHelper(input->thread, INPUT_CONTROL_UNSET_ES, id);
- vlc_player_osd_Track(player, id, false);
+ int ret = input_ControlPushEsHelper(input->thread, INPUT_CONTROL_UNSET_ES,
+ id);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Track(player, id, false);
+ return ret;
}
-void
+int
vlc_player_RestartEsId(vlc_player_t *player, vlc_es_id_t *id)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
+ if (!input)
+ return VLC_EGENERIC;
- if (input)
- input_ControlPushEsHelper(input->thread, INPUT_CONTROL_RESTART_ES, id);
+ return input_ControlPushEsHelper(input->thread, INPUT_CONTROL_RESTART_ES,
+ id);
}
void
@@ -698,41 +708,41 @@ vlc_player_GetCategoryLanguage(vlc_player_t *player,
}
}
-void
+int
vlc_player_SetTeletextEnabled(vlc_player_t *player, bool enabled)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input || !input->teletext_menu)
- return;
+ return VLC_EGENERIC;
if (enabled)
- vlc_player_SelectEsId(player, input->teletext_menu->t.es_id,
- VLC_PLAYER_SELECT_EXCLUSIVE);
+ return vlc_player_SelectEsId(player, input->teletext_menu->t.es_id,
+ VLC_PLAYER_SELECT_EXCLUSIVE);
else
- vlc_player_UnselectEsId(player, input->teletext_menu->t.es_id);
+ return vlc_player_UnselectEsId(player, input->teletext_menu->t.es_id);
}
-void
+int
vlc_player_SelectTeletextPage(vlc_player_t *player, unsigned page)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input || !input->teletext_menu)
- return;
+ return VLC_EGENERIC;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_VBI_PAGE,
+ return input_ControlPush(input->thread, INPUT_CONTROL_SET_VBI_PAGE,
&(input_control_param_t) {
.vbi_page.id = input->teletext_menu->t.es_id,
.vbi_page.page = page,
});
}
-void
+int
vlc_player_SetTeletextTransparency(vlc_player_t *player, bool enabled)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input || !input->teletext_menu)
- return;
+ return VLC_EGENERIC;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_VBI_TRANSPARENCY,
+ return input_ControlPush(input->thread, INPUT_CONTROL_SET_VBI_TRANSPARENCY,
&(input_control_param_t) {
.vbi_transparency.id = input->teletext_menu->t.es_id,
.vbi_transparency.enabled = enabled,
@@ -801,52 +811,63 @@ vlc_player_GetTitleIdx(vlc_player_t *player,
return -1;
}
-void
+int
vlc_player_SelectTitleIdx(vlc_player_t *player, size_t index)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
- if (input)
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_TITLE,
- &(vlc_value_t){ .i_int = index });
+ if (!input)
+ return VLC_EGENERIC;
+
+ return input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_TITLE,
+ &(vlc_value_t){ .i_int = index });
}
-void
+int
vlc_player_SelectTitle(vlc_player_t *player,
const struct vlc_player_title *title)
{
ssize_t idx = vlc_player_GetTitleIdx(player, title);
- if (idx != -1)
- vlc_player_SelectTitleIdx(player, idx);
+ if (idx == -1)
+ return VLC_EGENERIC;
+
+ return vlc_player_SelectTitleIdx(player, idx);
}
-void
+int
vlc_player_SelectChapter(vlc_player_t *player,
const struct vlc_player_title *title,
size_t chapter_idx)
{
ssize_t idx = vlc_player_GetTitleIdx(player, title);
- if (idx != -1 && idx == vlc_player_GetSelectedTitleIdx(player))
- vlc_player_SelectChapterIdx(player, chapter_idx);
+ if (idx == -1 || idx != vlc_player_GetSelectedTitleIdx(player))
+ return VLC_EGENERIC;
+ return vlc_player_SelectChapterIdx(player, chapter_idx);
}
-void
+int
vlc_player_SelectNextTitle(vlc_player_t *player)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_TITLE_NEXT, NULL);
- vlc_player_osd_Message(player, _("Next title"));
+ return VLC_EGENERIC;
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_TITLE_NEXT,
+ NULL);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Next title"));
+ return ret;
}
-void
+int
vlc_player_SelectPrevTitle(vlc_player_t *player)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_TITLE_PREV, NULL);
- vlc_player_osd_Message(player, _("Previous title"));
+ return VLC_EGENERIC;
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_TITLE_PREV,
+ NULL);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Previous title"));
+ return ret;
}
ssize_t
@@ -859,35 +880,43 @@ vlc_player_GetSelectedChapterIdx(vlc_player_t *player)
return input->chapter_selected;
}
-void
+int
vlc_player_SelectChapterIdx(vlc_player_t *player, size_t index)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_SEEKPOINT,
- &(vlc_value_t){ .i_int = index });
- vlc_player_osd_Message(player, _("Chapter %ld"), index);
+ return VLC_EGENERIC;
+ int ret = input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_SEEKPOINT,
+ &(vlc_value_t){ .i_int = index });
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Chapter %ld"), index);
+ return ret;
}
-void
+int
vlc_player_SelectNextChapter(vlc_player_t *player)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_SEEKPOINT_NEXT, NULL);
- vlc_player_osd_Message(player, _("Next chapter"));
+ return VLC_EGENERIC;
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_SEEKPOINT_NEXT,
+ NULL);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Next chapter"));
+ return ret;
}
-void
+int
vlc_player_SelectPrevChapter(vlc_player_t *player)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPush(input->thread, INPUT_CONTROL_SET_SEEKPOINT_PREV, NULL);
- vlc_player_osd_Message(player, _("Previous chapter"));
+ return VLC_EGENERIC;
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_SEEKPOINT_PREV,
+ NULL);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Previous chapter"));
+ return ret;
}
void
@@ -1031,7 +1060,11 @@ vlc_player_AddAssociatedMedia(vlc_player_t *player,
slave->b_forced = select;
vlc_value_t val = { .p_address = slave };
- input_ControlPushHelper(input->thread, INPUT_CONTROL_ADD_SLAVE, &val);
+ int ret = input_ControlPushHelper(input->thread, INPUT_CONTROL_ADD_SLAVE,
+ &val);
+ if (ret != VLC_SUCCESS)
+ return ret;
+
if (notify)
{
switch( type )
@@ -1166,40 +1199,46 @@ vlc_player_SetStartPaused(vlc_player_t *player, bool start_paused)
player->start_paused = start_paused;
}
-static void
+static int
vlc_player_SetPause(vlc_player_t *player, bool pause)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input || !input->started)
- return;
+ return VLC_EGENERIC;
vlc_value_t val = { .i_int = pause ? PAUSE_S : PLAYING_S };
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_STATE, &val);
+ int ret = input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_STATE,
+ &val);
- vlc_player_osd_Icon(player, pause ? OSD_PAUSE_ICON : OSD_PLAY_ICON);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Icon(player, pause ? OSD_PAUSE_ICON : OSD_PLAY_ICON);
+ return ret;
}
-void
+int
vlc_player_Pause(vlc_player_t *player)
{
- vlc_player_SetPause(player, true);
+ return vlc_player_SetPause(player, true);
}
-void
+int
vlc_player_Resume(vlc_player_t *player)
{
- vlc_player_SetPause(player, false);
+ return vlc_player_SetPause(player, false);
}
-void
+int
vlc_player_NextVideoFrame(vlc_player_t *player)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_FRAME_NEXT, NULL);
- vlc_player_osd_Message(player, _("Next frame"));
+ return VLC_EGENERIC;
+ int ret = input_ControlPushHelper(input->thread,
+ INPUT_CONTROL_SET_FRAME_NEXT, NULL);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, _("Next frame"));
+ return ret;
}
enum vlc_player_state
@@ -1233,29 +1272,29 @@ vlc_player_GetRate(vlc_player_t *player)
return var_GetFloat(player, "rate");
}
-void
+int
vlc_player_ChangeRate(vlc_player_t *player, float rate)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (rate == 0.0)
- return;
+ return VLC_EGENERIC;
/* Save rate accross inputs */
var_SetFloat(player, "rate", rate);
- if (input)
- {
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_RATE,
- &(vlc_value_t) { .f_float = rate });
- }
- else
+ /* The event is sent from the thread processing the control */
+ if (input
+ && input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_RATE,
+ &(vlc_value_t) { .f_float = rate }) == VLC_SUCCESS)
+ vlc_player_osd_Message(player, ("Speed: %.2fx"), rate);
+ else /* Send the event anyway since it's a global state */
vlc_player_SendEvent(player, on_rate_changed, rate);
- vlc_player_osd_Message(player, ("Speed: %.2fx"), rate);
+ return VLC_SUCCESS;
}
-static void
+static int
vlc_player_ChangeRateOffset(vlc_player_t *player, bool increment)
{
static const float rates[] = {
@@ -1276,19 +1315,19 @@ vlc_player_ChangeRateOffset(vlc_player_t *player, bool increment)
}
}
- vlc_player_ChangeRate(player, rate);
+ return vlc_player_ChangeRate(player, rate);
}
-void
+int
vlc_player_IncrementRate(vlc_player_t *player)
{
- vlc_player_ChangeRateOffset(player, true);
+ return vlc_player_ChangeRateOffset(player, true);
}
-void
+int
vlc_player_DecrementRate(vlc_player_t *player)
{
- vlc_player_ChangeRateOffset(player, false);
+ return vlc_player_ChangeRateOffset(player, false);
}
vlc_tick_t
@@ -1340,7 +1379,7 @@ vlc_player_DisplayPosition(vlc_player_t *player)
VLC_PLAYER_WHENCE_ABSOLUTE);
}
-void
+int
vlc_player_SeekByPos(vlc_player_t *player, float position,
enum vlc_player_seek_speed speed,
enum vlc_player_whence whence)
@@ -1349,22 +1388,24 @@ vlc_player_SeekByPos(vlc_player_t *player, float position,
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
+ return VLC_EGENERIC;
const int type =
whence == VLC_PLAYER_WHENCE_ABSOLUTE ? INPUT_CONTROL_SET_POSITION
: INPUT_CONTROL_JUMP_POSITION;
- input_ControlPush(input->thread, type,
+ int ret = input_ControlPush(input->thread, type,
&(input_control_param_t) {
.pos.f_val = position,
.pos.b_fast_seek = speed == VLC_PLAYER_SEEK_FAST,
});
- vlc_player_osd_Position(player, input, VLC_TICK_INVALID, position,
- whence);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Position(player, input, VLC_TICK_INVALID, position,
+ whence);
+ return ret;
}
-void
+int
vlc_player_SeekByTime(vlc_player_t *player, vlc_tick_t time,
enum vlc_player_seek_speed speed,
enum vlc_player_whence whence)
@@ -1373,21 +1414,23 @@ vlc_player_SeekByTime(vlc_player_t *player, vlc_tick_t time,
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
+ return VLC_EGENERIC;
const int type =
whence == VLC_PLAYER_WHENCE_ABSOLUTE ? INPUT_CONTROL_SET_TIME
: INPUT_CONTROL_JUMP_TIME;
- input_ControlPush(input->thread, type,
+ int ret = input_ControlPush(input->thread, type,
&(input_control_param_t) {
.time.i_val = time,
.time.b_fast_seek = speed == VLC_PLAYER_SEEK_FAST,
});
- vlc_player_osd_Position(player, input, time, -1, whence);
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Position(player, input, time, -1, whence);
+ return ret;
}
-void
+int
vlc_player_SetRenderer(vlc_player_t *player, vlc_renderer_item_t *renderer)
{
vlc_player_assert_locked(player);
@@ -1405,6 +1448,7 @@ vlc_player_SetRenderer(vlc_player_t *player, vlc_renderer_item_t *renderer)
&val);
}
vlc_player_SendEvent(player, on_renderer_changed, player->renderer);
+ return VLC_SUCCESS;
}
vlc_renderer_item_t *
@@ -1494,13 +1538,13 @@ vlc_player_GetAtoBLoop(vlc_player_t *player, vlc_tick_t *a_time, float *a_pos,
return VLC_PLAYER_ABLOOP_B;
}
-void
+int
vlc_player_Navigate(vlc_player_t *player, enum vlc_player_nav nav)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
+ return VLC_EGENERIC;
enum input_control_e control;
switch (nav)
@@ -1529,25 +1573,25 @@ vlc_player_Navigate(vlc_player_t *player, enum vlc_player_nav nav)
default:
vlc_assert_unreachable();
}
- input_ControlPushHelper(input->thread, control, NULL);
+ return input_ControlPushHelper(input->thread, control, NULL);
}
-void
+int
vlc_player_UpdateViewpoint(vlc_player_t *player,
const vlc_viewpoint_t *viewpoint,
enum vlc_player_whence whence)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
- if (input)
- {
- input_control_param_t param = { .viewpoint = *viewpoint };
- if (whence == VLC_PLAYER_WHENCE_ABSOLUTE)
- input_ControlPush(input->thread, INPUT_CONTROL_SET_VIEWPOINT,
- ¶m);
- else
- input_ControlPush(input->thread, INPUT_CONTROL_UPDATE_VIEWPOINT,
- ¶m);
- }
+ if (!input)
+ return VLC_EGENERIC;
+
+ input_control_param_t param = { .viewpoint = *viewpoint };
+ if (whence == VLC_PLAYER_WHENCE_ABSOLUTE)
+ return input_ControlPush(input->thread, INPUT_CONTROL_SET_VIEWPOINT,
+ ¶m);
+ else
+ return input_ControlPush(input->thread, INPUT_CONTROL_UPDATE_VIEWPOINT,
+ ¶m);
}
bool
@@ -1558,17 +1602,20 @@ vlc_player_IsRecording(vlc_player_t *player)
return input ? input->recording : false;
}
-void
+int
vlc_player_SetRecordingEnabled(vlc_player_t *player, bool enable)
{
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
- return;
- input_ControlPushHelper(input->thread, INPUT_CONTROL_SET_RECORD_STATE,
- &(vlc_value_t) { .b_bool = enable });
+ return VLC_EGENERIC;
+ int ret = input_ControlPushHelper(input->thread,
+ INPUT_CONTROL_SET_RECORD_STATE,
+ &(vlc_value_t) { .b_bool = enable });
- vlc_player_osd_Message(player, enable ?
- _("Recording") : _("Recording done"));
+ if (ret == VLC_SUCCESS)
+ vlc_player_osd_Message(player, enable ?
+ _("Recording") : _("Recording done"));
+ return ret;
}
int
@@ -1593,12 +1640,16 @@ vlc_player_SetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat,
}
const input_control_param_t param = { .cat_delay = { cat, delay } };
- input_ControlPush(input->thread, INPUT_CONTROL_SET_CATEGORY_DELAY, ¶m);
- vlc_player_osd_Message(player, _("%s delay: %i ms"),
- es_format_category_to_string(cat),
- (int)MS_FROM_VLC_TICK(delay));
- vlc_player_SendEvent(player, on_category_delay_changed, cat, delay);
- return VLC_SUCCESS;
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_CATEGORY_DELAY,
+ ¶m);
+ if (ret == VLC_SUCCESS)
+ {
+ vlc_player_osd_Message(player, _("%s delay: %i ms"),
+ es_format_category_to_string(cat),
+ (int)MS_FROM_VLC_TICK(delay));
+ vlc_player_SendEvent(player, on_category_delay_changed, cat, delay);
+ }
+ return ret;
}
vlc_tick_t
@@ -1640,14 +1691,18 @@ vlc_player_SetEsIdDelay(vlc_player_t *player, vlc_es_id_t *es_id,
}
const input_control_param_t param = { .es_delay = { es_id, delay } };
- input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_DELAY, ¶m);
- if (delay != INT64_MAX)
- vlc_player_osd_Message(player, _("%s delay: %i ms"),
- trackpriv->t.name,
- (int)MS_FROM_VLC_TICK(delay));
- vlc_player_SendEvent(player, on_track_delay_changed, es_id, delay);
+ int ret = input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_DELAY,
+ ¶m);
+ if (ret == VLC_SUCCESS)
+ {
+ if (delay != INT64_MAX)
+ vlc_player_osd_Message(player, _("%s delay: %i ms"),
+ trackpriv->t.name,
+ (int)MS_FROM_VLC_TICK(delay));
+ vlc_player_SendEvent(player, on_track_delay_changed, es_id, delay);
+ }
- return VLC_SUCCESS;
+ return ret;
}
vlc_tick_t
--
2.20.1
More information about the vlc-devel
mailing list