Author: hobbes1069
Update of /cvs/free/rpms/mythtv/F-16
In directory old02.ovh.rpmfusion.lan:/tmp/cvs-serv2310
Modified Files:
mythbackend.init mythbackend.service mythtv-0.25-fixes.patch
mythtv.spec
Log Message:
* Wed Apr 18 2012 Richard Shaw <hobbes1069(a)gmail.com> - 0.25-2
- Update to latest fixes/0.25.
- Change --logfile to --logpath for init files.
- Obsolete mythvideo in spec file.
Index: mythbackend.init
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-16/mythbackend.init,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mythbackend.init 3 Mar 2011 02:45:10 -0000 1.1
+++ mythbackend.init 18 Apr 2012 20:44:54 -0000 1.2
@@ -22,7 +22,7 @@
binary=/usr/bin/mythbackend
prog=mythbackend
RETVAL=0
-OPTIONS="$OPTIONS --daemon --user ${MYTHBACKEND_USER} --logfile
/var/log/mythtv/$prog.log --pidfile /var/run/$prog.pid"
+OPTIONS="$OPTIONS --daemon --user ${MYTHBACKEND_USER} --logpath /var/log/mythtv
--pidfile /var/run/$prog.pid"
start() {
echo -n $"Starting $prog: "
Index: mythbackend.service
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-16/mythbackend.service,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- mythbackend.service 1 Mar 2012 14:32:51 -0000 1.4
+++ mythbackend.service 18 Apr 2012 20:44:54 -0000 1.5
@@ -39,7 +39,7 @@
Environment=MYTHCONFDIR=/etc/mythtv
Environment=HOME=/usr/share/mythtv
User=mythtv
-ExecStart=/usr/bin/mythbackend --logfile /var/log/mythtv/mythbackend.log
+ExecStart=/usr/bin/mythbackend --logpath /var/log/mythtv
[Install]
WantedBy=multi-user.target
mythtv-0.25-fixes.patch:
mythplugins/mytharchive/i18n/mytharchive_fi.qm |binary
mythplugins/mytharchive/i18n/mytharchive_fi.ts | 238
mythplugins/mythbrowser/i18n/mythbrowser_fi.qm |binary
mythplugins/mythbrowser/i18n/mythbrowser_fi.ts | 44
mythplugins/mythgallery/i18n/mythgallery_fi.qm |binary
mythplugins/mythgallery/i18n/mythgallery_fi.ts | 264
mythplugins/mythgame/i18n/mythgame_fi.qm |binary
mythplugins/mythgame/i18n/mythgame_fi.ts | 178
mythplugins/mythmusic/i18n/mythmusic_fi.qm |binary
mythplugins/mythmusic/i18n/mythmusic_fi.ts | 2219 +++++-
mythplugins/mythnetvision/i18n/mythnetvision_fi.qm |binary
mythplugins/mythnetvision/i18n/mythnetvision_fi.ts | 96
mythplugins/mythnetvision/mythnetvision/nettree.cpp | 8
mythplugins/mythnetvision/mythnetvision/rsseditor.cpp | 6
mythplugins/mythnews/i18n/mythnews_fi.qm |binary
mythplugins/mythnews/i18n/mythnews_fi.ts | 44
mythplugins/mythweather/i18n/mythweather_fi.qm |binary
mythplugins/mythweather/i18n/mythweather_fi.ts | 60
mythplugins/mythzoneminder/i18n/mythzoneminder_fi.qm |binary
mythplugins/mythzoneminder/i18n/mythzoneminder_fi.ts | 84
mythplugins/mythzoneminder/mythzmserver/zmserver.cpp | 3
mythtv/VERSION | 2
mythtv/bindings/python/MythTV/mythproto.py | 2
mythtv/bindings/python/MythTV/static.py | 2
mythtv/docs/doxygen-create-developer-docs.cfg | 2
mythtv/filters/yadif/filter_yadif.c | 2
mythtv/i18n/mythfrontend_fi.qm |binary
mythtv/i18n/mythfrontend_fi.ts | 3662 ++++++----
mythtv/i18n/mythfrontend_nb.qm |binary
mythtv/i18n/mythfrontend_nb.ts | 2
mythtv/libs/libmyth/audio/audiooutputbase.cpp | 11
mythtv/libs/libmyth/remoteutil.cpp | 16
mythtv/libs/libmyth/remoteutil.h | 1
mythtv/libs/libmyth/rssparse.h | 1
mythtv/libs/libmythbase/compat.h | 2
mythtv/libs/libmythbase/logging.cpp | 3
mythtv/libs/libmythprotoserver/requesthandler/deletethread.cpp | 6
mythtv/libs/libmythsoundtouch/STTypes.h | 2
mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro | 1
mythtv/libs/libmythtv/audioinput.h | 1
mythtv/libs/libmythtv/dvdringbuffer.cpp | 49
mythtv/libs/libmythtv/mythairplayserver.cpp | 2
mythtv/libs/libmythtv/mythraopdevice.cpp | 3
mythtv/libs/libmythtv/playercontext.h | 4
mythtv/libs/libmythtv/ringbuffer.cpp | 8
mythtv/libs/libmythtv/tv_play.cpp | 26
mythtv/libs/libmythtv/tvremoteutil.cpp | 55
mythtv/libs/libmythtv/tvremoteutil.h | 7
mythtv/libs/libmythtv/videoout_xv.cpp | 7
mythtv/libs/libmythtv/videoout_xv.h | 1
mythtv/libs/libmythtv/videooutbase.cpp | 28
mythtv/libs/libmythupnp/httprequest.cpp | 1
mythtv/programs/mythfrontend/guidegrid.cpp | 4
mythtv/programs/mythfrontend/scheduleeditor.cpp | 7
mythtv/programs/mythtranscode/transcode.h | 5
mythtv/programs/mythutil/markuputils.cpp | 4
56 files changed, 5278 insertions(+), 1895 deletions(-)
Index: mythtv-0.25-fixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-16/mythtv-0.25-fixes.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mythtv-0.25-fixes.patch 13 Apr 2012 21:18:34 -0000 1.1
+++ mythtv-0.25-fixes.patch 18 Apr 2012 20:44:54 -0000 1.2
@@ -10,6 +10,8 @@
mythplugins/mythmusic/i18n/mythmusic_fi.ts | 2219 ++++++++++--
mythplugins/mythnetvision/i18n/mythnetvision_fi.qm | Bin 10270 -> 11758 bytes
mythplugins/mythnetvision/i18n/mythnetvision_fi.ts | 96 +-
+ .../mythnetvision/mythnetvision/nettree.cpp | 8 +-
+ .../mythnetvision/mythnetvision/rsseditor.cpp | 6 -
mythplugins/mythnews/i18n/mythnews_fi.qm | Bin 4889 -> 4512 bytes
mythplugins/mythnews/i18n/mythnews_fi.ts | 44 +-
mythplugins/mythweather/i18n/mythweather_fi.qm | Bin 24061 -> 23685 bytes
@@ -18,17 +20,41 @@
.../mythzoneminder/i18n/mythzoneminder_fi.ts | 84 +-
.../mythzoneminder/mythzmserver/zmserver.cpp | 3 -
mythtv/VERSION | 2 +-
+ mythtv/bindings/python/MythTV/mythproto.py | 2 +-
+ mythtv/bindings/python/MythTV/static.py | 2 +-
mythtv/docs/doxygen-create-developer-docs.cfg | 2 +-
mythtv/filters/yadif/filter_yadif.c | 2 +-
mythtv/i18n/mythfrontend_fi.qm | Bin 532091 -> 613881 bytes
mythtv/i18n/mythfrontend_fi.ts | 3662 +++++++++++++-------
+ mythtv/i18n/mythfrontend_nb.qm | Bin 603663 -> 603587 bytes
+ mythtv/i18n/mythfrontend_nb.ts | 2 +-
+ mythtv/libs/libmyth/audio/audiooutputbase.cpp | 11 +-
+ mythtv/libs/libmyth/remoteutil.cpp | 16 -
+ mythtv/libs/libmyth/remoteutil.h | 1 -
mythtv/libs/libmyth/rssparse.h | 1 +
mythtv/libs/libmythbase/compat.h | 2 +
+ mythtv/libs/libmythbase/logging.cpp | 3 +-
+ .../requesthandler/deletethread.cpp | 6 +-
+ mythtv/libs/libmythsoundtouch/STTypes.h | 2 +-
+ .../libs/libmythsoundtouch/libmythsoundtouch.pro | 1 +
mythtv/libs/libmythtv/audioinput.h | 1 +
- mythtv/libs/libmythtv/tv_play.cpp | 4 +-
+ mythtv/libs/libmythtv/dvdringbuffer.cpp | 49 +-
+ mythtv/libs/libmythtv/mythairplayserver.cpp | 2 +-
+ mythtv/libs/libmythtv/mythraopdevice.cpp | 3 +-
+ mythtv/libs/libmythtv/playercontext.h | 4 +-
+ mythtv/libs/libmythtv/ringbuffer.cpp | 8 +-
+ mythtv/libs/libmythtv/tv_play.cpp | 26 +-
+ mythtv/libs/libmythtv/tvremoteutil.cpp | 55 +-
+ mythtv/libs/libmythtv/tvremoteutil.h | 7 +-
+ mythtv/libs/libmythtv/videoout_xv.cpp | 7 +-
+ mythtv/libs/libmythtv/videoout_xv.h | 1 +
+ mythtv/libs/libmythtv/videooutbase.cpp | 28 +-
+ mythtv/libs/libmythupnp/httprequest.cpp | 1 +
mythtv/programs/mythfrontend/guidegrid.cpp | 4 +-
+ mythtv/programs/mythfrontend/scheduleeditor.cpp | 7 +-
+ mythtv/programs/mythtranscode/transcode.h | 5 +-
mythtv/programs/mythutil/markuputils.cpp | 4 +-
- 30 files changed, 5131 insertions(+), 1783 deletions(-)
+ 56 files changed, 5278 insertions(+), 1895 deletions(-)
diff --git a/mythplugins/mytharchive/i18n/mytharchive_fi.qm
b/mythplugins/mytharchive/i18n/mytharchive_fi.qm
index 2fc0f91..8e2d841 100644
@@ -5009,6 +5035,49 @@
</message>
</context>
</TS>
+diff --git a/mythplugins/mythnetvision/mythnetvision/nettree.cpp
b/mythplugins/mythnetvision/mythnetvision/nettree.cpp
+index d07765f..49efc8b 100644
+--- a/mythplugins/mythnetvision/mythnetvision/nettree.cpp
++++ b/mythplugins/mythnetvision/mythnetvision/nettree.cpp
+@@ -472,7 +472,12 @@ void NetTree::showMenu(void)
+
+ ResultItem *item = NULL;
+ if (m_type == DLG_TREE)
+- item = qVariantValue<ResultItem
*>(m_siteMap->GetCurrentNode()->GetData());
++ {
++ MythGenericTree *node = m_siteMap->GetCurrentNode();
++
++ if (node)
++ item = qVariantValue<ResultItem *>(node->GetData());
++ }
+ else
+ {
+ MythGenericTree *node =
GetNodePtrFromButton(m_siteButtonList->GetItemCurrent());
+@@ -481,7 +486,6 @@ void NetTree::showMenu(void)
+ item = qVariantValue<ResultItem *>(node->GetData());
+ }
+
+-
+ if (item)
+ {
+ if (item->GetDownloadable())
+diff --git a/mythplugins/mythnetvision/mythnetvision/rsseditor.cpp
b/mythplugins/mythnetvision/mythnetvision/rsseditor.cpp
+index 93d87d2..3035816 100644
+--- a/mythplugins/mythnetvision/mythnetvision/rsseditor.cpp
++++ b/mythplugins/mythnetvision/mythnetvision/rsseditor.cpp
+@@ -223,12 +223,6 @@ void RSSEditPopup::slotSave(QNetworkReply* reply)
+ QString author = m_authorEdit->GetText();
+ QString file = m_thumbImage->GetFilename();
+
+- bool download;
+- if (m_download->GetCheckState() == MythUIStateType::Full)
+- download = true;
+- else
+- download = false;
+-
+ LOG(VB_GENERAL, LOG_DEBUG, QString("Text to Parse: %1").arg(text));
+
+ QDomElement root = document.documentElement();
diff --git a/mythplugins/mythnews/i18n/mythnews_fi.qm
b/mythplugins/mythnews/i18n/mythnews_fi.qm
index dbecb06..ba012fb 100644
Binary files a/mythplugins/mythnews/i18n/mythnews_fi.qm and
b/mythplugins/mythnews/i18n/mythnews_fi.qm differ
@@ -5466,6 +5535,32 @@
-SOURCE_VERSION="v0.25pre"
\ No newline at end of file
+SOURCE_VERSION="v0.25"
+diff --git a/mythtv/bindings/python/MythTV/mythproto.py
b/mythtv/bindings/python/MythTV/mythproto.py
+index 41a39e8..9a891cb 100644
+--- a/mythtv/bindings/python/MythTV/mythproto.py
++++ b/mythtv/bindings/python/MythTV/mythproto.py
+@@ -657,7 +657,7 @@ class FileOps( BECache ):
+
+ def getHash(self, file, sgroup, host=None):
+ """FileOps.getHash(file, storagegroup, host) -> hash
string"""
+- m = [file, sgroup]
++ m = ['QUERY_FILE_HASH', file, sgroup]
+ if host:
+ m.append(host)
+ return self.backendCommand(BACKEND_SEP.join(m))
+diff --git a/mythtv/bindings/python/MythTV/static.py
b/mythtv/bindings/python/MythTV/static.py
+index 6b587b2..f539706 100644
+--- a/mythtv/bindings/python/MythTV/static.py
++++ b/mythtv/bindings/python/MythTV/static.py
+@@ -4,7 +4,7 @@
+ Contains any static and global variables for MythTV Python Bindings
+ """
+
+-OWN_VERSION = (0,25,-1,3)
++OWN_VERSION = (0,25,0,1)
+ SCHEMA_VERSION = 1299
+ NVSCHEMA_VERSION = 1007
+ MUSICSCHEMA_VERSION = 1018
diff --git a/mythtv/docs/doxygen-create-developer-docs.cfg
b/mythtv/docs/doxygen-create-developer-docs.cfg
index f246d5a..ab9a6bd 100644
--- a/mythtv/docs/doxygen-create-developer-docs.cfg
@@ -12066,6 +12161,97 @@
</message>
</context>
<context>
+diff --git a/mythtv/i18n/mythfrontend_nb.qm b/mythtv/i18n/mythfrontend_nb.qm
+index f6eb6c7..e4f4fb5 100644
+Binary files a/mythtv/i18n/mythfrontend_nb.qm and b/mythtv/i18n/mythfrontend_nb.qm
differ
+diff --git a/mythtv/i18n/mythfrontend_nb.ts b/mythtv/i18n/mythfrontend_nb.ts
+index 46a3d9e..0e87bb7 100644
+--- a/mythtv/i18n/mythfrontend_nb.ts
++++ b/mythtv/i18n/mythfrontend_nb.ts
+@@ -23852,7 +23852,7 @@ Hvis du velger "Bruk standardavspiller" vil
avspillerkommandoen for en
+ <message>
+ <location filename="../themes/themestrings.h"
line="155"/>
+ <source>%DATE%, %TIME%</source>
+- <translation>%DATO%, %TID%</translation>
++ <translation>%DATE%, %TIME%</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h"
line="610"/>
+diff --git a/mythtv/libs/libmyth/audio/audiooutputbase.cpp
b/mythtv/libs/libmyth/audio/audiooutputbase.cpp
+index f6a7a36..370884b 100644
+--- a/mythtv/libs/libmyth/audio/audiooutputbase.cpp
++++ b/mythtv/libs/libmyth/audio/audiooutputbase.cpp
+@@ -103,7 +103,7 @@ AudioOutputBase::AudioOutputBase(const AudioSettings &settings)
:
+ src_out(NULL), kAudioSRCOutputSize(0),
+ memory_corruption_test2(0xdeadbeef),
+ memory_corruption_test3(0xdeadbeef),
+- m_configure_succeeded(true),m_length_last_data(0),
++ m_configure_succeeded(false),m_length_last_data(0),
+ m_spdifenc(NULL)
+ {
+ src_in = (float *)AOALIGN(src_in_buf);
+@@ -318,6 +318,12 @@ void AudioOutputBase::SetStretchFactorLocked(float lstretchfactor)
+ return;
+
+ stretchfactor = lstretchfactor;
++
++ int channels = needs_upmix || needs_downmix ?
++ configured_channels : source_channels;
++ if (channels < 1 || channels > 8)
++ return;
++
+ eff_stretchfactor = (int)(100000.0f * lstretchfactor + 0.5);
+ if (pSoundStretch)
+ {
+@@ -329,8 +335,7 @@ void AudioOutputBase::SetStretchFactorLocked(float lstretchfactor)
+ VBGENERAL(QString("Using time stretch %1").arg(stretchfactor));
+ pSoundStretch = new soundtouch::SoundTouch();
+ pSoundStretch->setSampleRate(samplerate);
+- pSoundStretch->setChannels(needs_upmix || needs_downmix ?
+- configured_channels : source_channels);
++ pSoundStretch->setChannels(channels);
+ pSoundStretch->setTempo(stretchfactor);
+ pSoundStretch->setSetting(SETTING_SEQUENCE_MS, 35);
+ /* If we weren't already processing we need to turn on float conversion
+diff --git a/mythtv/libs/libmyth/remoteutil.cpp b/mythtv/libs/libmyth/remoteutil.cpp
+index a326c5e..ca37630 100644
+--- a/mythtv/libs/libmyth/remoteutil.cpp
++++ b/mythtv/libs/libmyth/remoteutil.cpp
+@@ -208,22 +208,6 @@ vector<ProgramInfo *> *RemoteGetConflictList(const ProgramInfo
*pginfo)
+ return retlist;
+ }
+
+-vector<uint> RemoteRequestFreeRecorderList(void)
+-{
+- vector<uint> list;
+-
+- QStringList strlist("GET_FREE_RECORDER_LIST");
+-
+- if (!gCoreContext->SendReceiveStringList(strlist, true))
+- return list;
+-
+- QStringList::const_iterator it = strlist.begin();
+- for (; it != strlist.end(); ++it)
+- list.push_back((*it).toUInt());
+-
+- return list;
+-}
+-
+ QDateTime RemoteGetPreviewLastModified(const ProgramInfo *pginfo)
+ {
+ QDateTime retdatetime;
+diff --git a/mythtv/libs/libmyth/remoteutil.h b/mythtv/libs/libmyth/remoteutil.h
+index affd4ec..7acff6a 100644
+--- a/mythtv/libs/libmyth/remoteutil.h
++++ b/mythtv/libs/libmyth/remoteutil.h
+@@ -31,7 +31,6 @@ void RemoteGetAllExpiringRecordings(vector<ProgramInfo *>
&expiringlist);
+ MPUBLIC uint RemoteGetRecordingList(vector<ProgramInfo *> &reclist,
+ QStringList &strList);
+ MPUBLIC vector<ProgramInfo *> *RemoteGetConflictList(const ProgramInfo *pginfo);
+-MPUBLIC vector<uint> RemoteRequestFreeRecorderList(void);
+ MPUBLIC QDateTime RemoteGetPreviewLastModified(const ProgramInfo *pginfo);
+ MPUBLIC QDateTime RemoteGetPreviewIfModified(
+ const ProgramInfo &pginfo, const QString &cachefile);
diff --git a/mythtv/libs/libmyth/rssparse.h b/mythtv/libs/libmyth/rssparse.h
index 7408ac4..dfe1427 100644
--- a/mythtv/libs/libmyth/rssparse.h
@@ -12091,6 +12277,69 @@
#endif
#ifdef USING_MINGW
+diff --git a/mythtv/libs/libmythbase/logging.cpp b/mythtv/libs/libmythbase/logging.cpp
+index aaf2401..bc5004a 100644
+--- a/mythtv/libs/libmythbase/logging.cpp
++++ b/mythtv/libs/libmythbase/logging.cpp
+@@ -1297,7 +1297,8 @@ int syslogGetFacility(QString facility)
+ #else
+ CODE *name;
+ int i;
+- char *string = (char *)facility.toLocal8Bit().constData();
++ QByteArray ba = facility.toLocal8Bit();
++ char *string = (char *)ba.constData();
+
+ for (i = 0, name = &facilitynames[0];
+ name->c_name && strcmp(name->c_name, string); i++, name++);
+diff --git a/mythtv/libs/libmythprotoserver/requesthandler/deletethread.cpp
b/mythtv/libs/libmythprotoserver/requesthandler/deletethread.cpp
+index f5c8f27..e55fe14 100644
+--- a/mythtv/libs/libmythprotoserver/requesthandler/deletethread.cpp
++++ b/mythtv/libs/libmythprotoserver/requesthandler/deletethread.cpp
+@@ -105,7 +105,8 @@ void DeleteThread::ProcessNew(void)
+ // continue;
+
+ QString path = handler->m_path;
+- const char *cpath = handler->m_path.toLocal8Bit().constData();
++ QByteArray cpath_ba = handler->m_path.toLocal8Bit();
++ const char *cpath = cpath_ba.constData();
+
+ QFileInfo finfo(handler->m_path);
+ if (finfo.isSymLink())
+@@ -137,7 +138,8 @@ void DeleteThread::ProcessNew(void)
+ // an external directory with no link into mythtv
+ handler->DeleteSucceeded();
+ handler->m_path = tmppath;
+- cpath = handler->m_path.toLocal8Bit().constData();
++ cpath_ba = handler->m_path.toLocal8Bit();
++ cpath = cpath_ba.constData();
+ }
+ else
+ {
+diff --git a/mythtv/libs/libmythsoundtouch/STTypes.h
b/mythtv/libs/libmythsoundtouch/STTypes.h
+index 9812825..a8680d7 100644
+--- a/mythtv/libs/libmythsoundtouch/STTypes.h
++++ b/mythtv/libs/libmythsoundtouch/STTypes.h
+@@ -56,7 +56,7 @@ typedef unsigned long ulong;
+
+ #endif // _WINDEF_H
+
+- #define MULTICHANNEL 6
++ #define MULTICHANNEL 8
+
+ namespace soundtouch
+ {
+diff --git a/mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro
b/mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro
+index 2b88e61..3b681a8 100644
+--- a/mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro
++++ b/mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro
+@@ -18,6 +18,7 @@ HEADERS += cpu_detect.h
+ HEADERS += FIRFilter.h
+ HEADERS += RateTransposer.h
+ HEADERS += TDStretch.h
++HEADERS += STTypes.h
+
+ SOURCES += AAFilter.cpp
+ SOURCES += FIRFilter.cpp
diff --git a/mythtv/libs/libmythtv/audioinput.h b/mythtv/libs/libmythtv/audioinput.h
index 67f05d1..9155349 100644
--- a/mythtv/libs/libmythtv/audioinput.h
@@ -12103,8 +12352,174 @@
class AudioInput
{
+diff --git a/mythtv/libs/libmythtv/dvdringbuffer.cpp
b/mythtv/libs/libmythtv/dvdringbuffer.cpp
+index 5a445a0..3a0573a 100644
+--- a/mythtv/libs/libmythtv/dvdringbuffer.cpp
++++ b/mythtv/libs/libmythtv/dvdringbuffer.cpp
+@@ -352,8 +352,6 @@ bool DVDRingBuffer::OpenFile(const QString &lfilename, uint
retry_ms)
+ res = dvdnav_get_number_of_titles(m_dvdnav, &num_titles);
+ }
+
+- int start_title = 1;
+-
+ if (res == DVDNAV_STATUS_ERR)
+ {
+ LOG(VB_GENERAL, LOG_ERR,
+@@ -364,49 +362,9 @@ bool DVDRingBuffer::OpenFile(const QString &lfilename, uint
retry_ms)
+ LOG(VB_GENERAL, LOG_INFO,
+ LOC + QString("There are %1 titles on the disk")
+ .arg(num_titles));
++ }
+
+- // We do this once and chose the first title with a reasonanble length,
+- // cache the results for those we probe and probe the remainder as
+- // needed
+- if (!m_chapterMap.size())
+- {
+- for (int i = 1; i < num_titles + 1; i++)
+- {
+- uint64_t duration = GetChapterTimes(i);
+- if (duration < 1 || !m_chapterMap.contains(i))
+- continue;
+-
+- LOG(VB_GENERAL, LOG_INFO, LOC +
+- QString("Title %1: chapters %2 duration %3")
+- .arg(i).arg(m_chapterMap.value(i).size())
+- .arg(duration));
+-
+- if (duration > 60)
+- break;
+- }
+- }
+-
+- QMapIterator<uint, QList<uint64_t> > it(m_chapterMap);
+- uint64_t longest = 0;
+- while (it.hasNext())
+- {
+- it.next();
+- if (it.value().size())
+- {
+- uint title = it.key();
+- uint64_t last = it.value().last();
+- if (last > longest)
+- {
+- start_title = title;
+- longest = last;
+- }
+- }
+- }
+- }
+-
+- LOG(VB_GENERAL, LOG_INFO,
+- LOC + QString("Starting with title %1").arg(start_title));
+- dvdnav_title_play(m_dvdnav, start_title);
++ dvdnav_title_play(m_dvdnav, 1);
+
+ // Check we aren't starting in a still frame (which will probably fail as
+ // ffmpeg will be unable to create a decoder)
+@@ -424,6 +382,9 @@ bool DVDRingBuffer::OpenFile(const QString &lfilename, uint
retry_ms)
+ dvdnav_get_angle_info(m_dvdnav, &m_currentAngle,
&m_currentTitleAngleCount);
+ SetDVDSpeed();
+
++ // Populate the chapter list for this title, used in the OSD menu
++ GetChapterTimes(m_title);
++
+ LOG(VB_PLAYBACK, LOG_INFO, LOC +
+ QString("DVD Serial Number %1").arg(m_serialnumber));
+
+diff --git a/mythtv/libs/libmythtv/mythairplayserver.cpp
b/mythtv/libs/libmythtv/mythairplayserver.cpp
+index 9cea0b7..18aa13f 100644
+--- a/mythtv/libs/libmythtv/mythairplayserver.cpp
++++ b/mythtv/libs/libmythtv/mythairplayserver.cpp
+@@ -329,7 +329,7 @@ void MythAirplayServer::Start(void)
+ int baseport = m_setupPort;
+ while (m_setupPort < baseport + AIRPLAY_PORT_RANGE)
+ {
+- if (listen(m_setupPort))
++ if (listen(QNetworkInterface::allAddresses(), m_setupPort, false))
+ {
+ LOG(VB_GENERAL, LOG_INFO, LOC +
+ QString("Listening for connections on port %1")
+diff --git a/mythtv/libs/libmythtv/mythraopdevice.cpp
b/mythtv/libs/libmythtv/mythraopdevice.cpp
+index 82a6a61..887de97 100644
+--- a/mythtv/libs/libmythtv/mythraopdevice.cpp
++++ b/mythtv/libs/libmythtv/mythraopdevice.cpp
+@@ -1,6 +1,7 @@
+ #include <QTimer>
+ #include <QtEndian>
+ #include <QTcpSocket>
++#include <QNetworkInterface>
+
+ #include "mthread.h"
+ #include "mythlogging.h"
+@@ -131,7 +132,7 @@ void MythRAOPDevice::Start(void)
+ int baseport = m_setupPort;
+ while (m_setupPort < baseport + RAOP_PORT_RANGE)
+ {
+- if (listen(m_setupPort))
++ if (listen(QNetworkInterface::allAddresses(), m_setupPort, false))
+ {
+ LOG(VB_GENERAL, LOG_INFO, LOC +
+ QString("Listening for connections on port
%1").arg(m_setupPort));
+diff --git a/mythtv/libs/libmythtv/playercontext.h
b/mythtv/libs/libmythtv/playercontext.h
+index 5854de4..a4ce9f1 100644
+--- a/mythtv/libs/libmythtv/playercontext.h
++++ b/mythtv/libs/libmythtv/playercontext.h
+@@ -11,6 +11,7 @@ using namespace std;
+ #include <QMutex>
+ #include <QHash>
+ #include <QRect>
++#include <QObject>
+ #include "mythtvexp.h"
+ #include "mythdeque.h"
+ #include "tv.h"
+@@ -42,8 +43,9 @@ typedef enum
+ typedef deque<QString> StringDeque;
+ typedef QHash<QString,QString> InfoMap;
+
+-class MTV_PUBLIC PlayerContext
++class MTV_PUBLIC PlayerContext : public QObject
+ {
++ Q_OBJECT
+ public:
+ PlayerContext(const QString &inUseID = QString("Unknown"));
+ ~PlayerContext();
+diff --git a/mythtv/libs/libmythtv/ringbuffer.cpp b/mythtv/libs/libmythtv/ringbuffer.cpp
+index e3f0a5a..3883de2 100644
+--- a/mythtv/libs/libmythtv/ringbuffer.cpp
++++ b/mythtv/libs/libmythtv/ringbuffer.cpp
+@@ -724,6 +724,7 @@ void RingBuffer::run(void)
+ struct timeval lastread, now;
+ int readtimeavg = 300;
+ bool ignore_for_read_timing = true;
++ bool did_set_oldfile = false;
+
+ gettimeofday(&lastread, NULL); // this is just to keep gcc happy
+
+@@ -842,8 +843,12 @@ void RingBuffer::run(void)
+ "Reading enough data to start playback");
+ }
+
+- if (remotefile && livetvchain && livetvchain->HasNext())
++ if (!did_set_oldfile && remotefile && livetvchain
&&
++ livetvchain->HasNext())
++ {
+ remotefile->SetTimeout(true);
++ did_set_oldfile = true;
++ }
+
+ LOG(VB_FILE, LOG_DEBUG, LOC +
+ QString("safe_read(...@%1, %2) -- begin")
+@@ -917,6 +922,7 @@ void RingBuffer::run(void)
+ {
+ livetvchain->SwitchToNext(true);
+ setswitchtonext = true;
++ did_set_oldfile = false;
+ }
+ }
+ else
diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
-index d1133c5..badcb03 100644
+index d1133c5..912b46f 100644
--- a/mythtv/libs/libmythtv/tv_play.cpp
+++ b/mythtv/libs/libmythtv/tv_play.cpp
@@ -456,7 +456,7 @@ bool TV::StartTV(ProgramInfo *tvrec, uint flags)
@@ -12116,7 +12531,47 @@
LOG(VB_PLAYBACK, LOG_INFO, LOC + "StartTV -- end");
-@@ -7066,7 +7066,7 @@ void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const
QString &chan)
+@@ -2172,7 +2172,9 @@ void TV::HandleStateChange(PlayerContext *mctx, PlayerContext
*ctx)
+ if (reclist.size())
+ {
+ RemoteEncoder *testrec = NULL;
+- testrec = RemoteRequestFreeRecorderFromList(reclist);
++ vector<uint> excluded_cardids;
++ testrec = RemoteRequestFreeRecorderFromList(reclist,
++ excluded_cardids);
+ if (testrec && testrec->IsValidRecorder())
+ {
+ ctx->SetRecorder(testrec);
+@@ -6366,13 +6368,11 @@ void TV::DoSkipCommercials(PlayerContext *ctx, int direction)
+ void TV::SwitchSource(PlayerContext *ctx, uint source_direction)
+ {
+ QMap<uint,InputInfo> sources;
+- vector<uint> cardids = RemoteRequestFreeRecorderList();
+ uint cardid = ctx->GetCardID();
+- cardids.push_back(cardid);
+- stable_sort(cardids.begin(), cardids.end());
+-
+ vector<uint> excluded_cardids;
+ excluded_cardids.push_back(cardid);
++ vector<uint> cardids = RemoteRequestFreeRecorderList(excluded_cardids);
++ stable_sort(cardids.begin(), cardids.end());
+
+ InfoMap info;
+ ctx->recorder->GetChannelInfo(info);
+@@ -6491,7 +6491,11 @@ void TV::SwitchCards(PlayerContext *ctx,
+ }
+
+ if (!reclist.empty())
+- testrec = RemoteRequestFreeRecorderFromList(reclist);
++ {
++ vector<uint> excluded_cardids;
++ excluded_cardids.push_back(ctx->GetCardID());
++ testrec = RemoteRequestFreeRecorderFromList(reclist, excluded_cardids);
++ }
+
+ if (testrec && testrec->IsValidRecorder())
+ {
+@@ -7066,7 +7070,7 @@ void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const
QString &chan)
bool getit = false;
if (ctx->recorder)
{
@@ -12125,6 +12580,220 @@
{
getit = true;
}
+@@ -7127,7 +7131,9 @@ void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const
QString &chan)
+ if (reclist.size())
+ {
+ RemoteEncoder *testrec = NULL;
+- testrec = RemoteRequestFreeRecorderFromList(reclist);
++ vector<uint> excluded_cardids;
++ excluded_cardids.push_back(ctx->GetCardID());
++ testrec = RemoteRequestFreeRecorderFromList(reclist, excluded_cardids);
+ if (!testrec || !testrec->IsValidRecorder())
+ {
+ ClearInputQueues(ctx, true);
+@@ -7838,7 +7844,7 @@ QSet<uint> TV::IsTunableOn(
+ excluded_cards.push_back(ctx->GetCardID());
+
+ uint sourceid = ChannelUtil::GetSourceIDForChannel(chanid);
+- vector<uint> connected = RemoteRequestFreeRecorderList();
++ vector<uint> connected = RemoteRequestFreeRecorderList(excluded_cards);
+ vector<uint> interesting = CardUtil::GetCardIDs(sourceid);
+
+ // filter disconnected cards
+diff --git a/mythtv/libs/libmythtv/tvremoteutil.cpp
b/mythtv/libs/libmythtv/tvremoteutil.cpp
+index d348d64..a73cc52 100644
+--- a/mythtv/libs/libmythtv/tvremoteutil.cpp
++++ b/mythtv/libs/libmythtv/tvremoteutil.cpp
+@@ -147,9 +147,48 @@ RemoteEncoder *RemoteRequestNextFreeRecorder(int curr)
+ /**
+ * Given a list of recorder numbers, return the first available.
+ */
+-RemoteEncoder *RemoteRequestFreeRecorderFromList(
+- const QStringList &qualifiedRecorders)
++vector<uint> RemoteRequestFreeRecorderList(const vector<uint>
&excluded_cardids)
+ {
++#if 0
++ vector<uint> list;
++
++ QStringList strlist("GET_FREE_RECORDER_LIST");
++
++ if (!gCoreContext->SendReceiveStringList(strlist, true))
++ return list;
++
++ QStringList::const_iterator it = strlist.begin();
++ for (; it != strlist.end(); ++it)
++ list.push_back((*it).toUInt());
++
++ return list;
++#endif
++ vector<uint> result;
++ vector<uint> cards = CardUtil::GetCardList();
++ for (uint i = 0; i < cards.size(); i++)
++ {
++ vector<InputInfo> inputs =
++ RemoteRequestFreeInputList(cards[i], excluded_cardids);
++ for (uint j = 0; j < inputs.size(); j++)
++ {
++ if (find(result.begin(),
++ result.end(),
++ inputs[j].cardid) == result.end())
++ result.push_back(inputs[j].cardid);
++ }
++ }
++ QString msg("RemoteRequestFreeRecorderList returned {");
++ for (uint k = 0; k < result.size(); k++)
++ msg += QString(" %1").arg(result[k]);
++ msg += "}";
++ LOG(VB_CHANNEL, LOG_INFO, msg);
++ return result;
++}
++
++RemoteEncoder *RemoteRequestFreeRecorderFromList
++(const QStringList &qualifiedRecorders, const vector<uint>
&excluded_cardids)
++{
++#if 0
+ QStringList strlist( "GET_FREE_RECORDER_LIST" );
+
+ if (!gCoreContext->SendReceiveStringList(strlist, true))
+@@ -169,6 +208,18 @@ RemoteEncoder *RemoteRequestFreeRecorderFromList(
+ }
+ // didn't find anything. just return NULL.
+ return NULL;
++#endif
++ vector<uint> freeRecorders =
++ RemoteRequestFreeRecorderList(excluded_cardids);
++ for (QStringList::const_iterator recIter = qualifiedRecorders.begin();
++ recIter != qualifiedRecorders.end(); ++recIter)
++ {
++ if (find(freeRecorders.begin(),
++ freeRecorders.end(),
++ (*recIter).toUInt()) != freeRecorders.end())
++ return RemoteGetExistingRecorder((*recIter).toInt());
++ }
++ return NULL;
+ }
+
+ RemoteEncoder *RemoteRequestRecorder(void)
+diff --git a/mythtv/libs/libmythtv/tvremoteutil.h b/mythtv/libs/libmythtv/tvremoteutil.h
+index b982e55..1a4af11 100644
+--- a/mythtv/libs/libmythtv/tvremoteutil.h
++++ b/mythtv/libs/libmythtv/tvremoteutil.h
+@@ -37,11 +37,12 @@ MTV_PUBLIC void RemoteStopRecording(const ProgramInfo *pginfo);
+ MTV_PUBLIC void RemoteCancelNextRecording(uint cardid, bool cancel);
+ MTV_PUBLIC RemoteEncoder *RemoteRequestRecorder(void);
+ MTV_PUBLIC RemoteEncoder *RemoteRequestNextFreeRecorder(int curr);
+-MTV_PUBLIC
+-RemoteEncoder *RemoteRequestFreeRecorderFromList(
+- const QStringList &qualifiedRecorders);
++MTV_PUBLIC RemoteEncoder *RemoteRequestFreeRecorderFromList
++(const QStringList &qualifiedRecorders, const vector<uint>
&excluded_cardids);
+ MTV_PUBLIC RemoteEncoder *RemoteGetExistingRecorder(const ProgramInfo *pginfo);
+ MTV_PUBLIC RemoteEncoder *RemoteGetExistingRecorder(int recordernum);
++MTV_PUBLIC vector<uint>
++RemoteRequestFreeRecorderList(const vector<uint> &excluded_cardids);
+ MTV_PUBLIC vector<InputInfo> RemoteRequestFreeInputList(
+ uint cardid, const vector<uint> &excluded_cardids);
+ MTV_PUBLIC InputInfo RemoteRequestBusyInputID(uint cardid);
+diff --git a/mythtv/libs/libmythtv/videoout_xv.cpp
b/mythtv/libs/libmythtv/videoout_xv.cpp
+index f2f5827..01e7580 100644
+--- a/mythtv/libs/libmythtv/videoout_xv.cpp
++++ b/mythtv/libs/libmythtv/videoout_xv.cpp
+@@ -147,6 +147,7 @@ VideoOutputXv::VideoOutputXv()
+ xv_port(-1), xv_hue_base(0),
+ xv_colorkey(0), xv_draw_colorkey(false),
+ xv_chroma(0), xv_set_defaults(false),
++ xv_use_picture_controls(true),
+
+ chroma_osd(NULL)
+ {
+@@ -610,6 +611,8 @@ bool VideoOutputXv::InitXVideo()
+ .arg(adaptor_name));
+
+ xv_hue_base = VideoOutput::CalcHueBase(adaptor_name);
++ xv_use_picture_controls =
++ adaptor_name != "Intel(R) Video Overlay";
+
+ bool foundimageformat = false;
+ int ids[] = { GUID_YV12_PLANAR, GUID_I420_PLANAR, GUID_IYUV_PLANAR, };
+@@ -854,7 +857,9 @@ bool VideoOutputXv::InitSetupBuffers(void)
+ if (xv_port && (VideoOutputSubType() >= XVideo))
+ save_port_attributes(xv_port);
+
+- InitPictureAttributes();
++ // Initialize the picture controls if we need to..
++ if (xv_use_picture_controls)
++ InitPictureAttributes();
+
+ return true;
+ }
+diff --git a/mythtv/libs/libmythtv/videoout_xv.h b/mythtv/libs/libmythtv/videoout_xv.h
+index 8ba0317..c8297f2 100644
+--- a/mythtv/libs/libmythtv/videoout_xv.h
++++ b/mythtv/libs/libmythtv/videoout_xv.h
+@@ -153,6 +153,7 @@ class VideoOutputXv : public VideoOutput
+ bool xv_set_defaults;
+ buffer_map_t xv_buffers;
+ bool xv_need_bobdeint_repaint;
++ bool xv_use_picture_controls;
+ QMap<PictureAttribute,int> xv_attribute_min;
+ QMap<PictureAttribute,int> xv_attribute_max;
+ QMap<PictureAttribute,int> xv_attribute_def;
+diff --git a/mythtv/libs/libmythtv/videooutbase.cpp
b/mythtv/libs/libmythtv/videooutbase.cpp
+index 59e4bb1..443570f 100644
+--- a/mythtv/libs/libmythtv/videooutbase.cpp
++++ b/mythtv/libs/libmythtv/videooutbase.cpp
+@@ -1829,18 +1829,32 @@ void VideoOutput::InitDisplayMeasurements(uint width, uint
height, bool resize)
+
+ int VideoOutput::CalcHueBase(const QString &adaptor_name)
+ {
++ int hue_adj = 50;
++
+ // XVideo adjustments
+ if ((adaptor_name == "ATI Radeon Video Overlay") ||
++ (adaptor_name == "XA G3D Textured Video") || /* ATI in VMWare*/
++ (adaptor_name == "Radeon Textured Video") || /* ATI */
++ (adaptor_name == "AMD Radeon AVIVO Video") || /* ATI */
+ (adaptor_name == "XV_SWOV" /* VIA 10K & 12K */) ||
+ (adaptor_name == "Savage Streams Engine" /* S3 Prosavage DDR-K */) ||
+- (adaptor_name == "SIS 300/315/330 series Video Overlay"))
++ (adaptor_name == "SIS 300/315/330 series Video Overlay") ||
++ adaptor_name.toLower().contains("xvba")) /* VAAPI */
+ {
+- return 50;
++ hue_adj = 50;
++ }
++ else if (adaptor_name.left(4) == "NV17") /* nVidia */
++ {
++ hue_adj = 0;
++ }
++ else
++ {
++ LOG(VB_GENERAL, LOG_INFO, LOC +
++ QString("CalcHueBase(%1): Unknown adaptor, hue may be wrong.")
++ .arg(adaptor_name));
++ LOG(VB_GENERAL, LOG_INFO, LOC +
++ "Please open a ticket if you need to adjust the hue.");
+ }
+
+- // VAAPI
+- if (adaptor_name.toLower().contains("xvba"))
+- return 50;
+-
+- return 0; //< nVidia normal
++ return hue_adj;
+ }
+diff --git a/mythtv/libs/libmythupnp/httprequest.cpp
b/mythtv/libs/libmythupnp/httprequest.cpp
+index e0a93cc..4885de3 100644
+--- a/mythtv/libs/libmythupnp/httprequest.cpp
++++ b/mythtv/libs/libmythupnp/httprequest.cpp
+@@ -62,6 +62,7 @@ static MIMETypes g_MIMETypes[] =
+ { "qjs" , "application/javascript" },
+ { "txt" , "text/plain" },
+ { "xml" , "text/xml" },
++ { "xslt", "text/xml" },
+ { "pdf" , "application/pdf" },
+ { "avi" , "video/avi" },
+ { "css" , "text/css" },
diff --git a/mythtv/programs/mythfrontend/guidegrid.cpp
b/mythtv/programs/mythfrontend/guidegrid.cpp
index 6dbf1aa..17d5fad 100644
--- a/mythtv/programs/mythfrontend/guidegrid.cpp
@@ -12143,6 +12812,49 @@
{
enter();
}
+diff --git a/mythtv/programs/mythfrontend/scheduleeditor.cpp
b/mythtv/programs/mythfrontend/scheduleeditor.cpp
+index 4f85c70..877371a 100644
+--- a/mythtv/programs/mythfrontend/scheduleeditor.cpp
++++ b/mythtv/programs/mythfrontend/scheduleeditor.cpp
+@@ -1476,12 +1476,7 @@ void MetadataOptions::PerformQuery()
+
+ void MetadataOptions::OnSearchListSelection(MetadataLookup *lookup)
+ {
+- if (!lookup)
+- return;
+-
+- m_lookup = lookup;
+-
+- m_metadataFactory->Lookup(lookup);
++ QueryComplete(lookup);
+ }
+
+ void MetadataOptions::OnImageSearchListSelection(ArtworkInfo info,
+diff --git a/mythtv/programs/mythtranscode/transcode.h
b/mythtv/programs/mythtranscode/transcode.h
+index a99a871..ce5b909 100644
+--- a/mythtv/programs/mythtranscode/transcode.h
++++ b/mythtv/programs/mythtranscode/transcode.h
+@@ -1,9 +1,10 @@
++#include <QPointer>
+ #include "recordingprofile.h"
+ #include "fifowriter.h"
+ #include "transcodedefs.h"
+ #include "programtypes.h"
++#include "playercontext.h"
+
+-class PlayerContext;
+ class ProgramInfo;
+ class NuppelVideoRecorder;
+ class MythPlayer;
+@@ -49,7 +50,7 @@ class Transcode : public QObject
+ int keyframedist;
+ NuppelVideoRecorder *nvr;
+ MythPlayer *player;
+- PlayerContext *player_ctx;
++ QPointer<PlayerContext> player_ctx;
+ RingBuffer *inRingBuffer;
+ RingBuffer *outRingBuffer;
+ FIFOWriter *fifow;
diff --git a/mythtv/programs/mythutil/markuputils.cpp
b/mythtv/programs/mythutil/markuputils.cpp
index 94fc136..fee2df3 100644
--- a/mythtv/programs/mythutil/markuputils.cpp
Index: mythtv.spec
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-16/mythtv.spec,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- mythtv.spec 13 Apr 2012 21:18:34 -0000 1.89
+++ mythtv.spec 18 Apr 2012 20:44:54 -0000 1.90
@@ -86,7 +86,7 @@
Release: 0.1.git.%{_gitrev}%{?dist}
#Release: 0.1.rc1%{?dist}
%else
-Release: 1%{?dist}
+Release: 2%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -143,7 +143,7 @@
Source1: MythTV-mythweb-v%{version}-0-%{githash3}.tar.gz
Patch0: mythtv-0.25-fixes.patch
-#Patch1: mythplugins-%{version}-fixes.patch
+#Patch1: mythweb-%{version}-fixes.patch
Patch2: mythtv_0.25_gcc_4.7.patch
Source10: PACKAGE-LICENSING
@@ -352,16 +352,15 @@
Requires: mythtv-frontend = %{version}-%{release}
Requires: mythtv-setup = %{version}-%{release}
Requires: perl-MythTV = %{version}-%{release}
+Requires: php-MythTV = %{version}-%{release}
Requires: python-MythTV = %{version}-%{release}
Requires: mythplugins = %{version}-%{release}
-
Requires: mysql-server >= 5, mysql >= 5
-# XMLTV is not yet packaged for rpmfusion
-#Requires: xmltv
+Requires: xmltv
# Generate the required mythtv-frontend-api version string here so we only
# have to do it once.
-%define mythfeapiver %(echo %{version} | awk -F. '{print $1 "." $2}')
+%global mythfeapiver %(echo %{version} | awk -F. '{print $1 "." $2}')
################################################################################
@@ -522,6 +521,8 @@
Provides: mythtv-frontend-api = %{mythfeapiver}
Obsoletes: mythcontrols < %{version}-%{release}
Provides: mythcontrols = %{version}-%{release}
+Obsoletes: mythvideo < %{version}-%{release}
+Provides: mythvideo = %{version}-%{release}
%description frontend
MythTV provides a unified graphical interface for recording and viewing
@@ -781,6 +782,7 @@
Requires: php >= 5.1
Requires: php-mysql
Requires: php-process
+Requires: php-MythTV
%description -n mythweb
The web interface to MythTV.
@@ -1175,7 +1177,7 @@
mkdir -p %{buildroot}%{_sysconfdir}/httpd/conf.d
cp %{SOURCE401} %{buildroot}%{_sysconfdir}/httpd/conf.d/
-# drop .htaccess file, settings handled in the above
+ # drop .htaccess file, settings handled in the above
rm -f %{buildroot}%{_datadir}/mythweb/data/.htaccess
popd
%endif
@@ -1498,6 +1500,11 @@
################################################################################
%changelog
+* Wed Apr 18 2012 Richard Shaw <hobbes1069(a)gmail.com> - 0.25-2
+- Update to latest fixes/0.25.
+- Change --logfile to --logpath for init files.
+- Obsolete mythvideo in spec file.
+
* Tue Mar 20 2012 Richard Shaw <hobbes1069(a)gmail.com> - 0.25-1
- Update to latest release 0.25.