mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-26 21:00:21 +00:00
client API: qthelper: add a refcounting wrapper around mpv_handle
This is useful to deal with crazy Qt object lifetime issues (the following commit needs it).
This commit is contained in:
@@ -25,6 +25,7 @@ API changes
|
||||
|
||||
::
|
||||
|
||||
1.12 - add class Handle to qthelper.hpp
|
||||
1.11 - add OpenGL rendering interop API - allows an application to combine
|
||||
its own and mpv's OpenGL rendering
|
||||
Warning: this API is not stable yet - anything in opengl_cb.h might
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user