diff options
author | Mateusz Łukasik <mati75@linuxmint.pl> | 2017-10-08 22:17:31 +0200 |
---|---|---|
committer | Mateusz Łukasik <mati75@linuxmint.pl> | 2017-10-08 22:17:31 +0200 |
commit | 867f979d517190a0aaab06f4180cdd964a48677e (patch) | |
tree | c4367ae381f38a39e36b574513229be318e20556 /src/mpvoptions.cpp | |
parent | f6d0340806ec11f417006a3704eca7ec7d537eab (diff) |
New upstream version 17.10.0~ds0
Diffstat (limited to 'src/mpvoptions.cpp')
-rw-r--r-- | src/mpvoptions.cpp | 478 |
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; +} |