libvlc: assert and document media tracks selection API usage
Since the libvlc_media_tracklist_t
type and data is shared between libvlc_media_player_t
and libvlc_media_t
, users may wrongly assume that they can use media tracks retrieved with libvlc_media_get_tracklist
to feed the mediaplayer to select tracks with libvlc_media_player_select_track
(while they should actually be using libvlc_media_player_get_tracklist
).
This is not supported and causes a crash
> libvlccore.dll!vlc_atomic_rc_inc(vlc_atomic_rc_t * rc) Line 53 C
libvlccore.dll!EsHold(es_out_id_t * es) Line 638 C
libvlccore.dll!vlc_es_id_Hold(vlc_es_id_t * id) Line 4506 C
libvlccore.dll!input_ControlPushEsHelper(input_thread_t * p_input, int i_type, vlc_es_id_t * id) Line 628 C
libvlccore.dll!vlc_player_SelectEsId(vlc_player_t * player, vlc_es_id_t * id, vlc_player_select_policy policy) Line 569 C
libvlc.dll!libvlc_media_player_select_track(libvlc_media_player_t * p_mi, const libvlc_media_track_t * track) Line 1863 C
[External Code]
libvlc.dll!libvlc_event_send(libvlc_event_manager_t * p_em, libvlc_event_t * p_event) Line 118 C
libvlc.dll!input_item_preparsed_changed(const vlc_event_t * p_event, void * user_data) Line 544 C
libvlccore.dll!vlc_event_send(vlc_event_manager_t * p_em, vlc_event_t * p_event) Line 108 C
libvlccore.dll!input_item_SetPreparsed(input_item_t * p_i, bool b_preparsed) Line 90 C
libvlccore.dll!EsOutMeta(es_out_t * p_out, const vlc_meta_t * p_meta, const vlc_meta_t * p_program_meta) Line 1935 C
libvlccore.dll!EsOutGlobalMeta(es_out_t * p_out, const vlc_meta_t * p_meta) Line 1944 C
libvlccore.dll!EsOutVaControlLocked(es_out_t * out, input_source_t * source, int i_query, char * args) Line 3503 C
libvlccore.dll!EsOutControl(es_out_t * out, input_source_t * source, int i_query, char * args) Line 3924 C
libvlccore.dll!es_out_in_vaControl(es_out_t * p_out, input_source_t * in, int i_query, char * args) Line 513 C
libvlccore.dll!es_out_in_Control(es_out_t * p_out, input_source_t * in, int i_query, ...) Line 523 C
libvlccore.dll!CmdExecuteControl(es_out_t * p_tsout, ts_cmd_control_t * p_cmd) Line 1696 C
libvlccore.dll!ControlLocked(es_out_t * p_out, input_source_t * in, int i_query, char * args) Line 684 C
libvlccore.dll!Control(es_out_t * p_tsout, input_source_t * in, int i_query, char * args) Line 772 C
libvlccore.dll!es_out_vaControl(es_out_t * out, int i_query, char * args) Line 166 C
libvlccore.dll!es_out_Control(es_out_t * out, int i_query, ...) Line 175 C
libvlccore.dll!es_out_ControlSetMeta(es_out_t * out, const vlc_meta_t * p_meta) Line 192 C
libvlccore.dll!Init(input_thread_t * p_input) Line 1391 C
libvlccore.dll!Preparse(void * data) Line 492 C
libvlccore.dll!vlc_entry(void * p) Line 354 C
We may not want to split the media tracks and/or list types into seperate media ones and mediaplayer ones, to keep the API simple and straightforward.
- Updated the docs to warn users against this usage mfkl/vlc@5ca8230c
- Added a NULL check which avoids the crash when the user mis-use the libvlc API in this way. mfkl/vlc@08d3450a
/cc @tguillem
Edited by Martin Finkel