summaryrefslogtreecommitdiff
path: root/src/core.cpp
diff options
context:
space:
mode:
authorAlessio Treglia <alessio@debian.org>2012-02-16 11:06:56 +0100
committerAlessio Treglia <alessio@debian.org>2012-02-16 11:06:56 +0100
commit1d323e54ee434609cf035598486075c9a918a2d3 (patch)
tree929ad92f19dfbb5492471449f1a6a918ea99c6b8 /src/core.cpp
parent99b53d44a60e3e934fc664152c115ae0d6e19920 (diff)
Imported Upstream version 0.6.10
Diffstat (limited to 'src/core.cpp')
-rw-r--r--src/core.cpp135
1 files changed, 91 insertions, 44 deletions
diff --git a/src/core.cpp b/src/core.cpp
index caafc34..0022345 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -1,5 +1,5 @@
/* smplayer, GUI front-end for mplayer.
- Copyright (C) 2006-2010 Ricardo Villalba <rvm@escomposlinux.org>
+ Copyright (C) 2006-2011 Ricardo Villalba <rvm@escomposlinux.org>
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
@@ -21,6 +21,7 @@
#include <QFileInfo>
#include <QRegExp>
#include <QTextStream>
+#include <QUrl>
#include <cmath>
@@ -37,9 +38,11 @@
#include "discname.h"
#include "filters.h"
+#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#ifdef Q_OS_WIN
#include <windows.h> // To change app priority
#include <QSysInfo> // To get Windows version
+#endif
#ifdef SCREENSAVER_OFF
#include "screensaver.h"
#endif
@@ -220,9 +223,9 @@ Core::Core( MplayerWindow *mpw, QWidget* parent )
#endif
mplayerwindow->setMonitorAspect( pref->monitor_aspect_double() );
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#ifdef SCREENSAVER_OFF
- // Windows screensaver
+ // Windows or OS2 screensaver
win_screensaver = new WinScreenSaver();
#endif
#endif
@@ -247,7 +250,7 @@ Core::~Core() {
delete tv_settings;
#endif
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#ifdef SCREENSAVER_OFF
delete win_screensaver;
#endif
@@ -361,6 +364,11 @@ void Core::displayTextOnOSD(QString text, int duration, int level, QString prefi
void Core::open(QString file, int seek) {
qDebug("Core::open: '%s'", file.toUtf8().data());
+ if (file.startsWith("file:")) {
+ file = QUrl(file).toLocalFile();
+ qDebug("Core::open: converting url to local file: %s", file.toUtf8().constData());
+ }
+
QFileInfo fi(file);
if ( (fi.exists()) && (fi.suffix().toLower()=="iso") ) {
@@ -1182,9 +1190,9 @@ void Core::processFinished()
{
qDebug("Core::processFinished");
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#ifdef SCREENSAVER_OFF
- // Restores the Windows screensaver
+ // Restores the Windows or OS2 screensaver
if (pref->turn_screensaver_off) {
win_screensaver->enable();
}
@@ -1264,9 +1272,9 @@ void Core::startMplayer( QString file, double seek ) {
return;
}
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#ifdef SCREENSAVER_OFF
- // Disable the Windows screensaver
+ // Disable the Windows or OS2 screensaver
if (pref->turn_screensaver_off) {
win_screensaver->disable();
}
@@ -1349,9 +1357,18 @@ void Core::startMplayer( QString file, double seek ) {
}
#ifndef Q_OS_WIN
else {
+ /* if (pref->vo.startsWith("x11")) { */ // My card doesn't support vdpau, I use x11 to test
if (pref->vo.startsWith("vdpau")) {
- proc->addArgument("-vc");
- proc->addArgument("ffh264vdpau,ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,");
+ QString c;
+ if (pref->vdpau.ffh264vdpau) c += "ffh264vdpau,";
+ if (pref->vdpau.ffmpeg12vdpau) c += "ffmpeg12vdpau,";
+ if (pref->vdpau.ffwmv3vdpau) c += "ffwmv3vdpau,";
+ if (pref->vdpau.ffvc1vdpau) c += "ffvc1vdpau,";
+ if (pref->vdpau.ffodivxvdpau) c += "ffodivxvdpau,";
+ if (!c.isEmpty()) {
+ proc->addArgument("-vc");
+ proc->addArgument(c);
+ }
}
#endif
else {
@@ -1380,11 +1397,6 @@ void Core::startMplayer( QString file, double seek ) {
lavdopts += "skiploopfilter=all";
}
- if (pref->show_motion_vectors) {
- if (!lavdopts.isEmpty()) lavdopts += ":";
- lavdopts += "vismv=7";
- }
-
if (pref->threads > 1) {
if (!lavdopts.isEmpty()) lavdopts += ":";
lavdopts += "threads=" + QString::number(pref->threads);
@@ -1451,7 +1463,7 @@ void Core::startMplayer( QString file, double seek ) {
proc->addArgument( pref->ao );
}
-#ifndef Q_OS_WIN
+#if !defined(Q_OS_WIN) && !defined(Q_OS_OS2)
if (pref->vo.startsWith("x11")) {
proc->addArgument( "-zoom");
}
@@ -1515,7 +1527,7 @@ void Core::startMplayer( QString file, double seek ) {
proc->addArgument("-nodouble");
}
-#ifndef Q_OS_WIN
+#if !defined(Q_OS_WIN) && !defined(Q_OS_OS2)
if (!pref->use_mplayer_window) {
proc->addArgument( "-input" );
if (MplayerVersion::isMplayerAtLeast(29058)) {
@@ -1536,11 +1548,16 @@ void Core::startMplayer( QString file, double seek ) {
if (!pref->use_mplayer_window) {
proc->addArgument("-wid");
+#if defined(Q_OS_OS2)
+ #define WINIDFROMHWND(hwnd) ( ( hwnd ) - 0x80000000UL )
+ proc->addArgument( QString::number( WINIDFROMHWND( (int) mplayerwindow->videoLayer()->winId() ) ));
+#else
proc->addArgument( QString::number( (int) mplayerwindow->videoLayer()->winId() ) );
+#endif
#if USE_COLORKEY
- #ifdef Q_OS_WIN
- if ((pref->vo.startsWith("directx")) || (pref->vo.isEmpty())) {
+ #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
+ if ((pref->vo.startsWith("directx")) || (pref->vo.startsWith("kva")) || (pref->vo.isEmpty())) {
proc->addArgument("-colorkey");
//proc->addArgument( "0x"+QString::number(pref->color_key, 16) );
proc->addArgument( ColorUtils::colorToRGB(pref->color_key) );
@@ -1548,7 +1565,7 @@ void Core::startMplayer( QString file, double seek ) {
#endif
qDebug("Core::startMplayer: * not using -colorkey for %s", pref->vo.toUtf8().data());
qDebug("Core::startMplayer: * report if you can't see the video");
- #ifdef Q_OS_WIN
+ #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
}
#endif
#endif
@@ -1598,11 +1615,13 @@ void Core::startMplayer( QString file, double seek ) {
}
}
// Use the same font for OSD
+#if !defined(Q_OS_OS2)
if (!pref->ass_styles.fontname.isEmpty()) {
proc->addArgument("-fontconfig");
proc->addArgument("-font");
proc->addArgument( pref->ass_styles.fontname );
}
+#endif
// Set the size of OSD
if (pref->freetype_support) {
proc->addArgument("-subfont-autoscale");
@@ -1615,13 +1634,13 @@ void Core::startMplayer( QString file, double seek ) {
} else {
// NO ASS:
if (pref->freetype_support) proc->addArgument("-noass");
-
+#if !defined(Q_OS_OS2)
if ( (pref->use_fontconfig) && (!pref->font_name.isEmpty()) ) {
proc->addArgument("-fontconfig");
proc->addArgument("-font");
proc->addArgument( pref->font_name );
}
-
+#endif
if ( (!pref->use_fontconfig) && (!pref->font_file.isEmpty()) ) {
proc->addArgument("-font");
proc->addArgument( pref->font_file );
@@ -1656,8 +1675,11 @@ void Core::startMplayer( QString file, double seek ) {
}
}
- if (pref->use_closed_caption_subs) {
+ if (mset.closed_caption_channel > 0) {
proc->addArgument("-subcc");
+ if (MplayerVersion::isMplayerAtLeast(32607)) {
+ proc->addArgument( QString::number( mset.closed_caption_channel ) );
+ }
}
if (pref->use_forced_subs_only) {
@@ -1904,8 +1926,8 @@ void Core::startMplayer( QString file, double seek ) {
bool force_noslices = false;
#ifndef Q_OS_WIN
- if ((pref->disable_video_filters_with_vdpau) && (pref->vo.startsWith("vdpau"))) {
- qDebug("Core::startMplayer: vdpau doesn't allow any video filter. All have been removed.");
+ if ((pref->vdpau.disable_video_filters) && (pref->vo.startsWith("vdpau"))) {
+ qDebug("Core::startMplayer: using vdpau, video filters are ignored");
goto end_video_filters;
}
#endif
@@ -2417,7 +2439,12 @@ void Core::toggleKaraoke(bool b) {
qDebug("Core::toggleKaraoke: %d", b);
if (b != mset.karaoke_filter) {
mset.karaoke_filter = b;
- restartPlay();
+ if (MplayerVersion::isMplayerAtLeast(31030)) {
+ // Change filter without restarting
+ if (b) tellmp("af_add karaoke"); else tellmp("af_del karaoke");
+ } else {
+ restartPlay();
+ }
}
}
@@ -2429,7 +2456,12 @@ void Core::toggleExtrastereo(bool b) {
qDebug("Core::toggleExtrastereo: %d", b);
if (b != mset.extrastereo_filter) {
mset.extrastereo_filter = b;
- restartPlay();
+ if (MplayerVersion::isMplayerAtLeast(31030)) {
+ // Change filter without restarting
+ if (b) tellmp("af_add extrastereo"); else tellmp("af_del extrastereo");
+ } else {
+ restartPlay();
+ }
}
}
@@ -2441,7 +2473,13 @@ void Core::toggleVolnorm(bool b) {
qDebug("Core::toggleVolnorm: %d", b);
if (b != mset.volnorm_filter) {
mset.volnorm_filter = b;
- restartPlay();
+ if (MplayerVersion::isMplayerAtLeast(31030)) {
+ // Change filter without restarting
+ QString f = pref->filters->item("volnorm").filter();
+ if (b) tellmp("af_add " + f); else tellmp("af_del volnorm");
+ } else {
+ restartPlay();
+ }
}
}
@@ -2915,7 +2953,10 @@ void Core::setAudioEqualizer(AudioEqualizerList values, bool restart) {
mset.audio_equalizer = values;
if (!restart) {
- tellmp( "af_eq_set_bands " + Helper::equalizerListToString(values) );
+ const char *command = "af_cmdline equalizer ";
+ if (!MplayerVersion::isMplayerAtLeast(32505))
+ command = "af_eq_set_bands ";
+ tellmp( command + Helper::equalizerListToString(values) );
} else {
restartPlay();
}
@@ -3652,7 +3693,7 @@ void Core::decPanscan() {
#endif
void Core::showFilenameOnOSD() {
- tellmp("osd_show_property_text \"${filename}\" 3000 0");
+ tellmp("osd_show_property_text \"${filename}\" 5000 0");
}
void Core::toggleDeinterlace() {
@@ -3670,15 +3711,6 @@ void Core::changeUseAss(bool b) {
}
}
-void Core::toggleClosedCaption(bool b) {
- qDebug("Core::toggleClosedCaption: %d", b);
-
- if (pref->use_closed_caption_subs != b) {
- pref->use_closed_caption_subs = b;
- if (proc->isRunning()) restartPlay();
- }
-}
-
void Core::toggleForcedSubsOnly(bool b) {
qDebug("Core::toggleForcedSubsOnly: %d", b);
@@ -3691,15 +3723,30 @@ void Core::toggleForcedSubsOnly(bool b) {
}
}
-void Core::visualizeMotionVectors(bool b) {
- qDebug("Core::visualizeMotionVectors: %d", b);
-
- if (pref->show_motion_vectors != b) {
- pref->show_motion_vectors = b;
+void Core::changeClosedCaptionChannel(int c) {
+ qDebug("Core::changeClosedCaptionChannel: %d", c);
+ if (c != mset.closed_caption_channel) {
+ mset.closed_caption_channel = c;
if (proc->isRunning()) restartPlay();
}
}
+/*
+void Core::nextClosedCaptionChannel() {
+ int c = mset.closed_caption_channel;
+ c++;
+ if (c > 4) c = 0;
+ changeClosedCaptionChannel(c);
+}
+
+void Core::prevClosedCaptionChannel() {
+ int c = mset.closed_caption_channel;
+ c--;
+ if (c < 0) c = 4;
+ changeClosedCaptionChannel(c);
+}
+*/
+
#if DVDNAV_SUPPORT
// dvdnav buttons
void Core::dvdnavUp() {