Version: 0.9.2, 0.9.3 (using KDE KDE 3.5.4) Installed from: Gentoo Packages Compiler: default-linux/x86/2006.1, gcc-4.1.1, glibc-2.4-r3, 2.6.17-gentoo-r7 i686 OS: Linux This probably is happening since the beginning of kmplayer. There are quite a lot of entries to mplayer that are hardcoded into the source code. We are forced to create a large patch each time you release a new version of kmplayer in order to fix that. We would like to ask you to fix mplayer from being used hardcoded inside kmplayer. The exact case is that on amd64 systems mplayer-bin is used as binary instead of mplayer. Fixing this will also improve the readability and maintenance of your source code. Hardcoded strings are rarely a nice solution. Below you can see the affected lines for version 0.9.3 (final): diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayerapp.cpp kmplayer-0.9.3/src/kmplayerapp.cpp --- kmplayer-0.9.3-orig/src/kmplayerapp.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayerapp.cpp 2006-09-20 21:57:12.000000000 +0200 @@ -425,9 +425,9 @@ connect (m_broadcastconfig, SIGNAL (broadcastStopped()), this, SLOT (broadcastStopped())); initStatusBar(); m_player->init (actionCollection ()); m_player->players () ["xvideo"] = new XVideo(m_player,m_player->settings()); - m_player->setProcess ("mplayer"); + m_player->setProcess (MPLAYER_BIN); m_player->setRecorder ("mencoder"); ListsSource * lstsrc = new ListsSource (m_player); m_player->sources () ["listssource"] = lstsrc; m_player->sources () ["dvdsource"] = new ::KMPlayerDVDSource(this, m_dvdmenu); @@ -1688,9 +1688,9 @@ return true; if (m_identified) return false; //kdDebug () << "scanning " << cstr << endl; - QRegExp * patterns = static_cast <KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns; + QRegExp * patterns = static_cast <KMPlayer::MPlayer *> (m_player->players () [MPLAYER_BIN])->configPage ()->m_patterns; QRegExp & langRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdlang]; QRegExp & subtitleRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdsub]; QRegExp & titleRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdtitle]; QRegExp & chapterRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdchapter]; @@ -1991,9 +1991,9 @@ return true; if (m_identified) return false; //kdDebug () << "scanning " << cstr << endl; - QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns; + QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () [MPLAYER_BIN])->configPage ()->m_patterns; QRegExp & trackRegExp = patterns [KMPlayer::MPlayerPreferencesPage::pat_vcdtrack]; if (trackRegExp.search (str) > -1) { m_document->state = KMPlayer::Element::state_deferred; m_document->appendChild (new KMPlayer::GenericMrl (m_document, QString ("vcd://") + trackRegExp.cap (1), i18n ("Track ") + trackRegExp.cap (1))); @@ -2089,9 +2089,9 @@ return true; if (m_identified) return false; //kdDebug () << "scanning " << str << endl; - QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns; + QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () [MPLAYER_BIN])->configPage ()->m_patterns; QRegExp & trackRegExp = patterns [KMPlayer::MPlayerPreferencesPage::pat_cdromtracks]; if (trackRegExp.search (str) > -1) { //if (m_document->state != KMPlayer::Element::state_deferred) // m_document->defer (); diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayerconfig.cpp kmplayer-0.9.3/src/kmplayerconfig.cpp --- kmplayer-0.9.3-orig/src/kmplayerconfig.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayerconfig.cpp 2006-09-20 21:57:54.000000000 +0200 @@ -127,9 +127,9 @@ // configdialog should be destroyed when the view is destroyed //delete configdialog; } -KDE_EXPORT const char * strMPlayerGroup = "MPlayer"; +KDE_EXPORT const char * strMPlayerGroup = MPLAYER_BIN; const char * strGeneralGroup = "General Options"; static const char * strKeepSizeRatio = "Keep Size Ratio"; static const char * strRememberSize = "Remember Size"; static const char * strAutoResize = "Auto Resize"; diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayer_def.h kmplayer-0.9.3/src/kmplayer_def.h --- kmplayer-0.9.3-orig/src/kmplayer_def.h 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayer_def.h 2006-09-20 21:58:47.000000000 +0200 @@ -55,6 +55,6 @@ #define KMPLAYER_EXPORT #define KMPLAYER_NO_EXPORT #endif - +#define MPLAYER_BIN "mplayer-bin" #endif //_KMPLAYER_DEF_H_ diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayerpartbase.cpp kmplayer-0.9.3/src/kmplayerpartbase.cpp --- kmplayer-0.9.3-orig/src/kmplayerpartbase.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayerpartbase.cpp 2006-09-20 21:59:49.000000000 +0200 @@ -121,9 +121,9 @@ m_auto_controls (true), m_bPosSliderPressed (false), m_in_update_tree (false) { - m_players ["mplayer"] = new MPlayer (this, m_settings); + m_players [MPLAYER_BIN] = new MPlayer (this, m_settings); Xine * xine = new Xine (this, m_settings); m_players ["xine"] = xine; m_players ["gstreamer"] = new GStreamer (this, m_settings); m_recorders ["mencoder"] = new MEncoder (this, m_settings); diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayer_part.cpp kmplayer-0.9.3/src/kmplayer_part.cpp --- kmplayer-0.9.3-orig/src/kmplayer_part.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayer_part.cpp 2006-09-20 22:00:13.000000000 +0200 @@ -317,9 +317,9 @@ } bool group_member = !m_group.isEmpty () && m_group != QString::fromLatin1("_unique") && m_features != Feat_Unknown; if (!group_member || m_features & Feat_Viewer) { // not part of a group or we're the viewer - setProcess ("mplayer"); + setProcess (MPLAYER_BIN); setRecorder ("mencoder"); connectPanel (m_view->controlPanel ()); if (m_features & Feat_StatusBar) { last_time_left = 0; @@ -337,9 +337,9 @@ i = std::find_if (++i, e, pred)) { // found viewer and control part, exchange players now KMPlayerPart * vp = (m_features & Feat_Viewer) ? this : *i; KMPlayerPart * cp = (m_features & Feat_Viewer) ? *i : this; - setProcess ("mplayer"); + setProcess (MPLAYER_BIN); cp->connectToPart (vp); } } else m_group.truncate (0); @@ -1074,9 +1074,9 @@ QTimer::singleShot (0, this, SLOT (finished ())); return; } init (); - m_player->setProcess ("mplayer"); + m_player->setProcess (MPLAYER_BIN); if (m_player->process ()->grabPicture (m_url, 0)) connect (m_player->process (), SIGNAL (grabReady (const QString &)), this, SLOT (grabReady (const QString &))); else { diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayerprocess.cpp kmplayer-0.9.3/src/kmplayerprocess.cpp --- kmplayer-0.9.3-orig/src/kmplayerprocess.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayerprocess.cpp 2006-09-20 22:02:59.000000000 +0200 @@ -349,9 +349,9 @@ "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource", "audiocdsource", 0L }; KDE_NO_CDTOR_EXPORT MPlayer::MPlayer (QObject * parent, Settings * settings) - : MPlayerBase (parent, settings, "mplayer"), + : MPlayerBase (parent, settings, MPLAYER_BIN), m_widget (0L), m_configpage (new MPlayerPreferencesPage (this)), aid (-1), sid (-1), m_needs_restarted (false) { @@ -520,9 +520,9 @@ *m_process << pipe << " | "; } QString exe = m_configpage->mplayer_path; if (exe.isEmpty ()) - exe = "mplayer"; + exe = MPLAYER_BIN; fprintf (stderr, "%s -wid %lu ", exe.ascii(), (unsigned long) widget ()); *m_process << exe << " -wid " << QString::number (widget ()); if (m_use_slave) { @@ -622,9 +622,9 @@ QString outdir = locateLocal ("data", "kmplayer/"); m_grabfile = outdir + QString ("00000001.jpg"); unlink (m_grabfile.ascii ()); QString myurl (url.isLocalFile () ? getPath (url) : url.url ()); - QString args ("mplayer "); + QString args ("mplayer-bin "); if (m_settings->mplayerpost090) args += "-vo jpeg:outdir="; else args += "-vo jpeg -jpeg outdir="; @@ -921,9 +921,9 @@ for (int i = 0; i < int (pat_last); i++) m_patterns[i].setPattern (config->readEntry (_mplayer_patterns[i].name, _mplayer_patterns[i].pattern)); config->setGroup (strMPlayerGroup); - mplayer_path = config->readEntry (strMPlayerPath, "mplayer"); + mplayer_path = config->readEntry (strMPlayerPath, MPLAYER_BIN); additionalarguments = config->readEntry (strAddArgs); cachesize = config->readNumEntry (strCacheSize, 384); alwaysbuildindex = config->readBoolEntry (strAlwaysBuildIndex, false); } @@ -952,9 +952,9 @@ KDE_NO_EXPORT void MPlayerPreferencesPage::prefLocation (QString & item, QString & icon, QString & tab) { item = i18n ("General Options"); icon = QString ("kmplayer"); - tab = i18n ("MPlayer"); + tab = i18n (MPLAYER_BIN); } KDE_NO_EXPORT QFrame * MPlayerPreferencesPage::prefPage (QWidget * parent) { m_configframe = new MPlayerPreferencesFrame (parent); @@ -1052,9 +1052,9 @@ QString args; m_use_slave = m_source->pipeCmd ().isEmpty (); if (!m_use_slave) args = m_source->pipeCmd () + QString (" | "); - args += QString ("mplayer ") + m_source->recordCmd (); + args += QString ("mplayer-bin ") + m_source->recordCmd (); // FIXME if (m_player->source () == source) // ugly // m_player->stop (); QString myurl = url.isLocalFile () ? getPath (url) : url.url (); bool post090 = m_settings->mplayerpost090; diff -U 4 -H -b -w -B -E -d -i -r kmplayer-0.9.3-orig/src/kmplayertvsource.cpp kmplayer-0.9.3/src/kmplayertvsource.cpp --- kmplayer-0.9.3-orig/src/kmplayertvsource.cpp 2006-09-20 21:51:19.000000000 +0200 +++ kmplayer-0.9.3/src/kmplayertvsource.cpp 2006-09-20 22:08:59.000000000 +0200 @@ -697,9 +697,9 @@ QString args; args.sprintf ("tv:// -tv driver=%s:device=%s -identify -frames 0", m_driver.ascii (), m_tvdevice->src.ascii ()); m_tvsource->player ()->stop (); m_tvsource->player ()->process ()->initProcess (m_player->settings ()->defaultView ()->viewer ()); - KMPlayer::Process *proc = m_tvsource->player ()->players () ["mplayer"]; + KMPlayer::Process *proc = m_tvsource->player ()->players () [MPLAYER_BIN]; proc->setSource (this); if (!static_cast <KMPlayer::MPlayer *> (proc)->run (args.ascii())) deactivate (); } Thank you for your time.
*** This bug has been confirmed by popular vote. ***
Have you tried the MPlayer config tab in kmplayer's configure dialog? As of this 0.9.3 release, you should be able to set MPlayer's binary name (and even it's complete path)
No further comments, so considered fixed.