Browse Source

player: add a policy to vlc_player_SelectEsId

This will replace the future vlc_player_AddEsId() function (simultaneous).
pull/91/head
Thomas Guillem 7 years ago
parent
commit
dd5ba72db7
  1. 30
      include/vlc_player.h
  2. 2
      lib/audio.c
  3. 4
      lib/video.c
  4. 2
      modules/control/rc.c
  5. 2
      modules/gui/macosx/playlist/VLCPlayerController.m
  6. 3
      modules/gui/qt/util/input_models.cpp
  7. 2
      modules/lua/libs/input.c
  8. 9
      src/input/player.c
  9. 2
      test/src/input/player.c

30
include/vlc_player.h

@ -297,6 +297,21 @@ enum vlc_player_whence
VLC_PLAYER_WHENCE_RELATIVE,
};
/**
* Player selection policy
*
* @see vlc_player_SelectEsId()
*/
enum vlc_player_select_policy
{
/**
* Only one track per category is selected. Selecting a track with this
* policy will disable all other tracks for the same category.
*/
VLC_PLAYER_SELECT_EXCLUSIVE,
/* XXX VLC_PLAYER_SELECT_SIMULTANEOUS, */
};
/**
* Action when the player is stopped
*
@ -1735,9 +1750,11 @@ vlc_player_GetSelectedTrack(vlc_player_t *player, enum es_format_category_e cat)
* @param player locked player instance
* @param id an ES ID (retrieved from vlc_player_cbs.on_track_list_changed or
* vlc_player_GetTrackAt())
* @param policy exclusive or simultaneous
*/
VLC_API void
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *es_id);
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *es_id,
enum vlc_player_select_policy policy);
/**
@ -1745,9 +1762,10 @@ vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *es_id);
*/
static inline void
vlc_player_SelectTrack(vlc_player_t *player,
const struct vlc_player_track *track)
const struct vlc_player_track *track,
enum vlc_player_select_policy policy)
{
vlc_player_SelectEsId(player, track->es_id);
vlc_player_SelectEsId(player, track->es_id, policy);
}
/**
@ -1757,7 +1775,8 @@ vlc_player_SelectTrack(vlc_player_t *player,
* this last track. And a second call will select the first track.
*
* @warning This function has no effects if there are several tracks selected
* for a same category.
* for a same category. Therefore the default policy is
* VLC_PLAYER_SELECT_EXCLUSIVE.
*
* @param player locked player instance
* @param cat VIDEO_ES, AUDIO_ES or SPU_ES
@ -1773,7 +1792,8 @@ vlc_player_SelectNextTrack(vlc_player_t *player,
* this first track. And a second call will select the last track.
*
* @warning This function has no effects if there are several tracks selected
* for a same category.
* for a same category. Therefore the default policy is
* VLC_PLAYER_SELECT_EXCLUSIVE.
*
* @param player locked player instance
* @param cat VIDEO_ES, AUDIO_ES or SPU_ES

2
lib/audio.c

@ -383,7 +383,7 @@ int libvlc_audio_set_track( libvlc_media_player_t *p_mi, int i_track )
if (i_track == vlc_es_id_GetInputId(track->es_id))
{
/* found */
vlc_player_SelectTrack(player, track);
vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
i_ret = 0;
goto end;
}

4
lib/video.c

@ -325,7 +325,7 @@ int libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu )
if (i_spu == vlc_es_id_GetInputId(track->es_id))
{
/* found */
vlc_player_SelectTrack(player, track);
vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
i_ret = 0;
goto end;
}
@ -496,7 +496,7 @@ int libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track )
if (i_track == vlc_es_id_GetInputId(track->es_id))
{
/* found */
vlc_player_SelectTrack(player, track);
vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
i_ret = 0;
goto end;
}

2
modules/control/rc.c

@ -549,7 +549,7 @@ static void Input(intf_thread_t *intf, char const *psz_cmd,
vlc_player_GetTrackAt(player, cat, (size_t)idx);
if (!track)
goto out;
vlc_player_SelectTrack(player, track);
vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
}
else
{

2
modules/gui/macosx/playlist/VLCPlayerController.m

@ -1373,7 +1373,7 @@ static const struct vlc_player_aout_cbs player_aout_callbacks = {
- (void)selectTrack:(VLCTrackMetaData *)track
{
vlc_player_Lock(_p_player);
vlc_player_SelectEsId(_p_player, track.esID);
vlc_player_SelectEsId(_p_player, track.esID, VLC_PLAYER_SELECT_EXCLUSIVE);
vlc_player_Unlock(_p_player);
}

3
modules/gui/qt/util/input_models.cpp

@ -62,7 +62,8 @@ bool TrackListModel::setData(const QModelIndex &index, const QVariant &value, in
vlc_player_locker lock{ m_player };
if (select)
vlc_player_SelectEsId(m_player, m_data[row].m_id.get());
vlc_player_SelectEsId(m_player, m_data[row].m_id.get(),
VLC_PLAYER_SELECT_EXCLUSIVE);
else
vlc_player_UnselectEsId(m_player, m_data[row].m_id.get());
return true;

2
modules/lua/libs/input.c

@ -372,7 +372,7 @@ static int vlclua_player_toggle_track_(lua_State *L,
if (track->selected)
vlc_player_UnselectTrack(player, track);
else
vlc_player_SelectTrack(player, track);
vlc_player_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
}
vlc_player_Unlock(player);

9
src/input/player.c

@ -1384,8 +1384,10 @@ vlc_player_vout_OSDTrack(vlc_player_t *player, vlc_es_id_t *id, bool select)
}
void
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *id)
vlc_player_SelectEsId(vlc_player_t *player, vlc_es_id_t *id,
enum vlc_player_select_policy policy)
{
assert(policy == VLC_PLAYER_SELECT_EXCLUSIVE); /* TODO */
struct vlc_player_input *input = vlc_player_get_input_locked(player);
if (!input)
return;
@ -1440,7 +1442,7 @@ 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_SelectTrack(player, track, VLC_PLAYER_SELECT_EXCLUSIVE);
else
vlc_player_UnselectTrack(player, track);
}
@ -1570,7 +1572,8 @@ vlc_player_SetTeletextEnabled(vlc_player_t *player, bool enabled)
if (!input || !input->teletext_menu)
return;
if (enabled)
vlc_player_SelectEsId(player, input->teletext_menu->t.es_id);
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);
}

2
test/src/input/player.c

@ -1144,7 +1144,7 @@ player_select_next_unselected_track(struct ctx *ctx,
old_id = old_track ? vlc_es_id_Hold(old_track->es_id) : NULL;
if (new_id)
vlc_player_SelectEsId(player, new_id);
vlc_player_SelectEsId(player, new_id, VLC_PLAYER_SELECT_EXCLUSIVE);
else
{
assert(old_id);

Loading…
Cancel
Save