diff options
Diffstat (limited to 'libmpv')
-rw-r--r-- | libmpv/client.h | 2 | ||||
-rw-r--r-- | libmpv/qthelper.hpp | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/libmpv/client.h b/libmpv/client.h index 344bfdd9d5..88009b79ca 100644 --- a/libmpv/client.h +++ b/libmpv/client.h @@ -167,7 +167,7 @@ extern "C" { * relational operators (<, >, <=, >=). */ #define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) -#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 11) +#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 12) /** * Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with. diff --git a/libmpv/qthelper.hpp b/libmpv/qthelper.hpp index 1b0ff47a0b..c36a7d7924 100644 --- a/libmpv/qthelper.hpp +++ b/libmpv/qthelper.hpp @@ -25,12 +25,42 @@ #include <QString> #include <QList> #include <QHash> +#include <QSharedPointer> #include <mpv/client.h> namespace mpv { namespace qt { +// Wrapper around mpv_handle. Does refcounting under the hood. +class Handle +{ + struct container { + container(mpv_handle *h) : mpv(h) {} + ~container() { mpv_terminate_destroy(mpv); } + mpv_handle *mpv; + }; + QSharedPointer<container> sptr; +public: + // Construct a new Handle from a raw mpv_handle with refcount 1. If the + // last Handle goes out of scope, the mpv_handle will be destroyed with + // mpv_terminate_destroy(). + // Never destroy the mpv_handle manually when using this wrapper. You + // will create dangling pointers. Just let the wrapper take care of + // destroying the mpv_handle. + // Never create multiple wrappers from the same raw mpv_handle; copy the + // wrapper instead (that's what it's for). + static Handle FromRawHandle(mpv_handle *handle) { + Handle h; + h.sptr = QSharedPointer<container>(new container(handle)); + return h; + } + + // Return the raw handle; for use with the libmpv C API. + operator mpv_handle*() { return (*sptr).mpv; } + operator mpv_handle*() const { return (*sptr).mpv; } +}; + static inline QVariant node_to_variant(const mpv_node *node) { switch (node->format) { |