public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: media-video/subtitlecomposer/, media-video/subtitlecomposer/files/
Date: Fri, 25 Dec 2020 19:54:44 +0000 (UTC)	[thread overview]
Message-ID: <1608926075.b598cbac8677e292b34b62104620e072fe9acf43.asturm@gentoo> (raw)

commit:     b598cbac8677e292b34b62104620e072fe9acf43
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 25 19:54:21 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Fri Dec 25 19:54:35 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b598cbac

media-video/subtitlecomposer: Fix build with >=media-video/mpv-0.33

Reported-by: Julien Papasian <julien.papasian <AT> gmail.com>
Closes: https://bugs.gentoo.org/760006
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../files/subtitlecomposer-0.7.0-mpv-0.33.patch    | 260 +++++++++++++++++++++
 .../subtitlecomposer/subtitlecomposer-0.7.0.ebuild |   1 +
 2 files changed, 261 insertions(+)

diff --git a/media-video/subtitlecomposer/files/subtitlecomposer-0.7.0-mpv-0.33.patch b/media-video/subtitlecomposer/files/subtitlecomposer-0.7.0-mpv-0.33.patch
new file mode 100644
index 00000000000..a97ab22543b
--- /dev/null
+++ b/media-video/subtitlecomposer/files/subtitlecomposer-0.7.0-mpv-0.33.patch
@@ -0,0 +1,260 @@
+From d09a3cbc60da86f57d06477dea1a57962a11ffb2 Mon Sep 17 00:00:00 2001
+From: Mladen Milinkovic <maxrd2@smoothware.net>
+Date: Mon, 8 Jul 2019 20:19:03 +0200
+Subject: [PATCH] MPV player config options aren't hardcoded anymore.
+
+---
+ src/videoplayerplugins/mpv/mpvbackend.cpp     |  37 ++++++-
+ src/videoplayerplugins/mpv/mpvbackend.h       |   8 +-
+ .../mpv/mpvconfigwidget.cpp                   | 102 ++++++++++++++++--
+ src/videoplayerplugins/mpv/mpvconfigwidget.h  |   8 ++
+ 4 files changed, 139 insertions(+), 16 deletions(-)
+
+diff --git a/src/videoplayerplugins/mpv/mpvbackend.cpp b/src/videoplayerplugins/mpv/mpvbackend.cpp
+index d85a56c..9fdcd95 100644
+--- a/src/videoplayerplugins/mpv/mpvbackend.cpp
++++ b/src/videoplayerplugins/mpv/mpvbackend.cpp
+@@ -33,8 +33,6 @@
+ #include <KMessageBox>
+ 
+ using namespace SubtitleComposer;
+-using namespace mpv;
+-using namespace mpv::qt;
+ 
+ MPVBackend::MPVBackend()
+ 	: PlayerBackend(),
+@@ -218,6 +216,37 @@ MPVBackend::mpvEventHandle(mpv_event *event)
+ 	}
+ }
+ 
++static QVariant
++node_to_variant(const mpv_node *node)
++{
++	switch(node->format) {
++	case MPV_FORMAT_STRING:
++		return QVariant(QString::fromUtf8(node->u.string));
++	case MPV_FORMAT_FLAG:
++		return QVariant(static_cast<bool>(node->u.flag));
++	case MPV_FORMAT_INT64:
++		return QVariant(static_cast<qlonglong>(node->u.int64));
++	case MPV_FORMAT_DOUBLE:
++		return QVariant(node->u.double_);
++	case MPV_FORMAT_NODE_ARRAY: {
++		mpv_node_list *list = node->u.list;
++		QVariantList qlist;
++		for(int n = 0; n < list->num; n++)
++			qlist.append(node_to_variant(&list->values[n]));
++		return QVariant(qlist);
++	}
++	case MPV_FORMAT_NODE_MAP: {
++		mpv_node_list *list = node->u.list;
++		QVariantMap qmap;
++		for(int n = 0; n < list->num; n++)
++			qmap.insert(QString::fromUtf8(list->keys[n]), node_to_variant(&list->values[n]));
++		return QVariant(qmap);
++	}
++	default: // MPV_FORMAT_NONE, unknown values (e.g. future extensions)
++		return QVariant();
++	}
++}
++
+ void
+ MPVBackend::updateTextData(const mpv_event_property *prop)
+ {
+@@ -230,7 +259,7 @@ MPVBackend::updateTextData(const mpv_event_property *prop)
+ 				if(val.format != MPV_FORMAT_NODE_MAP)
+ 					continue;
+ 
+-				const QMap<QString, QVariant> &map = mpv::qt::node_to_variant(&val).toMap();
++				const QMap<QString, QVariant> &map = node_to_variant(&val).toMap();
+ 
+ 				if(map[QStringLiteral("type")].toString() != QStringLiteral("sub")
+ 				|| map[QStringLiteral("external")].toBool() == true)
+@@ -269,7 +298,7 @@ MPVBackend::updateAudioData(const mpv_event_property *prop)
+ 				if(val.format != MPV_FORMAT_NODE_MAP)
+ 					continue;
+ 
+-				const QMap<QString, QVariant> &map = mpv::qt::node_to_variant(&val).toMap();
++				const QMap<QString, QVariant> &map = node_to_variant(&val).toMap();
+ 
+ 				if(map[QStringLiteral("type")].toString() != QStringLiteral("audio"))
+ 					continue;
+diff --git a/src/videoplayerplugins/mpv/mpvbackend.h b/src/videoplayerplugins/mpv/mpvbackend.h
+index d0edf2e..5e19fa1 100644
+--- a/src/videoplayerplugins/mpv/mpvbackend.h
++++ b/src/videoplayerplugins/mpv/mpvbackend.h
+@@ -23,7 +23,7 @@
+ 
+ #include "videoplayer/playerbackend.h"
+ 
+-#include <mpv/qthelper.hpp>
++#include <mpv/client.h>
+ 
+ #include <QWidget>
+ #include <QString>
+@@ -76,14 +76,10 @@ signals:
+ protected slots:
+ 	void onMPVEvents();
+ 
+-protected:
+-	void setupProcessArgs(const QString &filePath);
+-
++private:
+ 	void mpvEventHandle(mpv_event *event);
+-
+ 	static void wakeup(void *ctx);
+ 
+-private:
+ 	void updateTextData(const mpv_event_property *prop);
+ 	void updateAudioData(const mpv_event_property *prop);
+ 	void updateVideoData();
+diff --git a/src/videoplayerplugins/mpv/mpvconfigwidget.cpp b/src/videoplayerplugins/mpv/mpvconfigwidget.cpp
+index 78458f8..6958141 100644
+--- a/src/videoplayerplugins/mpv/mpvconfigwidget.cpp
++++ b/src/videoplayerplugins/mpv/mpvconfigwidget.cpp
+@@ -20,6 +20,11 @@
+ 
+ #include "mpvconfigwidget.h"
+ 
++#include <locale>
++#include <mpv/client.h>
++
++#include "scconfig.h"
++
+ using namespace SubtitleComposer;
+ 
+ MPVConfigWidget::MPVConfigWidget(QWidget *parent)
+@@ -27,14 +32,99 @@ MPVConfigWidget::MPVConfigWidget(QWidget *parent)
+ {
+ 	setupUi(this);
+ 
+-	kcfg_mpvVideoOutput->addItems(QString("vdpau vaapi opengl opengl-hq sdl xv wayland x11 null").split(' '));
+-	kcfg_mpvVideoOutput->setProperty("kcfg_property", QByteArray("currentText"));
++	// FIXME: libmpv requires LC_NUMERIC category to be set to "C".. is there some nicer way to do this?
++	std::setlocale(LC_NUMERIC, "C");
++	m_mpv = mpv_create();
++	mpv_request_log_messages(m_mpv, "info");
++	if(mpv_initialize(m_mpv) >= 0) {
++		getHelpResponse(); // make sure there are no log messages
++		static QStringList bad = {
++			QStringLiteral("libmpv"),
++			QStringLiteral("null"),
++			QStringLiteral("image"),
++			QStringLiteral("tct"),
++			QStringLiteral("caca"),
++			QStringLiteral("pcm"),
++		};
++
++		mpv_set_property_string(m_mpv, "vo", "help");
++		for(QString row : getHelpResponse()) {
++			int pos = row.indexOf(QChar(' '));
++			if(pos == -1)
++				continue;
++			const QString name = row.left(pos);
++			if(bad.contains(name))
++				continue;
++			row.insert(pos, "\t-");
++			if(SCConfig::mpvVideoOutput() == name)
++				kcfg_mpvVideoOutput->setCurrentIndex(kcfg_mpvHwDecode->count());
++			kcfg_mpvVideoOutput->addItem(row, name);
++		}
++		kcfg_mpvVideoOutput->setProperty("kcfg_property", QByteArray("currentData"));
++
++		mpv_set_property_string(m_mpv, "hwdec", "help");
++		kcfg_mpvHwDecode->addItem(QStringLiteral("auto\t- Choose best HW decoder"), QStringLiteral("auto"));
++		for(QString row : getHelpResponse()) {
++			int pos = row.indexOf(QChar(' '));
++			if(pos == -1)
++				continue;
++			const QString name = row.left(pos);
++			const QString lastName = kcfg_mpvHwDecode->itemData(kcfg_mpvHwDecode->count() - 1).toString();
++			if(lastName == name || bad.contains(name))
++				continue;
++			if(SCConfig::mpvHwDecode() == name)
++				kcfg_mpvHwDecode->setCurrentIndex(kcfg_mpvHwDecode->count());
++			kcfg_mpvHwDecode->addItem(name, name);
++		}
++		kcfg_mpvHwDecode->setProperty("kcfg_property", QByteArray("currentData"));
++
++		mpv_set_property_string(m_mpv, "ao", "help");
++		for(QString row : getHelpResponse()) {
++			int pos = row.indexOf(QChar(' '));
++			if(pos == -1)
++				continue;
++			const QString name = row.left(pos);
++			if(bad.contains(name))
++				continue;
++			row.insert(pos, "\t-");
++			if(SCConfig::mpvAudioOutput() == name)
++				kcfg_mpvAudioOutput->setCurrentIndex(kcfg_mpvHwDecode->count());
++			kcfg_mpvAudioOutput->addItem(row, name);
++		}
++		kcfg_mpvAudioOutput->setProperty("kcfg_property", QByteArray("currentData"));
+ 
+-	kcfg_mpvHwDecode->addItems(QString("auto vdpau vaapi vaapi-copy").split(' '));
+-	kcfg_mpvHwDecode->setProperty("kcfg_property", QByteArray("currentText"));
++		mpv_detach_destroy(m_mpv);
++	} else {
++		kcfg_mpvVideoOutput->addItems(QString("vdpau vaapi opengl opengl-hq sdl xv wayland x11 null").split(' '));
++		kcfg_mpvVideoOutput->setProperty("kcfg_property", QByteArray("currentText"));
+ 
+-	kcfg_mpvAudioOutput->addItems(QString("pulse alsa oss portaudio jack null").split(' '));
+-	kcfg_mpvAudioOutput->setProperty("kcfg_property", QByteArray("currentText"));
++		kcfg_mpvHwDecode->addItems(QString("auto vdpau vaapi vaapi-copy").split(' '));
++		kcfg_mpvHwDecode->setProperty("kcfg_property", QByteArray("currentText"));
++
++		kcfg_mpvAudioOutput->addItems(QString("pulse alsa oss portaudio jack null").split(' '));
++		kcfg_mpvAudioOutput->setProperty("kcfg_property", QByteArray("currentText"));
++	}
++}
++
++const QStringList
++MPVConfigWidget::getHelpResponse()
++{
++	QStringList res;
++	while(m_mpv) {
++		mpv_event *event = mpv_wait_event(m_mpv, .1);
++		if(event->event_id == MPV_EVENT_LOG_MESSAGE) {
++			mpv_event_log_message *msg = reinterpret_cast<mpv_event_log_message *>(event->data);
++			if(msg->log_level == MPV_LOG_LEVEL_INFO && strcmp(msg->prefix, "cplayer") == 0) {
++				QString row = QString::fromUtf8(msg->text).simplified();
++				if(row.endsWith(QChar(':')))
++					continue;
++				res << row;
++			}
++		} else if(event->event_id == MPV_EVENT_NONE) {
++			break;
++		}
++	}
++	return res;
+ }
+ 
+ MPVConfigWidget::~MPVConfigWidget()
+diff --git a/src/videoplayerplugins/mpv/mpvconfigwidget.h b/src/videoplayerplugins/mpv/mpvconfigwidget.h
+index f4105d7..775b507 100644
+--- a/src/videoplayerplugins/mpv/mpvconfigwidget.h
++++ b/src/videoplayerplugins/mpv/mpvconfigwidget.h
+@@ -23,6 +23,8 @@
+ 
+ #include "ui_mpvconfigwidget.h"
+ 
++#include <mpv/client.h>
++
+ namespace SubtitleComposer {
+ class MPVConfigWidget : public QWidget, private Ui::MPVConfigWidget
+ {
+@@ -31,6 +33,12 @@ class MPVConfigWidget : public QWidget, private Ui::MPVConfigWidget
+ public:
+ 	explicit MPVConfigWidget(QWidget *parent = 0);
+ 	virtual ~MPVConfigWidget();
++
++private:
++	const QStringList getHelpResponse();
++
++private:
++	mpv_handle *m_mpv;
+ };
+ }
+ 
+-- 
+2.29.2

diff --git a/media-video/subtitlecomposer/subtitlecomposer-0.7.0.ebuild b/media-video/subtitlecomposer/subtitlecomposer-0.7.0.ebuild
index d5fe989dd52..6dbfebafa05 100644
--- a/media-video/subtitlecomposer/subtitlecomposer-0.7.0.ebuild
+++ b/media-video/subtitlecomposer/subtitlecomposer-0.7.0.ebuild
@@ -57,6 +57,7 @@ RDEPEND="${DEPEND}"
 PATCHES=(
 	"${FILESDIR}/${P}-tests-optional.patch"
 	"${FILESDIR}/${P}-valid-desktop-file.patch" # bug 745429
+	"${FILESDIR}/${P}-mpv-0.33.patch" # bug 760006
 )
 
 S="${WORKDIR}/SubtitleComposer-${PV}"


             reply	other threads:[~2020-12-25 19:54 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-25 19:54 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-06-30 21:42 [gentoo-commits] repo/gentoo:master commit in: media-video/subtitlecomposer/, media-video/subtitlecomposer/files/ Andreas Sturmlechner
2023-09-02 21:08 Andreas Sturmlechner
2023-07-25 12:35 Andreas Sturmlechner
2023-03-29 13:53 Andreas Sturmlechner
2022-05-18 12:50 Andreas Sturmlechner
2022-05-09 21:56 Andreas Sturmlechner
2020-09-29 15:02 Andreas Sturmlechner
2019-07-24 21:22 Andreas Sturmlechner
2018-11-01  9:45 Maciej Mrozowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1608926075.b598cbac8677e292b34b62104620e072fe9acf43.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox