[vlc-devel] [PATCH 1/3] core: add vlc_MetadataRequest

Filip Roséen filip at atch.se
Wed Jul 25 04:06:38 CEST 2018


This function is to be used by entities within the core that would
like to spawn a metadata request. Such request will not have the
implicit recursiveness of libvlc_MetadataRequest (which is to be
called by users of libvlc).

---

As we would like different behavior for the two functions, two
different entry points seems like a neater solution than having to
mess around with libvlc_priv in core-TUs that would like to queue an
entity to the libvlc's private input_preparser_t

Do note that the function is not exported outside the core, which its
counter-part, libvlc_MetadataRequest, is.
---
 src/libvlc.c | 20 ++++++++++++++++++++
 src/libvlc.h |  6 ++++++
 2 files changed, 26 insertions(+)

diff --git a/src/libvlc.c b/src/libvlc.c
index 8e9eea58a9..67ff530b8e 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -470,6 +470,26 @@ static void GetFilenames( libvlc_int_t *p_vlc, unsigned n,
     }
 }
 
+int vlc_MetadataRequest(libvlc_int_t *libvlc, input_item_t *item,
+                        input_item_meta_request_option_t i_options,
+                        int timeout, void *id)
+{
+    libvlc_priv_t *priv = libvlc_priv(libvlc);
+
+    if (unlikely(priv->parser == NULL))
+        return VLC_ENOMEM;
+
+    if( i_options & META_REQUEST_OPTION_DO_INTERACT )
+    {
+        vlc_mutex_lock( &item->lock );
+        item->b_preparse_interact = true;
+        vlc_mutex_unlock( &item->lock );
+    }
+    input_preparser_Push( priv->parser, item, i_options, timeout, id );
+    return VLC_SUCCESS;
+
+}
+
 /**
  * Requests extraction of the meta data for an input item (a.k.a. preparsing).
  * The actual extraction is asynchronous. It can be cancelled with
diff --git a/src/libvlc.h b/src/libvlc.h
index b8dfb59787..5040968d57 100644
--- a/src/libvlc.h
+++ b/src/libvlc.h
@@ -25,6 +25,8 @@
 #ifndef LIBVLC_LIBVLC_H
 # define LIBVLC_LIBVLC_H 1
 
+#include <vlc_input_item.h>
+
 extern const char psz_vlc_changeset[];
 
 typedef struct variable_t variable_t;
@@ -200,6 +202,10 @@ int intf_InsertItem(libvlc_int_t *, const char *mrl, unsigned optc,
                     const char * const *optv, unsigned flags);
 void intf_DestroyAll( libvlc_int_t * );
 
+int vlc_MetadataRequest(libvlc_int_t *libvlc, input_item_t *item,
+                        input_item_meta_request_option_t i_options,
+                        int timeout, void *id);
+
 /*
  * Variables stuff
  */
-- 
2.18.0


More information about the vlc-devel mailing list