summaryrefslogtreecommitdiff
path: root/src/mpvoptions.cpp
diff options
context:
space:
mode:
authorMateusz Łukasik <mati75@linuxmint.pl>2017-10-08 22:17:31 +0200
committerMateusz Łukasik <mati75@linuxmint.pl>2017-10-08 22:17:31 +0200
commit867f979d517190a0aaab06f4180cdd964a48677e (patch)
treec4367ae381f38a39e36b574513229be318e20556 /src/mpvoptions.cpp
parentf6d0340806ec11f417006a3704eca7ec7d537eab (diff)
New upstream version 17.10.0~ds0
Diffstat (limited to 'src/mpvoptions.cpp')
-rw-r--r--src/mpvoptions.cpp478
1 files changed, 256 insertions, 222 deletions
diff --git a/src/mpvoptions.cpp b/src/mpvoptions.cpp
index 791a7f2..061b250 100644
--- a/src/mpvoptions.cpp
+++ b/src/mpvoptions.cpp
@@ -21,7 +21,16 @@
#include "inforeader.h"
#include "deviceinfo.h"
-//#define USE_ANEQUALIZER
+#define EQ_OLD 0
+#define EQ_ANEQUALIZER 1
+#define EQ_FIREQUALIZER 2
+#define EQ_FIREQUALIZER_LIST 3
+#define EQ_SUPEREQUALIZER 4
+#define EQ_FEQUALIZER 5
+
+#define USE_EQUALIZER EQ_FIREQUALIZER
+
+//#define USE_ASPECT_IN_PAD
void MPVProcess::addArgument(const QString & /*a*/) {
}
@@ -534,6 +543,12 @@ void MPVProcess::setSubEncoding(const QString & codepage, const QString & enca_l
void MPVProcess::addVF(const QString & filter_name, const QVariant & value) {
QString option = value.toString();
+ QString lavfi_filter = lavfi(filter_name, value);
+ if (!lavfi_filter.isEmpty()) {
+ arg << "--vf-add=" + lavfi_filter;
+ }
+ else
+
if ((filter_name == "harddup") || (filter_name == "hue")) {
// ignore
}
@@ -542,77 +557,9 @@ void MPVProcess::addVF(const QString & filter_name, const QVariant & value) {
arg << "--vf-add=eq";
}
else
- if (filter_name == "blur") {
- addVFIfAvailable("lavfi", "[unsharp=la=-1.5:ca=-1.5]");
- }
- else
- if (filter_name == "sharpen") {
- addVFIfAvailable("lavfi", "[unsharp=la=1.5:ca=1.5]");
- }
- else
- if (filter_name == "noise") {
- addVFIfAvailable("lavfi", "[noise=alls=9:allf=t]");
- }
- else
- if (filter_name == "deblock") {
- addVFIfAvailable("lavfi", "[pp=" + option +"]");
- }
- else
- if (filter_name == "dering") {
- addVFIfAvailable("lavfi", "[pp=dr]");
- }
- else
- if (filter_name == "phase") {
- addVFIfAvailable("lavfi", "[phase=" + option +"]");
- }
- else
- if (filter_name == "postprocessing") {
- addVFIfAvailable("lavfi", "[pp]");
- }
- else
- if (filter_name == "hqdn3d") {
- QString o;
- if (!option.isEmpty()) o = "=" + option;
- addVFIfAvailable("lavfi", "[hqdn3d" + o +"]");
- }
- else
- if (filter_name == "yadif") {
- if (option == "1") {
- arg << "--vf-add=yadif=field";
- } else {
- arg << "--vf-add=yadif";
- }
- }
- else
- if (filter_name == "kerndeint") {
- addVFIfAvailable("lavfi", "[kerndeint=" + option +"]");
- }
- else
- if (filter_name == "lb" || filter_name == "l5") {
- addVFIfAvailable("lavfi", "[pp=" + filter_name +"]");
- }
- else
if (filter_name == "subs_on_screenshots") {
// Ignore
}
- else
- if (filter_name == "rotate") {
- if (option == "0") {
- arg << "--vf-add=rotate=270,flip";
- }
- else
- if (option == "1") {
- arg << "--vf-add=rotate=90";
- }
- else
- if (option == "2") {
- arg << "--vf-add=rotate=270";
- }
- else
- if (option == "3") {
- arg << "--vf-add=rotate=90,flip";
- }
- }
else {
if (filter_name == "pp") {
QString s;
@@ -627,56 +574,30 @@ void MPVProcess::addVF(const QString & filter_name, const QVariant & value) {
}
void MPVProcess::addStereo3DFilter(const QString & in, const QString & out) {
- arg << "--vf-add=stereo3d=" + in + ":" + out;
+ QString input;
+ if (!in.isEmpty()) input = "in=" + in + ":";
+
+ QString output;
+ if (!out.isEmpty()) output = "out=" + out;
+
+ arg << "--vf-add=lavfi=[stereo3d=" + input + output + "]";
}
void MPVProcess::addAF(const QString & filter_name, const QVariant & value) {
QString option = value.toString();
- if (filter_name == "volnorm") {
- QString s = "acompressor";
- if (!option.isEmpty()) s += "=" + option;
- arg << "--af-add=lavfi=[" + s + "]";
- }
- else
- if (filter_name == "channels") {
- if (option == "2:2:0:1:0:0") arg << "--af-add=channels=2:[0-1,0-0]";
- else
- if (option == "2:2:1:0:1:1") arg << "--af-add=channels=2:[1-0,1-1]";
- else
- if (option == "2:2:0:1:1:0") arg << "--af-add=channels=2:[0-1,1-0]";
- }
- else
- if (filter_name == "pan") {
- if (option == "1:0.5:0.5") {
- arg << "--af-add=pan=1:[0.5,0.5]";
- }
+ QString lavfi_filter = lavfi(filter_name, value);
+ if (!lavfi_filter.isEmpty()) {
+ arg << "--af-add=" + lavfi_filter;
}
else
+
if (filter_name == "equalizer") {
- AudioEqualizerList l = value.toList();
- #ifndef USE_ANEQUALIZER
- option = Helper::equalizerListToString(l);
- previous_eq = option;
- arg << "--af-add=equalizer=" + option;
- #else
- option = Helper::equalizerListToString(l, true);
- previous_eq = option;
- arg << "--af-add=lavfi=[anequalizer=" + option + "]";
- #endif
- }
- else
- if (filter_name == "extrastereo") {
- arg << "--af-add=lavfi=[extrastereo]";
- }
- else
- if (filter_name == "earwax") {
- arg << "--af-add=lavfi=[earwax]";
- }
- else
- if (filter_name == "karaoke") {
- /* Not supported anymore */
- /* Ignore */
+ AudioEqualizerList al = value.toList();
+ QString f = audioEqualizerFilter(al);
+ arg << "--af-add=" + f;
+ previous_eq = f;
+ previous_eq_list = al;
}
else {
QString s = filter_name;
@@ -694,7 +615,7 @@ void MPVProcess::setVolume(int v) {
}
void MPVProcess::setOSD(int o) {
- writeToStdin("osd " + QString::number(o));
+ writeToStdin("no-osd set osd-level " + QString::number(o));
}
void MPVProcess::setAudio(int ID) {
@@ -882,51 +803,57 @@ void MPVProcess::setSpeed(double value) {
writeToStdin("set speed " + QString::number(value));
}
-#ifdef MPLAYER_SUPPORT
-void MPVProcess::enableKaraoke(bool /*b*/) {
- /*
- if (b) writeToStdin("af add karaoke"); else writeToStdin("af del karaoke");
- */
- messageFilterNotSupported("karaoke");
+void MPVProcess::enableKaraoke(bool b) {
+ changeAF("karaoke", b);
+
+ //messageFilterNotSupported("karaoke");
}
-#endif
void MPVProcess::enableExtrastereo(bool b) {
- if (b) writeToStdin("af add lavfi=[extrastereo]"); else writeToStdin("af del lavfi=[extrastereo]");
+ changeAF("extrastereo", b);
}
void MPVProcess::enableVolnorm(bool b, const QString & option) {
- QString s = "acompressor";
- if (!option.isEmpty()) s += "=" + option;
- if (b) writeToStdin("af add lavfi=[" + s + "]"); else writeToStdin("af del lavfi=[" + s + "]");
+ changeAF("volnorm", b, option);
}
void MPVProcess::enableEarwax(bool b) {
- if (b) writeToStdin("af add lavfi=[earwax]"); else writeToStdin("af del lavfi=[earwax]");
+ changeAF("earwax", b);
}
void MPVProcess::setAudioEqualizer(AudioEqualizerList l) {
-#ifndef USE_ANEQUALIZER
- QString values = Helper::equalizerListToString(l);
- if (values == previous_eq) return;
+ qDebug("MPVProcess::setAudioEqualizer");
- if (!previous_eq.isEmpty()) {
- writeToStdin("af del equalizer=" + previous_eq);
+ #if !defined(SIMPLE_EQUALIZER) && USE_EQUALIZER == EQ_ANEQUALIZER
+
+ QStringList commands = AudioEqualizerHelper::equalizerListForCommand(l, previous_eq_list, AudioEqualizerHelper::Anequalizer);
+ foreach(QString command, commands) {
+ writeToStdin("af-command \"anequalizer\" \"change\" \"" + command + "\"");
}
- writeToStdin("af add equalizer=" + values);
- previous_eq = values;
-#else
- /* Not working */
- #if 0
- QString values = Helper::equalizerListToString(l, true);
- if (values == previous_eq) return;
+
+ previous_eq_list = l;
+
+ #elif !defined(SIMPLE_EQUALIZER) && USE_EQUALIZER == EQ_FIREQUALIZER
+
+ QStringList commands = AudioEqualizerHelper::equalizerListForCommand(l, previous_eq_list, AudioEqualizerHelper::Firequalizer);
+ foreach(QString command, commands) {
+ writeToStdin("af-command \"firequalizer\" \"gain_entry\" \"" + command + "\"");
+ }
+
+ previous_eq_list = l;
+
+ #else
+
+ QString eq_filter = audioEqualizerFilter(l);
+ if (previous_eq == eq_filter) return;
if (!previous_eq.isEmpty()) {
- writeToStdin("af del lavfi=[anequalizer=" + previous_eq + "]");
+ writeToStdin("af del \"" + previous_eq + "\"");
}
- writeToStdin("af add lavfi=[anequalizer=" + values + "]");
- previous_eq = values;
- #endif
+
+ writeToStdin("af add \"" + eq_filter + "\"");
+ previous_eq = eq_filter;
+
#endif
}
@@ -1040,87 +967,10 @@ void MPVProcess::changeVF(const QString & filter, bool enable, const QVariant &
qDebug() << "MPVProcess::changeVF:" << filter << enable;
QString f;
- if (filter == "letterbox") {
- f = QString("expand=aspect=%1").arg(option.toDouble());
- }
- else
- if (filter == "noise") {
- f = "lavfi=[noise=alls=9:allf=t]";
- }
- else
- if (filter == "blur") {
- f = "lavfi=[unsharp=la=-1.5:ca=-1.5]";
- }
- else
- if (filter == "sharpen") {
- f = "lavfi=[unsharp=la=1.5:ca=1.5]";
- }
- else
- if (filter == "deblock") {
- f = "lavfi=[pp=" + option.toString() +"]";
- }
- else
- if (filter == "dering") {
- f = "lavfi=[pp=dr]";
- }
- else
- if (filter == "phase") {
- f = "lavfi=[phase=" + option.toString() +"]";
- }
- else
- if (filter == "postprocessing") {
- f = "lavfi=[pp]";
- }
- else
- if (filter == "hqdn3d") {
- QString o = option.toString();
- if (!o.isEmpty()) o = "=" + o;
- f = "lavfi=[hqdn3d" + o +"]";
- }
- else
- if (filter == "rotate") {
- QString o = option.toString();
- if (o == "0") {
- f = "rotate=270,flip";
- }
- else
- if (o == "1") {
- f = "rotate=90";
- }
- else
- if (o == "2") {
- f = "rotate=270";
- }
- else
- if (o == "3") {
- f = "rotate=90,flip";
- }
- }
- else
- if (filter == "flip" || filter == "mirror") {
- f = filter;
- }
- else
- if (filter == "scale" || filter == "gradfun") {
- f = filter;
- QString o = option.toString();
- if (!o.isEmpty()) f += "=" + o;
- }
- else
- if (filter == "lb" || filter == "l5") {
- f = "lavfi=[pp=" + filter +"]";
- }
- else
- if (filter == "yadif") {
- if (option.toString() == "1") {
- f = "yadif=field";
- } else {
- f = "yadif";
- }
- }
- else
- if (filter == "kerndeint") {
- f = "lavfi=[kerndeint=" + option.toString() +"]";
+
+ QString lavfi_filter = lavfi(filter, option);
+ if (!lavfi_filter.isEmpty()) {
+ f = lavfi_filter;
}
else {
qDebug() << "MPVProcess::changeVF: unknown filter:" << filter;
@@ -1131,8 +981,29 @@ void MPVProcess::changeVF(const QString & filter, bool enable, const QVariant &
}
}
+void MPVProcess::changeAF(const QString & filter, bool enable, const QVariant & option) {
+ qDebug() << "MPVProcess::changeAF:" << filter << enable;
+
+ QString f;
+
+ QString lavfi_filter = lavfi(filter, option);
+ if (!lavfi_filter.isEmpty()) {
+ f = lavfi_filter;
+ }
+
+ if (!f.isEmpty()) {
+ writeToStdin(QString("af %1 \"%2\"").arg(enable ? "add" : "del").arg(f));
+ }
+}
+
void MPVProcess::changeStereo3DFilter(bool enable, const QString & in, const QString & out) {
- QString filter = "stereo3d=" + in + ":" + out;
+ QString input;
+ if (!in.isEmpty()) input = "in=" + in + ":";
+
+ QString output;
+ if (!out.isEmpty()) output = "out=" + out;
+
+ QString filter = "lavfi=[stereo3d=" + input + output + "]";
writeToStdin(QString("vf %1 \"%2\"").arg(enable ? "add" : "del").arg(filter));
}
@@ -1235,3 +1106,166 @@ void MPVProcess::setSubStyles(const AssStyles & styles, const QString &) {
void MPVProcess::setChannelsFile(const QString & filename) {
arg << "--dvbin-file=" + filename;
}
+
+QString MPVProcess::lavfi(const QString & filter_name, const QVariant & option) {
+ QString f;
+
+ if (filter_name == "flip") {
+ f = "vflip";
+ }
+ else
+ if (filter_name == "mirror") {
+ f = "hflip";
+ }
+ else
+ if (filter_name == "noise") {
+ f = "noise=alls=9:allf=t";
+ }
+ else
+ if (filter_name == "blur") {
+ f = "unsharp=la=-1.5:ca=-1.5";
+ }
+ else
+ if (filter_name == "sharpen") {
+ f = "unsharp=la=1.5:ca=1.5";
+ }
+ else
+ if (filter_name == "deblock") {
+ f = "pp=" + option.toString();
+ }
+ else
+ if (filter_name == "dering") {
+ f = "pp=dr";
+ }
+ else
+ if (filter_name == "postprocessing") {
+ f = "pp";
+ }
+ else
+ if (filter_name == "lb" || filter_name == "l5") {
+ f = "pp=" + filter_name;
+ }
+ else
+
+ if (filter_name == "yadif") {
+ if (option.toString() == "1") {
+ f = "yadif=mode=send_field";
+ } else {
+ f = "yadif=mode=send_frame";
+ }
+ }
+ else
+
+ if (filter_name == "scale" || filter_name == "gradfun" ||
+ filter_name == "hqdn3d" || filter_name == "kerndeint" ||
+ filter_name == "phase" || filter_name == "extrastereo" ||
+ filter_name == "earwax")
+ {
+ f = filter_name;
+ QString o = option.toString();
+ if (!o.isEmpty()) f += "=" + o;
+ }
+ else
+ if (filter_name == "letterbox") {
+ #ifdef USE_ASPECT_IN_PAD
+ f = QString("pad=aspect=%1:y=(oh-ih)/2").arg(option.toDouble());
+ #else
+ f = QString("pad=iw:iw/%1:0:(oh-ih)/2").arg(option.toDouble());
+ #endif
+ }
+ else
+ if (filter_name == "rotate") {
+ QString o = option.toString();
+ if (o == "0") {
+ f = "rotate=3*PI/2:ih:iw,vflip";
+ }
+ else
+ if (o == "1") {
+ f = "rotate=PI/2:ih:iw"; // 90º
+ }
+ else
+ if (o == "2") {
+ f = "rotate=3*PI/2:ih:iw"; // 270º
+ }
+ else
+ if (o == "3") {
+ f = "rotate=PI/2:ih:iw,vflip";
+ }
+ }
+ else
+ if (filter_name == "volnorm") {
+ f = "acompressor";
+ QString o = option.toString();
+ if (!o.isEmpty()) f += "=" + o;
+ }
+ else
+ if (filter_name == "karaoke") {
+ f = "stereotools=mlev=0.015625";
+ }
+ else
+ if (filter_name == "stereo-mode") {
+ QString o = option.toString();
+ if (o == "left") f = "pan=mono|c0=c0";
+ else
+ if (o == "right") f = "pan=mono|c0=c1";
+ else
+ if (o == "reverse") f = "pan=stereo|c0=c1:c1=c0";
+ else
+ if (o == "mono") f = "pan=mono|c0=.5*c0+.5*c1";
+ }
+
+ if (!f.isEmpty()) f = "lavfi=[" + f + "]";
+ return f;
+}
+
+QString MPVProcess::audioEqualizerFilter(AudioEqualizerList l) {
+ QString f;
+
+#if USE_EQUALIZER == EQ_OLD
+ QString values = AudioEqualizerHelper::equalizerListToString(l);
+ f = "equalizer=" + values;
+#endif
+
+#if USE_EQUALIZER == EQ_ANEQUALIZER
+ QString values = AudioEqualizerHelper::equalizerListToString(l, AudioEqualizerHelper::Anequalizer);
+ f = "lavfi=[anequalizer=" + values + "]";
+ #ifndef SIMPLE_EQUALIZER
+ f = "@anequalizer:" + f;
+ #endif
+#endif
+
+#if USE_EQUALIZER == EQ_FIREQUALIZER
+ QString values = AudioEqualizerHelper::equalizerListToString(l, AudioEqualizerHelper::Firequalizer);
+ f = "lavfi=[firequalizer=" + values + "]";
+ #ifndef SIMPLE_EQUALIZER
+ f = "@firequalizer:" + f;
+ #endif
+#endif
+
+#ifndef SIMPLE_EQUALIZER
+#if USE_EQUALIZER == EQ_SUPEREQUALIZER
+ QString values = AudioEqualizerHelper::equalizerListToString(l, AudioEqualizerHelper::Superequalizer);
+ f = "lavfi=[superequalizer=" + values + "]";
+#endif
+
+#if USE_EQUALIZER == EQ_FIREQUALIZER_LIST
+ QStringList e = AudioEqualizerHelper::equalizerListToStringList(l, AudioEqualizerHelper::Firequalizer);
+ foreach(QString option, e) {
+ if (!f.isEmpty()) f += ",";
+ f += "firequalizer=" + option;
+ }
+ f = "@firequalizer:lavfi=[" + f + "]";
+#endif
+
+#if USE_EQUALIZER == EQ_FEQUALIZER
+ QStringList e = AudioEqualizerHelper::equalizerListToStringList(l, AudioEqualizerHelper::FEqualizer);
+ foreach(QString option, e) {
+ if (!f.isEmpty()) f += ",";
+ f += "equalizer=" + option;
+ }
+ f = "lavfi=[aresample=44100," + f + "]";
+#endif
+#endif
+
+ return f;
+}