Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • f43c7db6c5a1eb71a698f8cfd223b65ee1546302
  • master par défaut protégée
  • rust-playlist-sync
  • rust
  • fix-qt-deprecated-qvariant-type
  • fix-mpris-qtwindow-race-condition
  • rust-appimage-wayland
  • windows-build-rebased
  • v2.5 protégée
  • v2.4 protégée
  • v2.3-1 protégée
  • v2.3 protégée
  • v2.2 protégée
  • v2.1 protégée
  • v2.0 protégée
  • v1.8-3 protégée
  • v1.8-2 protégée
  • v1.8-1 protégée
  • v1.8 protégée
  • v1.7 protégée
  • v1.6 protégée
  • v1.5 protégée
  • v1.4 protégée
  • v1.3 protégée
  • v1.2 protégée
  • v1.1 protégée
  • v1.0 protégée
27 résultats

mpvwidget.cc

Blame
  • mpvwidget.cc 11,99 Kio
    #include "mpvwidget.hh"
    
    #include <stdexcept>
    #include <QtGui/QOpenGLContext>
    #include <QtCore/QMetaObject>
    #include <QApplication>
    #include <QKeyEvent>
    #include <QString>
    
    #include "qthelper.hh"
    #include "../mpv.h"
    
    #include <lektor/mkv.h>
    
    PRIVATE_FUNCTION void
    wakeup(void *ctx)
    {
        QMetaObject::invokeMethod(static_cast<MpvWidget *>(ctx), "on_mpv_events", Qt::QueuedConnection);
    }
    
    PRIVATE_FUNCTION void *
    get_proc_address(void *ctx, const char *name)
    {
        Q_UNUSED(ctx);
        QOpenGLContext *glctx = QOpenGLContext::currentContext();
        if (!glctx)
            return nullptr;
        return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name)));
    }
    
    MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, bool *launched,
                         QWidget *parent)
        : QOpenGLWidget(parent)
        , m_queue(queue)
        , m_db(db)
        , m_reg(reg)
        , m_launched(launched)
    {
        mpv = mpv_create();
        if (!mpv)
            throw std::runtime_error("could not create mpv context");
    
        setFocusPolicy(Qt::StrongFocus);
    
        mpv_set_option_string(mpv, "osc", "yes");
        if (mpv_initialize(mpv) < 0)
            throw std::runtime_error("could not initialize mpv context");
    
        // Request hw decoding, just for testing.
        mpv_set_option_string(mpv, "hwdec", "auto");
    
        mpv_observe_property(mpv, 0, "duration", MPV_FORMAT_DOUBLE);
        mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE);
        mpv_set_wakeup_callback(mpv, wakeup, this);
    }
    
    MpvWidget::~MpvWidget()
    {
        makeCurrent();
        if (mpv_gl)
            mpv_render_context_free(mpv_gl);
        mpv_terminate_destroy(mpv);
    }
    
    void
    MpvWidget::command(const QVariant &params)
    {
        mpv::qt::command(mpv, params);
    }