diff options
author | Mateusz Łukasik <mati75@linuxmint.pl> | 2015-04-25 16:17:41 +0200 |
---|---|---|
committer | Mateusz Łukasik <mati75@linuxmint.pl> | 2015-04-25 16:17:41 +0200 |
commit | 45ee5ac6dc2159352596ce8e8ec744e0c864d492 (patch) | |
tree | 55ca90fd4a0d5c0eae188c5919510b6b0d2e3c5d /src/mplayeroptions.cpp | |
parent | a35c74c509f107094fd81cee8df109b652063969 (diff) |
Imported Upstream version 14.9.0.6690~ds0
Diffstat (limited to 'src/mplayeroptions.cpp')
-rw-r--r-- | src/mplayeroptions.cpp | 352 |
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)); +} |