mirror of
https://github.com/mpv-player/mpv
synced 2025-04-07 10:02:50 +00:00
Destruction (e.g. when closing the window) was a bit broken. This commit fixes some possible crashes, and should make lifetime management relatively sane. (Still a bit complex, though. Maybe this code should be moved into a tiny library.) QtQuick runs the renderer on a separate thread. This thread is rather loosely connected to the main thread. The loose separation is enforced by the API, which also makes coordination of initialization and destruction harder. Throw refcounting at the problem, which fixes it. The refcounting wrapper introduced in the previous commit is used for this. Also contains some general cleanups.
36 lines
650 B
C++
36 lines
650 B
C++
#ifndef MPVRENDERER_H_
|
|
#define MPVRENDERER_H_
|
|
|
|
#include <QtQuick/QQuickFramebufferObject>
|
|
|
|
#include <mpv/client.h>
|
|
#include <mpv/opengl_cb.h>
|
|
#include <mpv/qthelper.hpp>
|
|
|
|
class MpvRenderer;
|
|
|
|
class MpvObject : public QQuickFramebufferObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
mpv::qt::Handle mpv;
|
|
mpv_opengl_cb_context *mpv_gl;
|
|
|
|
friend class MpvRenderer;
|
|
|
|
public:
|
|
MpvObject(QQuickItem * parent = 0);
|
|
virtual ~MpvObject();
|
|
virtual Renderer *createRenderer() const;
|
|
public slots:
|
|
void loadfile(const QString& filename);
|
|
signals:
|
|
void onUpdate();
|
|
private slots:
|
|
void doUpdate();
|
|
private:
|
|
static void on_update(void *ctx);
|
|
};
|
|
|
|
#endif
|