summaryrefslogtreecommitdiff
path: root/src/mplayeroptions.cpp
diff options
context:
space:
mode:
authorMateusz Łukasik <mati75@linuxmint.pl>2015-04-25 16:17:41 +0200
committerMateusz Łukasik <mati75@linuxmint.pl>2015-04-25 16:17:41 +0200
commit45ee5ac6dc2159352596ce8e8ec744e0c864d492 (patch)
tree55ca90fd4a0d5c0eae188c5919510b6b0d2e3c5d /src/mplayeroptions.cpp
parenta35c74c509f107094fd81cee8df109b652063969 (diff)
Imported Upstream version 14.9.0.6690~ds0
Diffstat (limited to 'src/mplayeroptions.cpp')
-rw-r--r--src/mplayeroptions.cpp352
1 files changed, 352 insertions, 0 deletions
diff --git a/src/mplayeroptions.cpp b/src/mplayeroptions.cpp
new file mode 100644
index 0000000..8a03dfc
--- /dev/null
+++ b/src/mplayeroptions.cpp
@@ -0,0 +1,352 @@
+/* smplayer, GUI front-end for mplayer.
+ Copyright (C) 2006-2015 Ricardo Villalba <rvm@users.sourceforge.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "subtracks.h"
+#include <QDebug>
+
+void MplayerProcess::setMedia(const QString & media, bool is_playlist) {
+ if (is_playlist) arg << "-playlist";
+ arg << media;
+}
+
+void MplayerProcess::setFixedOptions() {
+ arg << "-noquiet" << "-slave" << "-identify";
+}
+
+void MplayerProcess::disableInput() {
+ arg << "-nomouseinput";
+
+#if !defined(Q_OS_WIN) && !defined(Q_OS_OS2)
+ arg << "-input" << "nodefault-bindings:conf=/dev/null";
+#endif
+}
+
+void MplayerProcess::setOption(const QString & option_name, const QVariant & value) {
+ if (option_name == "cache") {
+ int cache = value.toInt();
+ if (cache > 31) {
+ arg << "-cache" << value.toString();
+ } else {
+ arg << "-nocache";
+ }
+ }
+ else
+ if (option_name == "stop-xscreensaver") {
+ bool stop_ss = value.toBool();
+ if (stop_ss) arg << "-stop-xscreensaver"; else arg << "-nostop-xscreensaver";
+ }
+ else
+ if (option_name == "correct-pts") {
+ bool b = value.toBool();
+ if (b) arg << "-correct-pts"; else arg << "-nocorrect-pts";
+ }
+ else
+ if (option_name == "framedrop") {
+ QString o = value.toString();
+ if (o.contains("vo")) arg << "-framedrop";
+ if (o.contains("decoder")) arg << "-hardframedrop";
+ }
+ else
+ if (option_name == "osd-scale") {
+ arg << "-subfont-osd-scale" << value.toString();
+ }
+ else
+ if (option_name == "verbose") {
+ arg << "-v";
+ }
+ else
+ if (option_name == "screenshot_template") {
+ // Not supported
+ }
+ else
+ if (option_name == "enable_streaming_sites_support") {
+ // Not supported
+ }
+ else
+ if (option_name == "hwdec") {
+ // Not supported
+ }
+ else
+ if (option_name == "keepaspect" ||
+ option_name == "dr" || option_name == "double" ||
+ option_name == "fs" || option_name == "slices" ||
+ option_name == "flip-hebrew")
+ {
+ bool b = value.toBool();
+ if (b) arg << "-" + option_name; else arg << "-no" + option_name;
+ }
+ else {
+ arg << "-" + option_name;
+ if (!value.isNull()) arg << value.toString();
+ }
+}
+
+void MplayerProcess::addUserOption(const QString & option) {
+ arg << option;
+}
+
+void MplayerProcess::addVF(const QString & filter_name, const QVariant & value) {
+ QString option = value.toString();
+
+ if (filter_name == "blur" || filter_name == "sharpen") {
+ arg << "-vf-add" << "unsharp=" + option;
+ }
+ else
+ if (filter_name == "deblock") {
+ arg << "-vf-add" << "pp=" + option;
+ }
+ else
+ if (filter_name == "subs_on_screenshots") {
+ if (option == "ass") {
+ arg << "-vf-add" << "ass";
+ } else {
+ arg << "-vf-add" << "expand=osd=1";
+ }
+ }
+ else
+ if (filter_name == "flip") {
+ // expand + flip doesn't work well, a workaround is to add another
+ // filter between them, so that's why harddup is here
+ arg << "-vf-add" << "harddup,flip";
+ }
+ else
+ if (filter_name == "expand") {
+ arg << "-vf-add" << "expand=" + option + ",harddup";
+ // Note: on some videos (h264 for instance) the subtitles doesn't disappear,
+ // appearing the new ones on top of the old ones. It seems adding another
+ // filter after expand fixes the problem. I chose harddup 'cos I think
+ // it will be harmless in mplayer.
+ }
+ else {
+ QString s = filter_name;
+ QString option = value.toString();
+ if (!option.isEmpty()) s += "=" + option;
+ arg << "-vf-add" << s;
+ }
+}
+
+void MplayerProcess::addAF(const QString & filter_name, const QVariant & value) {
+ QString s = filter_name;
+ if (!value.isNull()) s += "=" + value.toString();
+ arg << "-af-add" << s;
+}
+
+void MplayerProcess::quit() {
+ writeToStdin("quit");
+}
+
+void MplayerProcess::setVolume(int v) {
+ writeToStdin("volume " + QString::number(v) + " 1");
+}
+
+void MplayerProcess::setOSD(int o) {
+ writeToStdin(pausing_prefix + " osd " + QString::number(o));
+}
+
+void MplayerProcess::setAudio(int ID) {
+ writeToStdin("switch_audio " + QString::number(ID));
+}
+
+void MplayerProcess::setVideo(int ID) {
+ writeToStdin("set_property switch_video " + QString::number(ID));
+}
+
+void MplayerProcess::setSubtitle(int type, int ID) {
+ switch (type) {
+ case SubData::Vob:
+ writeToStdin( "sub_vob " + QString::number(ID) );
+ break;
+ case SubData::Sub:
+ writeToStdin( "sub_demux " + QString::number(ID) );
+ break;
+ case SubData::File:
+ writeToStdin( "sub_file " + QString::number(ID) );
+ break;
+ default: {
+ qWarning("MplayerProcess::setSubtitle: unknown type!");
+ }
+ }
+}
+
+void MplayerProcess::disableSubtitles() {
+ writeToStdin("sub_source -1");
+}
+
+void MplayerProcess::setSubtitlesVisibility(bool b) {
+ writeToStdin(QString("sub_visibility %1").arg(b ? 1 : 0));
+}
+
+void MplayerProcess::seek(double secs, int mode, bool precise) {
+ QString s = QString("seek %1 %2").arg(secs).arg(mode);
+ if (precise) s += " 1"; else s += " -1";
+ writeToStdin(s);
+}
+
+void MplayerProcess::mute(bool b) {
+ writeToStdin(pausing_prefix + " mute " + QString::number(b ? 1 : 0));
+}
+
+void MplayerProcess::setPause(bool b) {
+ writeToStdin("pause"); // pauses / unpauses
+}
+
+void MplayerProcess::frameStep() {
+ writeToStdin("frame_step");
+}
+
+void MplayerProcess::frameBackStep() {
+ qDebug("MplayerProcess::frameBackStep: function not supported in mplayer");
+}
+
+
+void MplayerProcess::showOSDText(const QString & text, int duration, int level) {
+ QString str = QString("osd_show_text \"%1\" %2 %3").arg(text).arg(duration).arg(level);
+ if (!pausing_prefix.isEmpty()) str = pausing_prefix + " " + str;
+ writeToStdin(str);
+}
+
+void MplayerProcess::showFilenameOnOSD() {
+ writeToStdin("osd_show_property_text \"${filename}\" 5000 0");
+}
+
+void MplayerProcess::setContrast(int value) {
+ writeToStdin(pausing_prefix + " contrast " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setBrightness(int value) {
+ writeToStdin(pausing_prefix + " brightness " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setHue(int value) {
+ writeToStdin(pausing_prefix + " hue " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setSaturation(int value) {
+ writeToStdin(pausing_prefix + " saturation " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setGamma(int value) {
+ writeToStdin(pausing_prefix + " gamma " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setChapter(int ID) {
+ writeToStdin("seek_chapter " + QString::number(ID) +" 1");
+}
+
+void MplayerProcess::setExternalSubtitleFile(const QString & filename) {
+ writeToStdin("sub_load \""+ filename +"\"");
+}
+
+void MplayerProcess::setSubPos(int pos) {
+ writeToStdin("sub_pos " + QString::number(pos) + " 1");
+}
+
+void MplayerProcess::setSubScale(double value) {
+ writeToStdin("sub_scale " + QString::number(value) + " 1");
+}
+
+void MplayerProcess::setSubStep(int value) {
+ writeToStdin("sub_step " + QString::number(value));
+}
+
+void MplayerProcess::setSubForcedOnly(bool b) {
+ writeToStdin(QString("forced_subs_only %1").arg(b ? 1 : 0));
+}
+
+void MplayerProcess::setSpeed(double value) {
+ writeToStdin("speed_set " + QString::number(value));
+}
+
+void MplayerProcess::enableKaraoke(bool b) {
+ if (b) writeToStdin("af_add karaoke"); else writeToStdin("af_del karaoke");
+}
+
+void MplayerProcess::enableExtrastereo(bool b) {
+ if (b) writeToStdin("af_add extrastereo"); else writeToStdin("af_del extrastereo");
+}
+
+void MplayerProcess::enableVolnorm(bool b, const QString & option) {
+ if (b) writeToStdin("af_add volnorm=" + option); else writeToStdin("af_del volnorm");
+}
+
+void MplayerProcess::setAudioEqualizer(const QString & values) {
+ writeToStdin("af_cmdline equalizer " + values);
+}
+
+void MplayerProcess::setAudioDelay(double delay) {
+ writeToStdin(pausing_prefix + " audio_delay " + QString::number(delay) +" 1");
+}
+
+void MplayerProcess::setSubDelay(double delay) {
+ writeToStdin(pausing_prefix + " sub_delay " + QString::number(delay) +" 1");
+}
+
+void MplayerProcess::setLoop(int v) {
+ writeToStdin(QString("loop %1 1").arg(v));
+}
+
+void MplayerProcess::takeScreenshot(ScreenshotType t, bool include_subtitles) {
+ if (t == Single) {
+ writeToStdin(pausing_prefix + " screenshot 0");
+ } else {
+ writeToStdin("screenshot 1");
+ }
+}
+
+void MplayerProcess::setTitle(int ID) {
+ writeToStdin("switch_title " + QString::number(ID));
+}
+
+#if DVDNAV_SUPPORT
+void MplayerProcess::discSetMousePos(int x, int y) {
+ writeToStdin(QString("set_mouse_pos %1 %2").arg(x).arg(y));
+}
+
+void MplayerProcess::discButtonPressed(const QString & button_name) {
+ writeToStdin("dvdnav " + button_name);
+}
+#endif
+
+void MplayerProcess::setAspect(double aspect) {
+ writeToStdin("switch_ratio " + QString::number(aspect));
+}
+
+void MplayerProcess::setFullscreen(bool b) {
+ writeToStdin(QString("vo_fullscreen %1").arg(b ? "1" : "0"));
+}
+
+#if PROGRAM_SWITCH
+void MplayerProcess::setTSProgram(int ID) {
+ writeToStdin("set_property switch_program " + QString::number(ID) );
+ writeToStdin("get_property switch_audio");
+ writeToStdin("get_property switch_video");
+}
+#endif
+
+void MplayerProcess::toggleDeinterlace() {
+ writeToStdin("step_property deinterlace");
+}
+
+void MplayerProcess::askForLength() {
+ writeToStdin(pausing_prefix + " get_property length");
+}
+
+void MplayerProcess::setOSDScale(double value) {
+ // not available
+ //writeToStdin("set_property subfont-osd-scale " + QString::number(value));
+}