diff options
author | Alessio Treglia <alessio@debian.org> | 2012-02-16 11:06:56 +0100 |
---|---|---|
committer | Alessio Treglia <alessio@debian.org> | 2012-02-16 11:06:56 +0100 |
commit | 1d323e54ee434609cf035598486075c9a918a2d3 (patch) | |
tree | 929ad92f19dfbb5492471449f1a6a918ea99c6b8 /src/core.cpp | |
parent | 99b53d44a60e3e934fc664152c115ae0d6e19920 (diff) |
Imported Upstream version 0.6.10
Diffstat (limited to 'src/core.cpp')
-rw-r--r-- | src/core.cpp | 135 |
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() { |