about summary refs log tree commit diff stats
path: root/libmpv2/libmpv2-sys/include/stream_cb.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmpv2/libmpv2-sys/include/stream_cb.h')
-rw-r--r--libmpv2/libmpv2-sys/include/stream_cb.h392
1 files changed, 200 insertions, 192 deletions
diff --git a/libmpv2/libmpv2-sys/include/stream_cb.h b/libmpv2/libmpv2-sys/include/stream_cb.h
index 4257b40..86e8496 100644
--- a/libmpv2/libmpv2-sys/include/stream_cb.h
+++ b/libmpv2/libmpv2-sys/include/stream_cb.h
@@ -17,154 +17,159 @@
 #include "client.h"
 
 #ifdef __cplusplus
-extern "C" {
+extern "C"
+{
 #endif
 
-/**
- * Warning: this API is not stable yet.
- *
- * Overview
- * --------
- *
- * This API can be used to make mpv read from a stream with a custom
- * implementation. This interface is inspired by funopen on BSD and
- * fopencookie on linux. The stream is backed by user-defined callbacks
- * which can implement customized open, read, seek, size and close behaviors.
- *
- * Usage
- * -----
- *
- * Register your stream callbacks with the mpv_stream_cb_add_ro() function. You
- * have to provide a mpv_stream_cb_open_ro_fn callback to it (open_fn argument).
- *
- * Once registered, you can `loadfile myprotocol://myfile`. Your open_fn will be
- * invoked with the URI and you must fill out the provided mpv_stream_cb_info
- * struct. This includes your stream callbacks (like read_fn), and an opaque
- * cookie, which will be passed as the first argument to all the remaining
- * stream callbacks.
- *
- * Note that your custom callbacks must not invoke libmpv APIs as that would
- * cause a deadlock. (Unless you call a different mpv_handle than the one the
- * callback was registered for, and the mpv_handles refer to different mpv
- * instances.)
- *
- * Stream lifetime
- * ---------------
- *
- * A stream remains valid until its close callback has been called. It's up to
- * libmpv to call the close callback, and the libmpv user cannot close it
- * directly with the stream_cb API.
- *
- * For example, if you consider your custom stream to become suddenly invalid
- * (maybe because the underlying stream died), libmpv will continue using your
- * stream. All you can do is returning errors from each callback, until libmpv
- * gives up and closes it.
- *
- * Protocol registration and lifetime
- * ----------------------------------
- *
- * Protocols remain registered until the mpv instance is terminated. This means
- * in particular that it can outlive the mpv_handle that was used to register
- * it, but once mpv_terminate_destroy() is called, your registered callbacks
- * will not be called again.
- *
- * Protocol unregistration is finished after the mpv core has been destroyed
- * (e.g. after mpv_terminate_destroy() has returned).
- *
- * If you do not call mpv_terminate_destroy() yourself (e.g. plugin-style code),
- * you will have to deal with the registration or even streams outliving your
- * code. Here are some possible ways to do this:
- * - call mpv_terminate_destroy(), which destroys the core, and will make sure
- *   all streams are closed once this function returns
- * - you refcount all resources your stream "cookies" reference, so that it
- *   doesn't matter if streams live longer than expected
- * - create "cancellation" semantics: after your protocol has been unregistered,
- *   notify all your streams that are still opened, and make them drop all
- *   referenced resources - then return errors from the stream callbacks as
- *   long as the stream is still opened
- *
- */
-
-/**
- * Read callback used to implement a custom stream. The semantics of the
- * callback match read(2) in blocking mode. Short reads are allowed (you can
- * return less bytes than requested, and libmpv will retry reading the rest
- * with another call). If no data can be immediately read, the callback must
- * block until there is new data. A return of 0 will be interpreted as final
- * EOF, although libmpv might retry the read, or seek to a different position.
- *
- * @param cookie opaque cookie identifying the stream,
- *               returned from mpv_stream_cb_open_fn
- * @param buf buffer to read data into
- * @param size of the buffer
- * @return number of bytes read into the buffer
- * @return 0 on EOF
- * @return -1 on error
- */
-typedef int64_t (*mpv_stream_cb_read_fn)(void *cookie, char *buf, uint64_t nbytes);
-
-/**
- * Seek callback used to implement a custom stream.
- *
- * Note that mpv will issue a seek to position 0 immediately after opening. This
- * is used to test whether the stream is seekable (since seekability might
- * depend on the URI contents, not just the protocol). Return
- * MPV_ERROR_UNSUPPORTED if seeking is not implemented for this stream. This
- * seek also serves to establish the fact that streams start at position 0.
- *
- * This callback can be NULL, in which it behaves as if always returning
- * MPV_ERROR_UNSUPPORTED.
- *
- * @param cookie opaque cookie identifying the stream,
- *               returned from mpv_stream_cb_open_fn
- * @param offset target absolute stream position
- * @return the resulting offset of the stream
- *         MPV_ERROR_UNSUPPORTED or MPV_ERROR_GENERIC if the seek failed
- */
-typedef int64_t (*mpv_stream_cb_seek_fn)(void *cookie, int64_t offset);
-
-/**
- * Size callback used to implement a custom stream.
- *
- * Return MPV_ERROR_UNSUPPORTED if no size is known.
- *
- * This callback can be NULL, in which it behaves as if always returning
- * MPV_ERROR_UNSUPPORTED.
- *
- * @param cookie opaque cookie identifying the stream,
- *               returned from mpv_stream_cb_open_fn
- * @return the total size in bytes of the stream
- */
-typedef int64_t (*mpv_stream_cb_size_fn)(void *cookie);
-
-/**
- * Close callback used to implement a custom stream.
- *
- * @param cookie opaque cookie identifying the stream,
- *               returned from mpv_stream_cb_open_fn
- */
-typedef void (*mpv_stream_cb_close_fn)(void *cookie);
-
-/**
- * Cancel callback used to implement a custom stream.
- *
- * This callback is used to interrupt any current or future read and seek
- * operations. It will be called from a separate thread than the demux
- * thread, and should not block.
- *
- * This callback can be NULL.
- *
- * Available since API 1.106.
- *
- * @param cookie opaque cookie identifying the stream,
- *               returned from mpv_stream_cb_open_fn
- */
-typedef void (*mpv_stream_cb_cancel_fn)(void *cookie);
-
-/**
- * See mpv_stream_cb_open_ro_fn callback.
- */
-typedef struct mpv_stream_cb_info {
+  /**
+   * Warning: this API is not stable yet.
+   *
+   * Overview
+   * --------
+   *
+   * This API can be used to make mpv read from a stream with a custom
+   * implementation. This interface is inspired by funopen on BSD and
+   * fopencookie on linux. The stream is backed by user-defined callbacks
+   * which can implement customized open, read, seek, size and close behaviors.
+   *
+   * Usage
+   * -----
+   *
+   * Register your stream callbacks with the mpv_stream_cb_add_ro() function.
+   * You have to provide a mpv_stream_cb_open_ro_fn callback to it (open_fn
+   * argument).
+   *
+   * Once registered, you can `loadfile myprotocol://myfile`. Your open_fn will
+   * be invoked with the URI and you must fill out the provided
+   * mpv_stream_cb_info struct. This includes your stream callbacks (like
+   * read_fn), and an opaque cookie, which will be passed as the first argument
+   * to all the remaining stream callbacks.
+   *
+   * Note that your custom callbacks must not invoke libmpv APIs as that would
+   * cause a deadlock. (Unless you call a different mpv_handle than the one the
+   * callback was registered for, and the mpv_handles refer to different mpv
+   * instances.)
+   *
+   * Stream lifetime
+   * ---------------
+   *
+   * A stream remains valid until its close callback has been called. It's up
+   * to libmpv to call the close callback, and the libmpv user cannot close it
+   * directly with the stream_cb API.
+   *
+   * For example, if you consider your custom stream to become suddenly invalid
+   * (maybe because the underlying stream died), libmpv will continue using
+   * your stream. All you can do is returning errors from each callback, until
+   * libmpv gives up and closes it.
+   *
+   * Protocol registration and lifetime
+   * ----------------------------------
+   *
+   * Protocols remain registered until the mpv instance is terminated. This
+   * means in particular that it can outlive the mpv_handle that was used to
+   * register it, but once mpv_terminate_destroy() is called, your registered
+   * callbacks will not be called again.
+   *
+   * Protocol unregistration is finished after the mpv core has been destroyed
+   * (e.g. after mpv_terminate_destroy() has returned).
+   *
+   * If you do not call mpv_terminate_destroy() yourself (e.g. plugin-style
+   * code), you will have to deal with the registration or even streams
+   * outliving your code. Here are some possible ways to do this:
+   * - call mpv_terminate_destroy(), which destroys the core, and will make
+   * sure all streams are closed once this function returns
+   * - you refcount all resources your stream "cookies" reference, so that it
+   *   doesn't matter if streams live longer than expected
+   * - create "cancellation" semantics: after your protocol has been
+   * unregistered, notify all your streams that are still opened, and make them
+   * drop all referenced resources - then return errors from the stream
+   * callbacks as long as the stream is still opened
+   *
+   */
+
+  /**
+   * Read callback used to implement a custom stream. The semantics of the
+   * callback match read(2) in blocking mode. Short reads are allowed (you can
+   * return less bytes than requested, and libmpv will retry reading the rest
+   * with another call). If no data can be immediately read, the callback must
+   * block until there is new data. A return of 0 will be interpreted as final
+   * EOF, although libmpv might retry the read, or seek to a different
+   * position.
+   *
+   * @param cookie opaque cookie identifying the stream,
+   *               returned from mpv_stream_cb_open_fn
+   * @param buf buffer to read data into
+   * @param size of the buffer
+   * @return number of bytes read into the buffer
+   * @return 0 on EOF
+   * @return -1 on error
+   */
+  typedef int64_t (*mpv_stream_cb_read_fn) (void *cookie, char *buf,
+                                            uint64_t nbytes);
+
+  /**
+   * Seek callback used to implement a custom stream.
+   *
+   * Note that mpv will issue a seek to position 0 immediately after opening.
+   * This is used to test whether the stream is seekable (since seekability
+   * might depend on the URI contents, not just the protocol). Return
+   * MPV_ERROR_UNSUPPORTED if seeking is not implemented for this stream. This
+   * seek also serves to establish the fact that streams start at position 0.
+   *
+   * This callback can be NULL, in which it behaves as if always returning
+   * MPV_ERROR_UNSUPPORTED.
+   *
+   * @param cookie opaque cookie identifying the stream,
+   *               returned from mpv_stream_cb_open_fn
+   * @param offset target absolute stream position
+   * @return the resulting offset of the stream
+   *         MPV_ERROR_UNSUPPORTED or MPV_ERROR_GENERIC if the seek failed
+   */
+  typedef int64_t (*mpv_stream_cb_seek_fn) (void *cookie, int64_t offset);
+
+  /**
+   * Size callback used to implement a custom stream.
+   *
+   * Return MPV_ERROR_UNSUPPORTED if no size is known.
+   *
+   * This callback can be NULL, in which it behaves as if always returning
+   * MPV_ERROR_UNSUPPORTED.
+   *
+   * @param cookie opaque cookie identifying the stream,
+   *               returned from mpv_stream_cb_open_fn
+   * @return the total size in bytes of the stream
+   */
+  typedef int64_t (*mpv_stream_cb_size_fn) (void *cookie);
+
+  /**
+   * Close callback used to implement a custom stream.
+   *
+   * @param cookie opaque cookie identifying the stream,
+   *               returned from mpv_stream_cb_open_fn
+   */
+  typedef void (*mpv_stream_cb_close_fn) (void *cookie);
+
+  /**
+   * Cancel callback used to implement a custom stream.
+   *
+   * This callback is used to interrupt any current or future read and seek
+   * operations. It will be called from a separate thread than the demux
+   * thread, and should not block.
+   *
+   * This callback can be NULL.
+   *
+   * Available since API 1.106.
+   *
+   * @param cookie opaque cookie identifying the stream,
+   *               returned from mpv_stream_cb_open_fn
+   */
+  typedef void (*mpv_stream_cb_cancel_fn) (void *cookie);
+
+  /**
+   * See mpv_stream_cb_open_ro_fn callback.
+   */
+  typedef struct mpv_stream_cb_info
+  {
     /**
      * Opaque user-provided value, which will be passed to the other callbacks.
      * The close callback will be called to release the cookie. It is not
@@ -185,55 +190,58 @@ typedef struct mpv_stream_cb_info {
     mpv_stream_cb_size_fn size_fn;
     mpv_stream_cb_close_fn close_fn;
     mpv_stream_cb_cancel_fn cancel_fn; /* since API 1.106 */
-} mpv_stream_cb_info;
-
-/**
- * Open callback used to implement a custom read-only (ro) stream. The user
- * must set the callback fields in the passed info struct. The cookie field
- * also can be set to store state associated to the stream instance.
- *
- * Note that the info struct is valid only for the duration of this callback.
- * You can't change the callbacks or the pointer to the cookie at a later point.
- *
- * Each stream instance created by the open callback can have different
- * callbacks.
- *
- * The close_fn callback will terminate the stream instance. The pointers to
- * your callbacks and cookie will be discarded, and the callbacks will not be
- * called again.
- *
- * @param user_data opaque user data provided via mpv_stream_cb_add()
- * @param uri name of the stream to be opened (with protocol prefix)
- * @param info fields which the user should fill
- * @return 0 on success, MPV_ERROR_LOADING_FAILED if the URI cannot be opened.
- */
-typedef int (*mpv_stream_cb_open_ro_fn)(void *user_data, char *uri,
-                                        mpv_stream_cb_info *info);
-
-/**
- * Add a custom stream protocol. This will register a protocol handler under
- * the given protocol prefix, and invoke the given callbacks if an URI with the
- * matching protocol prefix is opened.
- *
- * The "ro" is for read-only - only read-only streams can be registered with
- * this function.
- *
- * The callback remains registered until the mpv core is registered.
- *
- * If a custom stream with the same name is already registered, then the
- * MPV_ERROR_INVALID_PARAMETER error is returned.
- *
- * @param protocol protocol prefix, for example "foo" for "foo://" URIs
- * @param user_data opaque pointer passed into the mpv_stream_cb_open_fn
- *                  callback.
- * @return error code
- */
-MPV_EXPORT int mpv_stream_cb_add_ro(mpv_handle *ctx, const char *protocol, void *user_data,
-                                    mpv_stream_cb_open_ro_fn open_fn);
+  } mpv_stream_cb_info;
+
+  /**
+   * Open callback used to implement a custom read-only (ro) stream. The user
+   * must set the callback fields in the passed info struct. The cookie field
+   * also can be set to store state associated to the stream instance.
+   *
+   * Note that the info struct is valid only for the duration of this callback.
+   * You can't change the callbacks or the pointer to the cookie at a later
+   * point.
+   *
+   * Each stream instance created by the open callback can have different
+   * callbacks.
+   *
+   * The close_fn callback will terminate the stream instance. The pointers to
+   * your callbacks and cookie will be discarded, and the callbacks will not be
+   * called again.
+   *
+   * @param user_data opaque user data provided via mpv_stream_cb_add()
+   * @param uri name of the stream to be opened (with protocol prefix)
+   * @param info fields which the user should fill
+   * @return 0 on success, MPV_ERROR_LOADING_FAILED if the URI cannot be
+   * opened.
+   */
+  typedef int (*mpv_stream_cb_open_ro_fn) (void *user_data, char *uri,
+                                           mpv_stream_cb_info *info);
+
+  /**
+   * Add a custom stream protocol. This will register a protocol handler under
+   * the given protocol prefix, and invoke the given callbacks if an URI with
+   * the matching protocol prefix is opened.
+   *
+   * The "ro" is for read-only - only read-only streams can be registered with
+   * this function.
+   *
+   * The callback remains registered until the mpv core is registered.
+   *
+   * If a custom stream with the same name is already registered, then the
+   * MPV_ERROR_INVALID_PARAMETER error is returned.
+   *
+   * @param protocol protocol prefix, for example "foo" for "foo://" URIs
+   * @param user_data opaque pointer passed into the mpv_stream_cb_open_fn
+   *                  callback.
+   * @return error code
+   */
+  MPV_EXPORT int mpv_stream_cb_add_ro (mpv_handle *ctx, const char *protocol,
+                                       void *user_data,
+                                       mpv_stream_cb_open_ro_fn open_fn);
 
 #ifdef MPV_CPLUGIN_DYNAMIC_SYM
 
-MPV_DEFINE_SYM_PTR(mpv_stream_cb_add_ro)
+  MPV_DEFINE_SYM_PTR (mpv_stream_cb_add_ro)
 #define mpv_stream_cb_add_ro pfn_mpv_stream_cb_add_ro
 
 #endif