[vlc-devel] [PATCH 2/7] media_tree: send notification when preparse is complete

Alexandre Janniaux ajanni at videolabs.io
Sat Oct 26 10:58:18 CEST 2019


Hi,

LGTM,

Regards,
--
Alexandre Janniaux
Videolabs

On Mon, Oct 21, 2019 at 06:08:54PM +0200, Pierre Lamot wrote:
> ---
>  include/vlc_media_source.h    | 13 +++++++++++++
>  src/media_source/media_tree.c | 22 ++++++++++++++++++++++
>  2 files changed, 35 insertions(+)
>
> diff --git a/include/vlc_media_source.h b/include/vlc_media_source.h
> index 02c94eb5d5..36e1f9a0b8 100644
> --- a/include/vlc_media_source.h
> +++ b/include/vlc_media_source.h
> @@ -111,6 +111,19 @@ struct vlc_media_tree_callbacks
>      (*on_children_removed)(vlc_media_tree_t *tree, input_item_node_t *node,
>                             input_item_node_t *const children[], size_t count,
>                             void *userdata);
> +
> +    /**
> +     * Called when the preparsing of a node is complete
> +     *
> +     * \param tree     the media tree
> +     * \param node     the node being parsed
> +     * \param status   the reason for the preparsing termination
> +     * \param userdata userdata provided to AddListener()
> +     */
> +    void
> +    (*on_preparse_end)(vlc_media_tree_t *tree, input_item_node_t * node,
> +                       enum input_item_preparse_status status,
> +                       void *userdata);
>  };
>
>  /**
> diff --git a/src/media_source/media_tree.c b/src/media_source/media_tree.c
> index 031bd21515..a3c63b3d1f 100644
> --- a/src/media_source/media_tree.c
> +++ b/src/media_source/media_tree.c
> @@ -168,6 +168,27 @@ media_subtree_changed(input_item_t *media, input_item_node_t *node,
>      vlc_media_tree_Unlock(tree);
>  }
>
> +static void
> +media_subtree_preparse_ended(input_item_t *media,
> +                             enum input_item_preparse_status status,
> +                             void *user_data)
> +{
> +    vlc_media_tree_t *tree = user_data;
> +
> +    vlc_media_tree_Lock(tree);
> +    input_item_node_t *subtree_root;
> +    /* TODO retrieve the node without traversing the tree */
> +    bool found = vlc_media_tree_FindNodeByMedia(&tree->root, media,
> +                                                &subtree_root, NULL);
> +    if (!found) {
> +        /* the node probably failed to be allocated */
> +        vlc_media_tree_Unlock(tree);
> +        return;
> +    }
> +    vlc_media_tree_Notify(tree, on_preparse_end, subtree_root, status);
> +    vlc_media_tree_Unlock(tree);
> +}
> +
>  static inline void
>  vlc_media_tree_DestroyRootNode(vlc_media_tree_t *tree)
>  {
> @@ -316,6 +337,7 @@ vlc_media_tree_Remove(vlc_media_tree_t *tree, input_item_t *media)
>
>  static const input_preparser_callbacks_t input_preparser_callbacks = {
>      .on_subtree_added = media_subtree_changed,
> +    .on_preparse_ended = media_subtree_preparse_ended
>  };
>
>  void
> --
> 2.17.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list