VLC  4.0.0-dev
media_tree.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * media_tree.h
3  *****************************************************************************
4  * Copyright (C) 2018 VLC authors and VideoLAN
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20 
21 #ifndef MEDIA_TREE_H
22 #define MEDIA_TREE_H
23 
24 #include <vlc_media_source.h>
25 
27 vlc_media_tree_New(void);
28 
29 void
31 
32 void
34 
37  input_item_t *media);
38 
39 bool
41 
42 #endif
vlc_mutex_init
void vlc_mutex_init(vlc_mutex_t *mtx)
Initializes a fast mutex.
Definition: threads.c:123
vlc_media_tree_New
vlc_media_tree_t * vlc_media_tree_New(void)
Definition: media_tree.c:54
libvlc_int_t
Definition: vlc_objects.h:114
vlc_input_item.h
unlikely
#define unlikely(p)
Predicted false condition.
Definition: vlc_common.h:227
vlc_common.h
input_item_t::i_preparse_depth
int i_preparse_depth
How many level of sub items can be preparsed: -1: recursive, 0: none, >0: n levels.
Definition: vlc_input_item.h:119
vlc_media_tree::root
input_item_node_t root
Definition: vlc_media_source.h:66
input_preparser_callbacks
static const input_preparser_callbacks_t input_preparser_callbacks
Definition: media_tree.c:337
vlc_media_tree_listener_id::userdata
void * userdata
Definition: media_tree.c:56
vlc_mutex_assert
#define vlc_mutex_assert(m)
Asserts that a mutex is locked by the calling thread.
Definition: vlc_threads.h:328
input_item_node_Create
input_item_node_t * input_item_node_Create(input_item_t *p_input)
Start adding multiple subitems.
Definition: item.c:1226
META_REQUEST_OPTION_SCOPE_ANY
@ META_REQUEST_OPTION_SCOPE_ANY
Definition: vlc_input_item.h:468
input_item_t
Describes an input and is used to spawn input_thread_t objects.
Definition: vlc_input_item.h:77
vlc_media_tree_Find
bool vlc_media_tree_Find(vlc_media_tree_t *tree, const input_item_t *media, input_item_node_t **result, input_item_node_t **result_parent)
Find the node containing the requested input item (and its parent).
Definition: media_tree.c:309
vlc_media_tree_Add
input_item_node_t * vlc_media_tree_Add(vlc_media_tree_t *tree, input_item_node_t *parent, input_item_t *media)
Definition: media_tree.c:294
vlc_list_init
static void vlc_list_init(struct vlc_list *restrict head)
Initializes an empty list head.
Definition: vlc_list.h:57
on_children_removed
static void on_children_removed(vlc_media_tree_t *tree, input_item_node_t *node, input_item_node_t *const children[], size_t count, void *userdata)
Definition: test.c:175
vlc_media_tree_NotifyListener
#define vlc_media_tree_NotifyListener(tree, listener, event,...)
Definition: media_tree.c:82
vlc_atomic_rc_dec
static bool vlc_atomic_rc_dec(vlc_atomic_rc_t *rc)
Decrement the RC and return true if it reaches 0.
Definition: vlc_atomic.h:61
input_item_node_t::pp_children
input_item_node_t ** pp_children
Definition: vlc_input_item.h:198
vlc_media_tree_New
vlc_media_tree_t * vlc_media_tree_New(void)
Definition: media_tree.c:54
vlc_media_tree_RemoveListener
void vlc_media_tree_RemoveListener(vlc_media_tree_t *tree, vlc_media_tree_listener_id *listener)
Remove a listener.
Definition: media_tree.c:283
vlc_media_tree_Preparse
void vlc_media_tree_Preparse(vlc_media_tree_t *tree, libvlc_int_t *libvlc, input_item_t *media, void *id)
Preparse a media, and expand it in the media tree on subitems added.
Definition: media_tree.c:343
vlc_media_tree_listener_id::cbs
const struct vlc_media_tree_callbacks * cbs
Definition: media_tree.c:55
input_item_node_Delete
void input_item_node_Delete(input_item_node_t *p_node)
Delete a node created with input_item_node_Create() and all its children.
Definition: item.c:1243
vlc_media_tree_Hold
void vlc_media_tree_Hold(vlc_media_tree_t *tree)
Definition: media_tree.c:211
vlc_threads.h
vlc_list
Doubly-linked list node.
Definition: vlc_list.h:43
input_item_node_AppendNode
void input_item_node_AppendNode(input_item_node_t *p_parent, input_item_node_t *p_child)
Add an already created node to children of this parent node.
Definition: item.c:1273
media_tree_private_t::public_data
vlc_media_tree_t public_data
Definition: media_tree.c:44
input_item_node_t::i_children
int i_children
Definition: vlc_input_item.h:197
vlc_mutex_t
Mutex.
Definition: vlc_threads.h:225
vlc_media_tree_Release
void vlc_media_tree_Release(vlc_media_tree_t *tree)
Definition: media_tree.c:218
vlc_media_tree
Media source API aims to manage "services discovery" easily from UI clients.
Definition: vlc_media_source.h:65
vlc_media_tree_Lock
void vlc_media_tree_Lock(vlc_media_tree_t *tree)
Lock the media tree (non-recursive).
Definition: media_tree.c:226
vlc_media_tree_PreparseCancel
void vlc_media_tree_PreparseCancel(libvlc_int_t *libvlc, void *id)
Cancel a media tree preparse request.
Definition: media_tree.c:362
vlc_media_tree_Delete
static void vlc_media_tree_Delete(vlc_media_tree_t *tree)
Definition: media_tree.c:199
vlc_media_tree_AddChild
static input_item_node_t * vlc_media_tree_AddChild(input_item_node_t *parent, input_item_t *media)
Definition: media_tree.c:240
vlc_media_tree_ClearChildren
static void vlc_media_tree_ClearChildren(input_item_node_t *root)
Definition: media_tree.c:138
vlc_atomic_rc_inc
static void vlc_atomic_rc_inc(vlc_atomic_rc_t *rc)
Increment the RC.
Definition: vlc_atomic.h:52
vlc_atomic.h
vlc_list_remove
static void vlc_list_remove(struct vlc_list *restrict node)
Removes an element from a list.
Definition: vlc_list.h:135
vlc_list_append
static void vlc_list_append(struct vlc_list *restrict node, struct vlc_list *head)
Appends an element into a list.
Definition: vlc_list.h:110
media_tree_private_t
Definition: media_tree.c:42
input_preparser_callbacks_t
Definition: vlc_input_item.h:484
vlc_media_tree_Hold
void vlc_media_tree_Hold(vlc_media_tree_t *tree)
Definition: media_tree.c:211
vlc_media_source.h
vlc_media_tree_AddSubtree
static void vlc_media_tree_AddSubtree(input_item_node_t *to, input_item_node_t *from)
Definition: media_tree.c:124
libvlc_MetadataCancel
void libvlc_MetadataCancel(libvlc_int_t *libvlc, void *id)
Cancels extraction of the meta data for an input item.
Definition: libvlc.c:516
vlc_media_tree_AddListener
vlc_media_tree_listener_id * vlc_media_tree_AddListener(vlc_media_tree_t *tree, const struct vlc_media_tree_callbacks *cbs, void *userdata, bool notify_current_state)
Add a listener.
Definition: media_tree.c:260
vlc_media_tree_DestroyRootNode
static void vlc_media_tree_DestroyRootNode(vlc_media_tree_t *tree)
Definition: media_tree.c:193
media_tree_private_t::lock
vlc_mutex_t lock
Definition: media_tree.c:47
on_children_reset
static void on_children_reset(vlc_media_tree_t *tree, input_item_node_t *node, void *userdata)
Definition: test.c:144
media_tree.h
input_item_node_RemoveNode
void input_item_node_RemoveNode(input_item_node_t *parent, input_item_node_t *child)
Remove a node from its parent.
Definition: item.c:1281
vlc_media_tree_Release
void vlc_media_tree_Release(vlc_media_tree_t *tree)
Definition: media_tree.c:218
media_tree_private_t::listeners
struct vlc_list listeners
list of vlc_media_tree_listener_id.node
Definition: media_tree.c:46
vlc_media_tree_Remove
bool vlc_media_tree_Remove(vlc_media_tree_t *tree, input_item_t *media)
Definition: media_tree.c:322
input_item_node_t::p_item
input_item_t * p_item
Definition: vlc_input_item.h:196
input_item_preparse_status
input_item_preparse_status
Definition: vlc_input_item.h:476
META_REQUEST_OPTION_DO_INTERACT
@ META_REQUEST_OPTION_DO_INTERACT
Definition: vlc_input_item.h:472
vlc_MetadataRequest
int vlc_MetadataRequest(libvlc_int_t *libvlc, input_item_t *item, input_item_meta_request_option_t i_options, const input_preparser_callbacks_t *cbs, void *cbs_userdata, int timeout, void *id)
Definition: libvlc.c:450
media_tree_private_t::rc
vlc_atomic_rc_t rc
Definition: media_tree.c:48
on_children_added
static void on_children_added(vlc_media_tree_t *tree, input_item_node_t *node, input_item_node_t *const children[], size_t count, void *userdata)
Definition: test.c:158
VLC_UNUSED
#define VLC_UNUSED(x)
Definition: vlc_common.h:1105
vlc_mutex_lock
void vlc_mutex_lock(vlc_mutex_t *mtx)
Acquires a mutex.
Definition: threads.c:158
TAB_INIT
#define TAB_INIT(count, tab)
Definition: vlc_arrays.h:55
vlc_media_tree_listener_id::node
struct vlc_list node
node of media_tree_private_t.listeners
Definition: media_tree.c:57
vlc_media_tree_listener_id
Definition: media_tree.c:35
vlc_media_tree_Unlock
void vlc_media_tree_Unlock(vlc_media_tree_t *tree)
Unlock the media tree.
Definition: media_tree.c:233
media_subtree_changed
static void media_subtree_changed(input_item_t *media, input_item_node_t *node, void *userdata)
Definition: media_tree.c:149
media_subtree_preparse_ended
static void media_subtree_preparse_ended(input_item_t *media, enum input_item_preparse_status status, void *user_data)
Definition: media_tree.c:172
vlc_list_foreach
#define vlc_list_foreach(pos, head, member)
List iteration macro.
Definition: vlc_list.h:261
libvlc.h
vlc_media_tree_Notify
#define vlc_media_tree_Notify(tree, event,...)
Definition: media_tree.c:88
vlc_media_tree_callbacks
Callbacks to receive media tree events.
Definition: vlc_media_source.h:72
vlc_media_tree_Remove
bool vlc_media_tree_Remove(vlc_media_tree_t *tree, input_item_t *media)
Definition: media_tree.c:322
vlc_media_tree_FindNodeByMedia
static bool vlc_media_tree_FindNodeByMedia(input_item_node_t *parent, const input_item_t *media, input_item_node_t **result, input_item_node_t **result_parent)
Definition: media_tree.c:97
vlc_arrays.h
input_preparser_callbacks_t::on_subtree_added
void(* on_subtree_added)(input_item_t *, input_item_node_t *subtree, void *userdata)
Definition: vlc_input_item.h:486
input_item_node_t
Definition: vlc_input_item.h:194
mt_priv
#define mt_priv(mt)
Definition: media_tree.c:51
vlc_media_tree_AssertLocked
static void vlc_media_tree_AssertLocked(vlc_media_tree_t *tree)
Definition: media_tree.c:73
vlc_atomic_rc_init
static void vlc_atomic_rc_init(vlc_atomic_rc_t *rc)
Init the RC to 1.
Definition: vlc_atomic.h:46
vlc_mutex_unlock
void vlc_mutex_unlock(vlc_mutex_t *mtx)
Releases a mutex.
Definition: threads.c:209
vlc_media_tree_NotifyCurrentState
static void vlc_media_tree_NotifyCurrentState(vlc_media_tree_t *tree, vlc_media_tree_listener_id *listener)
Definition: media_tree.c:252
vlc_atomic_rc_t
Definition: vlc_atomic.h:41
vlc_media_tree_Add
input_item_node_t * vlc_media_tree_Add(vlc_media_tree_t *tree, input_item_node_t *parent, input_item_t *media)
Definition: media_tree.c:294