1
0
Fork 0

[Backend] Source formatted with clang-format.

This commit is contained in:
Kitteh 2018-11-06 07:39:42 +00:00
parent 6b1078f93b
commit 8fc36d20b7
4 changed files with 345 additions and 315 deletions

View file

@ -1,52 +1,51 @@
#include <stdexcept>
#include <clocale>
#include <stdexcept>
#include "MpvPlayerBackend.h"
#include <QApplication>
#include <QQuickWindow>
#include <QOpenGLContext>
#include <QOpenGLFramebufferObject>
#include <QQuickWindow>
namespace {
namespace
void
wakeup(void* ctx)
{
void wakeup(void *ctx)
{
QMetaObject::invokeMethod((MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection);
QMetaObject::invokeMethod(
(MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection);
}
void on_mpv_redraw(void *ctx)
void
on_mpv_redraw(void* ctx)
{
MpvPlayerBackend::on_update(ctx);
}
static void *get_proc_address_mpv(void *ctx, const char *name)
static void*
get_proc_address_mpv(void* ctx, const char* name)
{
Q_UNUSED(ctx)
QOpenGLContext* glctx = QOpenGLContext::currentContext();
if (!glctx) return nullptr;
if (!glctx)
return nullptr;
return reinterpret_cast<void*>(glctx->getProcAddress(QByteArray(name)));
}
}
} // namespace
class MpvRenderer : public QQuickFramebufferObject::Renderer
{
MpvPlayerBackend* obj;
public:
MpvRenderer(MpvPlayerBackend* new_obj)
: obj{ new_obj }
{
}
{}
virtual ~MpvRenderer() {}
@ -55,11 +54,13 @@ public:
QOpenGLFramebufferObject* createFramebufferObject(const QSize& size)
{
// init mpv_gl:
if (!obj->mpv_gl)
{
mpv_opengl_init_params gl_init_params{get_proc_address_mpv, nullptr, nullptr};
if (!obj->mpv_gl) {
mpv_opengl_init_params gl_init_params{ get_proc_address_mpv,
nullptr,
nullptr };
mpv_render_param params[]{
{MPV_RENDER_PARAM_API_TYPE, const_cast<char *>(MPV_RENDER_API_TYPE_OPENGL)},
{ MPV_RENDER_PARAM_API_TYPE,
const_cast<char*>(MPV_RENDER_API_TYPE_OPENGL) },
{ MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params },
{ MPV_RENDER_PARAM_INVALID, nullptr }
};
@ -73,14 +74,15 @@ public:
return QQuickFramebufferObject::Renderer::createFramebufferObject(size);
}
void render()
{
obj->window()->resetOpenGLState();
QOpenGLFramebufferObject* fbo = framebufferObject();
mpv_opengl_fbo mpfbo{.fbo = static_cast<int>(fbo->handle()), .w = fbo->width(), .h = fbo->height(), .internal_format = 0};
mpv_opengl_fbo mpfbo{ .fbo = static_cast<int>(fbo->handle()),
.w = fbo->width(),
.h = fbo->height(),
.internal_format = 0 };
int flip_y{ 0 };
mpv_render_param params[] = {
@ -101,9 +103,10 @@ public:
};
MpvPlayerBackend::MpvPlayerBackend(QQuickItem* parent)
: QQuickFramebufferObject(parent), mpv{mpv_create()}, mpv_gl(nullptr)
: QQuickFramebufferObject(parent)
, mpv{ mpv_create() }
, mpv_gl(nullptr)
{
if (!mpv)
throw std::runtime_error("could not create mpv context");
@ -120,10 +123,6 @@ MpvPlayerBackend::MpvPlayerBackend(QQuickItem * parent)
mpv_set_option_string(mpv, "config", "yes");
// mpv_set_option_string(mpv, "sub-visibility", "no");
mpv_observe_property(mpv, 0, "playback-abort", MPV_FORMAT_NONE);
mpv_observe_property(mpv, 0, "chapter-list", MPV_FORMAT_NODE);
mpv_observe_property(mpv, 0, "track-list", MPV_FORMAT_NODE);
@ -141,122 +140,150 @@ MpvPlayerBackend::MpvPlayerBackend(QQuickItem * parent)
if (mpv_initialize(mpv) < 0)
throw std::runtime_error("could not initialize mpv context");
connect(this, &MpvPlayerBackend::onUpdate, this, &MpvPlayerBackend::doUpdate,
connect(this,
&MpvPlayerBackend::onUpdate,
this,
&MpvPlayerBackend::doUpdate,
Qt::QueuedConnection);
}
MpvPlayerBackend::~MpvPlayerBackend()
{
if (mpv_gl)
{
if (mpv_gl) {
mpv_render_context_free(mpv_gl);
}
mpv_terminate_destroy(mpv);
}
void MpvPlayerBackend::on_update(void *ctx)
void
MpvPlayerBackend::on_update(void* ctx)
{
MpvPlayerBackend* self = (MpvPlayerBackend*)ctx;
emit self->onUpdate();
}
// connected to onUpdate(); signal makes sure it runs on the GUI thread
void MpvPlayerBackend::doUpdate()
void
MpvPlayerBackend::doUpdate()
{
update();
}
QVariant MpvPlayerBackend::getProperty(const QString &name) const
QVariant
MpvPlayerBackend::getProperty(const QString& name) const
{
return mpv::qt::get_property_variant(mpv, name);
}
void MpvPlayerBackend::command(const QVariant& params)
void
MpvPlayerBackend::command(const QVariant& params)
{
qDebug() << params;
mpv::qt::command_variant(mpv, params);
}
void MpvPlayerBackend::setProperty(const QString& name, const QVariant& value)
void
MpvPlayerBackend::setProperty(const QString& name, const QVariant& value)
{
mpv::qt::set_property_variant(mpv, name, value);
}
void MpvPlayerBackend::setOption(const QString& name, const QVariant& value)
void
MpvPlayerBackend::setOption(const QString& name, const QVariant& value)
{
mpv::qt::set_option_variant(mpv, name, value);
}
void MpvPlayerBackend::launchAboutQt()
void
MpvPlayerBackend::launchAboutQt()
{
QApplication *qapp = qobject_cast<QApplication *>(QCoreApplication::instance());
QApplication* qapp =
qobject_cast<QApplication*>(QCoreApplication::instance());
qapp->aboutQt();
}
void MpvPlayerBackend::togglePlayPause()
void
MpvPlayerBackend::togglePlayPause()
{
command(QVariantList() << "cycle" << "pause");
command(QVariantList() << "cycle"
<< "pause");
}
void MpvPlayerBackend::toggleMute()
void
MpvPlayerBackend::toggleMute()
{
command(QVariantList() << "cycle" << "mute");
command(QVariantList() << "cycle"
<< "mute");
}
void MpvPlayerBackend::nextAudioTrack()
void
MpvPlayerBackend::nextAudioTrack()
{
command(QVariantList() << "cycle" << "audio");
command(QVariantList() << "cycle"
<< "audio");
}
void MpvPlayerBackend::nextSubtitleTrack()
void
MpvPlayerBackend::nextSubtitleTrack()
{
command(QVariantList() << "cycle" << "sub");
command(QVariantList() << "cycle"
<< "sub");
}
void MpvPlayerBackend::nextVideoTrack()
void
MpvPlayerBackend::nextVideoTrack()
{
command(QVariantList() << "cycle" << "video");
command(QVariantList() << "cycle"
<< "video");
}
void MpvPlayerBackend::prevPlaylistItem()
void
MpvPlayerBackend::prevPlaylistItem()
{
command(QVariantList() << "playlist-prev");
}
void MpvPlayerBackend::nextPlaylistItem()
void
MpvPlayerBackend::nextPlaylistItem()
{
command(QVariantList() << "playlist-next" << "force");
command(QVariantList() << "playlist-next"
<< "force");
}
void MpvPlayerBackend::loadFile(const QVariant &filename)
void
MpvPlayerBackend::loadFile(const QVariant& filename)
{
command(QVariantList() << "loadfile" << filename);
}
void MpvPlayerBackend::setVolume(const QVariant &volume)
void
MpvPlayerBackend::setVolume(const QVariant& volume)
{
command(QVariantList() << "set" << "volume" << volume);
command(QVariantList() << "set"
<< "volume" << volume);
}
void MpvPlayerBackend::addVolume(const QVariant &volume)
void
MpvPlayerBackend::addVolume(const QVariant& volume)
{
command(QVariantList() << "add" << "volume" << volume);
command(QVariantList() << "add"
<< "volume" << volume);
}
void MpvPlayerBackend::seek(const QVariant &seekTime)
void
MpvPlayerBackend::seek(const QVariant& seekTime)
{
command(QVariantList() << "seek" << seekTime);
}
QVariant MpvPlayerBackend::getTracks() const
QVariant
MpvPlayerBackend::getTracks() const
{
return mpv::qt::get_property_variant(mpv, "track-list");
}
void MpvPlayerBackend::on_mpv_events()
void
MpvPlayerBackend::on_mpv_events()
{
while (mpv) {
mpv_event* event = mpv_wait_event(mpv, 0);
@ -266,10 +293,10 @@ void MpvPlayerBackend::on_mpv_events()
}
handle_mpv_event(event);
}
}
void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
void
MpvPlayerBackend::handle_mpv_event(mpv_event* event)
{
switch (event->event_id) {
case MPV_EVENT_PROPERTY_CHANGE: {
@ -277,22 +304,27 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
if (strcmp(prop->name, "time-pos") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
double time = *(double*)prop->data;
QMetaObject::invokeMethod(this,"setProgressBarValue",Q_ARG(QVariant,time));
QMetaObject::invokeMethod(
this, "setProgressBarValue", Q_ARG(QVariant, time));
}
} else if (strcmp(prop->name, "duration") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
double time = *(double *)prop->data;Q_ARG(QVariant,"txt1"),
QMetaObject::invokeMethod(this,"setProgressBarEnd",Q_ARG(QVariant,time));
double time = *(double*)prop->data;
Q_ARG(QVariant, "txt1"),
QMetaObject::invokeMethod(
this, "setProgressBarEnd", Q_ARG(QVariant, time));
}
} else if (strcmp(prop->name, "volume") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
double volume = *(double*)prop->data;
QMetaObject::invokeMethod(this,"updateVolume",Q_ARG(QVariant,volume));
QMetaObject::invokeMethod(
this, "updateVolume", Q_ARG(QVariant, volume));
}
} else if (strcmp(prop->name, "muted") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
double muted = *(double*)prop->data;
QMetaObject::invokeMethod(this,"updateMuted",Q_ARG(QVariant,muted));
QMetaObject::invokeMethod(
this, "updateMuted", Q_ARG(QVariant, muted));
}
} else if (strcmp(prop->name, "media-title") == 0) {
if (prop->format == MPV_FORMAT_STRING) {
@ -302,12 +334,14 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
} else if (strcmp(prop->name, "sub-text") == 0) {
if (prop->format == MPV_FORMAT_STRING) {
char* subs = *(char**)prop->data;
QMetaObject::invokeMethod(this,"setSubtitles",Q_ARG(QVariant,subs));
QMetaObject::invokeMethod(
this, "setSubtitles", Q_ARG(QVariant, subs));
}
} else if (strcmp(prop->name, "demuxer-cache-duration") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
double duration = *(double*)prop->data;
QMetaObject::invokeMethod(this,"setCachedDuration",Q_ARG(QVariant,duration));
QMetaObject::invokeMethod(
this, "setCachedDuration", Q_ARG(QVariant, duration));
}
} else if (strcmp(prop->name, "playlist-pos") == 0) {
if (prop->format == MPV_FORMAT_DOUBLE) {
@ -329,7 +363,8 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
}
}
QQuickFramebufferObject::Renderer *MpvPlayerBackend::createRenderer() const
QQuickFramebufferObject::Renderer*
MpvPlayerBackend::createRenderer() const
{
window()->setPersistentOpenGLContext(true);
window()->setPersistentSceneGraph(true);

View file

@ -2,15 +2,13 @@
#define MpvPlayerBackend_H
#include <mpv/client.h>
#include <mpv/render_gl.h>
#include <mpv/qthelper.hpp>
#include <mpv/render_gl.h>
#include <QObject>
#include <QOpenGLContext>
#include <QQuickFramebufferObject>
class MpvRenderer;
class MpvPlayerBackend : public QQuickFramebufferObject
@ -28,7 +26,6 @@ public:
virtual ~MpvPlayerBackend();
virtual Renderer* createRenderer() const;
public slots:
void launchAboutQt();
void togglePlayPause();
@ -49,7 +46,6 @@ public slots:
void setOption(const QString& name, const QVariant& value);
QVariant getProperty(const QString& name) const;
signals:
void onUpdate();
void positionChanged(int value);
@ -61,10 +57,6 @@ private slots:
private:
void handle_mpv_event(mpv_event* event);
};
#endif

View file

@ -4,17 +4,17 @@
#include <cstdlib>
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QProcessEnvironment>
#include "MpvPlayerBackend.h"
#include <QApplication>
#include <QProcessEnvironment>
#include <QQmlApplicationEngine>
#ifdef WIN32
#include "setenv_mingw.hpp"
#endif
int main( int argc, char *argv[] )
int
main(int argc, char* argv[])
{
setenv("QT_QUICK_CONTROLS_STYLE", "Desktop", 1);
QApplication app(argc, argv);
@ -23,10 +23,15 @@ int main( int argc, char *argv[] )
app.setApplicationName("KittehPlayer");
for (int i = 1; i < argc; ++i) {
if (!qstrcmp(argv[i], "--update")) {
QString program = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin/appimageupdatetool";
QString program =
QProcessEnvironment::systemEnvironment().value("APPDIR", "") +
"/usr/bin/appimageupdatetool";
QProcess updater;
updater.setProcessChannelMode(QProcess::ForwardedChannels);
updater.start(program, QStringList() << QProcessEnvironment::systemEnvironment().value("APPIMAGE", ""));
updater.start(program,
QStringList()
<< QProcessEnvironment::systemEnvironment().value(
"APPIMAGE", ""));
updater.waitForFinished();
qDebug() << program;
exit(0);
@ -36,7 +41,9 @@ int main( int argc, char *argv[] )
QProcess dpms;
dpms.start("xset", QStringList() << "-dpms");
QString newpath = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", "");
QString newpath =
QProcessEnvironment::systemEnvironment().value("APPDIR", "") +
"/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", "");
qDebug() << newpath;
setenv("PATH", newpath.toUtf8().constData(), 1);

View file

@ -31,12 +31,13 @@
*
*/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int setenv( const char *var, const char *value, int overwrite )
int
setenv(const char* var, const char* value, int overwrite)
{
/* Core implementation for both setenv() and unsetenv() functions;
* at the outset, assume that the requested operation may fail.
@ -46,15 +47,13 @@ int setenv( const char *var, const char *value, int overwrite )
/* The specified "var" name MUST be non-NULL, not a zero-length
* string, and must not include any '=' character.
*/
if( var && *var && (strchr( var, '=' ) == NULL) )
{
if (var && *var && (strchr(var, '=') == NULL)) {
/* A properly named variable may be added to, removed from,
* or modified within the environment, ONLY if "overwrite"
* mode is enabled, OR if the named variable does not yet
* exist...
*/
if( overwrite || getenv( var ) == NULL )
{
if (overwrite || getenv(var) == NULL) {
/* ... in which cases, we convert the specified name and
* value into the appropriate form for use with putenv(),
* (noting that we accept a NULL "value" as equivalent to
@ -72,14 +71,12 @@ int setenv( const char *var, const char *value, int overwrite )
* free memory; ensure that errno is set accordingly.
*/
errno = ENOMEM;
}
else
} else
/* The named variable already exists, and overwrite mode
* was not enabled; there is nothing to be done.
*/
retval = 0;
}
else
} else
/* The specified environment variable name was invalid.
*/
errno = EINVAL;
@ -89,4 +86,3 @@ int setenv( const char *var, const char *value, int overwrite )
*/
return retval;
}