diff options
author | Nathan Harris <nharris@eoimaging.com> | 2009-02-08 22:20:20 (GMT) |
---|---|---|
committer | Nathan Harris <nharris@eoimaging.com> | 2009-02-08 22:20:20 (GMT) |
commit | d2cbfc286c25f31f20433e9149a0e62c4aaf900f (patch) | |
tree | df940ae978797d62f346f465b91736b45d096649 /abs/core-testing/mythtv/trunk/mythtv | |
parent | 7ee47af1a90327ecdd7ff9d790f2022545366b55 (diff) | |
download | linhes_pkgbuild-d2cbfc286c25f31f20433e9149a0e62c4aaf900f.zip linhes_pkgbuild-d2cbfc286c25f31f20433e9149a0e62c4aaf900f.tar.gz linhes_pkgbuild-d2cbfc286c25f31f20433e9149a0e62c4aaf900f.tar.bz2 |
The new structure... does not work yet.
Diffstat (limited to 'abs/core-testing/mythtv/trunk/mythtv')
26 files changed, 3092 insertions, 0 deletions
diff --git a/abs/core-testing/mythtv/trunk/mythtv/DeviceReadBuffer-polltimeout.2.patch b/abs/core-testing/mythtv/trunk/mythtv/DeviceReadBuffer-polltimeout.2.patch new file mode 100644 index 0000000..5bb713f --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/DeviceReadBuffer-polltimeout.2.patch @@ -0,0 +1,219 @@ +Index: libs/libmythtv/DeviceReadBuffer.h +=================================================================== +--- libs/libmythtv/DeviceReadBuffer.h (revision 18515) ++++ libs/libmythtv/DeviceReadBuffer.h (working copy) +@@ -59,7 +59,7 @@ + void IncrReadPointer(uint len); + + bool HandlePausing(void); +- bool Poll(void) const; ++ bool Poll(void); + uint WaitForUnused(uint bytes_needed) const; + uint WaitForUsed (uint bytes_needed) const; + +Index: libs/libmythtv/DeviceReadBuffer.cpp +=================================================================== +--- libs/libmythtv/DeviceReadBuffer.cpp (revision 18515) ++++ libs/libmythtv/DeviceReadBuffer.cpp (working copy) +@@ -90,9 +90,14 @@ + + void DeviceReadBuffer::Start(void) + { +- lock.lock(); +- bool was_running = running; +- lock.unlock(); ++ bool was_running; ++ ++ { ++ QMutexLocker locker(&lock); ++ was_running = running; ++ error = false; ++ } ++ + if (was_running) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "Start(): Already running."); +@@ -104,6 +109,8 @@ + { + VERBOSE(VB_IMPORTANT, + LOC_ERR + QString("Start(): pthread_create failed.") + ENO); ++ ++ QMutexLocker locker(&lock); + error = true; + } + } +@@ -118,21 +125,25 @@ + used = 0; + readPtr = buffer; + writePtr = buffer; ++ ++ error = false; + } + + void DeviceReadBuffer::Stop(void) + { + bool was_running = IsRunning(); +- lock.lock(); +- run = false; +- lock.unlock(); + + if (!was_running) + { +- VERBOSE(VB_IMPORTANT, LOC_ERR + "Stop(): Not running."); ++ VERBOSE(VB_IMPORTANT, LOC + "Stop(): Not running."); + return; + } + ++ { ++ QMutexLocker locker(&lock); ++ run = false; ++ } ++ + pthread_join(thread, NULL); + } + +@@ -229,10 +240,11 @@ + { + uint errcnt = 0; + +- lock.lock(); +- run = true; +- running = true; +- lock.unlock(); ++ { ++ QMutexLocker locker(&lock); ++ run = true; ++ running = true; ++ } + + while (run) + { +@@ -248,6 +260,15 @@ + if (using_poll && !Poll()) + continue; + ++ { ++ QMutexLocker locker(&lock); ++ if (error) ++ { ++ VERBOSE(VB_RECORD, LOC + "fill_ringbuffer: error state"); ++ break; ++ } ++ } ++ + // Limit read size for faster return from read + size_t read_size = + min(dev_read_size, (size_t) WaitForUnused(TSPacket::SIZE)); +@@ -268,9 +289,10 @@ + } + } + +- lock.lock(); +- running = false; +- lock.unlock(); ++ { ++ QMutexLocker locker(&lock); ++ running = false; ++ } + } + + bool DeviceReadBuffer::HandlePausing(void) +@@ -293,7 +315,7 @@ + return true; + } + +-bool DeviceReadBuffer::Poll(void) const ++bool DeviceReadBuffer::Poll(void) + { + #ifdef USING_MINGW + #warning mingw DeviceReadBuffer::Poll +@@ -302,31 +324,53 @@ + return false; + #else + bool retval = true; +- while (true) ++ uint timeout_cnt = 0; ++ ++ for (;;) + { + struct pollfd polls; + polls.fd = _stream_fd; + polls.events = POLLIN; + polls.revents = 0; + +- int ret = poll(&polls, 1 /*number of polls*/, 10 /*msec*/); +- if (IsPauseRequested() || !IsOpen() || !run) ++ int ret = poll(&polls, 1 /*number of polls*/, 250 /*msec*/); ++ ++ if (polls.revents & (POLLERR | POLLHUP | POLLNVAL)) + { ++ VERBOSE(VB_IMPORTANT, LOC + "poll error"); ++ error = true; ++ return true; ++ } ++ ++ if (!run || !IsOpen() || IsPauseRequested()) ++ { + retval = false; + break; // are we supposed to pause, stop, etc. + } + + if (ret > 0) + break; // we have data to read :) +- if ((-1 == ret) && (EOVERFLOW == errno)) +- break; // we have an error to handle +- +- if ((-1 == ret) && ((EAGAIN == errno) || (EINTR == errno))) +- continue; // errors that tell you to try again +- if (ret == 0) +- continue; // timed out, try again +- +- usleep(2500); ++ if (ret < 0) ++ { ++ if ((EOVERFLOW == errno)) ++ break; // we have an error to handle ++ if ((EAGAIN == errno) || (EINTR == errno)) ++ continue; // errors that tell you to try again ++ usleep(2500); ++ } ++ else // ret == 0 ++ { ++ if (++timeout_cnt > 9) ++ { ++ VERBOSE(VB_RECORD, LOC_ERR + "Poll giving up"); ++ QMutexLocker locker(&lock); ++ error = true; ++ return true; ++ } ++ if (timeout_cnt % 2) ++ VERBOSE(VB_RECORD, LOC_ERR + QString("Poll timeout (%1)") ++ .arg(timeout_cnt)); ++ } + } + return retval; + #endif //!USING_MINGW +@@ -360,9 +404,9 @@ + + if (++errcnt > 5) + { +- lock.lock(); ++ QMutexLocker locker(&lock); ++ VERBOSE(VB_RECORD, LOC + "Too many errors."); + error = true; +- lock.unlock(); + return false; + } + +@@ -376,10 +420,8 @@ + VERBOSE(VB_IMPORTANT, LOC + + QString("End-Of-File? fd(%1)").arg(_stream_fd)); + +- lock.lock(); ++ QMutexLocker locker(&lock); + eof = true; +- lock.unlock(); +- + return false; + } + usleep(500); diff --git a/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD b/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD new file mode 100755 index 0000000..d5560bd --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD @@ -0,0 +1,76 @@ +pkgname=mythtv-svn +pkgver=19295 +pkgrel=1 +pkgdesc="A personal video recorder for Linux" +url="http://www.mythtv.org" +license="GPL" +depends=('lame' 'libmysqlclient' 'alsa-lib' 'wget' 'qt' 'x-server' 'freetype2' 'libmpeg2' 'libxml2' 'libraw1394' 'lirc' 'perl-date-manip' 'libavc1394' 'libdc1394' 'libiec61883') +makedepends=('subversion') +conflicts=(mythtv) +replaces=() +backup=() +options=(!strip) +MAKEFLAGS="-j6" +install='mythtv.install' + +patchs=('svn_main_menu_popup.patch' 'smolt_jump.patch' 'DeviceReadBuffer-polltimeout.2.patch' 'mpegrecorder-hdpvr-v2a.patch' 'hdpvr-livetv.patch') +source=('mythbackend' 'myth.sh' `echo ${patchs[@]:0}` ) +arch=('i686') +md5sums=() + +_svntrunk=http://cvs.mythtv.org/svn/trunk/mythtv +_svnmod=mythtv + +build() { + +# svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod + svn co $_svntrunk $_svnmod + cd $startdir/src/mythtv + + echo "--------------------------applying patches----------------------------------------------------" + for i in `echo ${patchs[@]:0} ` + do + echo applying $i + echo "-----------------------------" + patch -Np0 -i ${startdir}/src/$i #|| return 1 + done + echo "--------------------------done applying patches-----------------------------------------------" + + sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgver/" version.pro + make distclean + + # configure + ./configure --prefix=/usr --cpu=${ARCH} \ + --enable-vdpau --enable-xvmc --enable-xvmc-pro \ + --enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \ + --compile-type=release --with-bindings=perl,python \ + --enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1 + + # build and install + . /etc/profile + make || return 1 + make INSTALL_ROOT=$startdir/pkg install || return 1 + + # install db schema, scripts and docs + install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1 + install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1 + cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1 + # cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ || return 1 + + # install contrib + mkdir -p $startdir/pkg/usr/share/mythtv/contrib || return 1 + install -m0755 contrib/* $startdir/pkg/usr/share/mythtv/contrib + + # patch the xml LinHES style + cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv + cd $startdir/pkg/usr/share/mythtv + patch -p0 < $startdir/menu-xml/mainmenu.xml.patch + patch -p0 < $startdir/menu-xml/optical_menu.xml.patch + patch -p0 < $startdir/menu-xml/library.xml.patch + patch -p0 < $startdir/menu-xml/util_menu.xml.patch + + # make log dir + mkdir -p $startdir/pkg/var/log/mythtv + chown 1000.1000 $startdir/pkg/var/log/mythtv + +} diff --git a/abs/core-testing/mythtv/trunk/mythtv/aacdecoder.cpp.patch b/abs/core-testing/mythtv/trunk/mythtv/aacdecoder.cpp.patch new file mode 100644 index 0000000..8796eb4 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/aacdecoder.cpp.patch @@ -0,0 +1,12 @@ +--- mythmusic/mythmusic/aacdecoder.cpp.orig 2008-11-19 12:51:48.000000000 -0500 ++++ mythmusic/mythmusic/aacdecoder.cpp 2008-11-19 12:52:42.000000000 -0500 +@@ -17,6 +17,9 @@ + #define FAAD_MODIFIED + #endif + ++// LinHES need this undefined ++#undef FAAD_MODIFIED ++ + // ANSI C headers + #include <cstdlib> + diff --git a/abs/core-testing/mythtv/trunk/mythtv/compile_mythtv.sh b/abs/core-testing/mythtv/trunk/mythtv/compile_mythtv.sh new file mode 100755 index 0000000..ca457e3 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/compile_mythtv.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# compile_mythtv.sh +# rev 0.5 - 1Nov2008 +# +# This script will compile and install MythTV +# + +PKG_MAINTAINER=nharris@eoimaging.com +echo PKG_MAINTAINER is set to $PKG_MAINTAINER + +PKG_VER=0.22-svn`date +%Y%m%d` +echo PKG_VER is set to $PKG_VER + +cd src/mythtv-trunk + +# +# compile mythtv +# +echo Compiling mythtv +cd mythtv +export QTDIR=/usr/share/qt +./configure --enable-opengl-vsync --cpu=i686 --enable-vdpau --enable-opengl-vsync --enable-libfaad --prefix=/usr +#./configure --cpu=i686 --enable-dvb --enable-xvmc --enable-opengl-vsync --enable-xvmc-pro --enable-libfaad --prefix=/usr +qmake mythtv.pro +make || return 1 + +# +# install mythtv +# +#echo "MythTV 0.22 SVN build" > description-pak +#checkinstall -D --default --pkgname mythtv --pkgversion $PKG_VER --maintainer $PKG_MAINTAINER +#mv myth*.deb ../.. +sudo make install +cd .. + +# +# compile mythplugins +# +echo Compiling mythplugings +cd mythplugins +./configure --enable-all --cpu=i686 --prefix=/usr +qmake mythplugins.pro +make || return 1 + +# +# install mythplugins +# +#echo "MythTV 0.22 SVN build" > description-pak +#checkinstall -D --default --pkgname mythplugins --pkgversion $PKG_VER --maintainer $PKG_MAINTAINER +#mv myth*.deb ../.. +sudo make install +cd .. + +# +# compile myththemes +# +echo Compiling myththemes +cd myththemes +./configure --prefix=/usr +qmake myththemes.pro +make || return 1 + +# +# install myththemes +# +#echo "MythTV 0.22 SVN build" > description-pak +#checkinstall -D --default --pkgname myththemes --pkgversion $PKG_VER --maintainer $PKG_MAINTAINER +#mv myth*.deb ../.. +sudo make install +cd .. + +# +# compile additional themes +# +echo Compiling additional themes +cd themes +./configure --prefix=/usr +qmake themes.pro +make || return 1 + +# +# install additional themes +# +#echo "MythTV 0.22 SVN build" > description-pak +#checkinstall -D --default --pkgname mythtv-themes --pkgversion $PKG_VER --maintainer $PKG_MAINTAINER +#mv myth*.deb ../.. +sudo make install +cd .. + +# +# update mythweb +# +cd mythplugins/mythweb +sudo cp -R * /data/srv/httpd/htdocs/mythweb +sudo chown -R http:users /data/srv/httpd/htdocs/mythweb +cd ../.. + +echo "DONE!" + diff --git a/abs/core-testing/mythtv/trunk/mythtv/get_mythtv.sh b/abs/core-testing/mythtv/trunk/mythtv/get_mythtv.sh new file mode 100755 index 0000000..c01ccf1 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/get_mythtv.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# get_mythtv.sh +# rev 0.5 - 1Nov2008 +BUILD_DIR=/home/nharris/mythtv + +cd $BUILD_DIR + +# +# get the latest from SVN +# +if [ -d src ] +then + cd src +else + mkdir src + cd src +fi + +if [ -d mythtv-trunk ] +then + echo Updating mythtv from svn. + cd mythtv-trunk + cd mythtv + svn update + make clean + cd ../mythplugins + svn update + make clean + cd ../myththemes + svn update + make clean + cd ../themes + svn update + make clean + cd .. +else + echo Creating mythtv from svn. + mkdir mythtv-trunk + cd mythtv-trunk + svn co http://svn.mythtv.org/svn/trunk/mythtv + svn co http://svn.mythtv.org/svn/trunk/mythplugins + svn co http://svn.mythtv.org/svn/trunk/myththemes + svn co http://svn.mythtv.org/svn/trunk/themes +fi + +# +# install patches +# +MYTH_PATCHES=$BUILD_DIR/patches +cd $BUILD_DIR/src/mythtv-trunk/mythtv + +# HD-PVR support +patch -p0 < $MYTH_PATCHES/DeviceReadBuffer-polltimeout.2.patch +patch -p0 < $MYTH_PATCHES/mpegrecorder-hdpvr-v2a.patch +patch -p0 < $MYTH_PATCHES/hdpvr-livetv.patch + +# LinHES popup menu +patch -p0 < $MYTH_PATCHES/svn_main_menu_popup.patch + +# Arch build fix +cd $BUILD_DIR/src/mythtv-trunk/mythplugins +patch -p0 < $MYTH_PATCHES/aacdecoder.cpp.patch + +# Patch the xml LinHES style +MENU_DIR=$BUILD_DIR/menu-xml +MYTH_DIR=$BUILD_DIR/src/mythtv-trunk/mythtv/programs/mythfrontend +cp $MENU_DIR/*.xml $MYTH_DIR +cd $MYTH_DIR +patch -p0 < $MENU_DIR/mainmenu.xml.patch +patch -p0 < $MENU_DIR/optical_menu.xml.patch +patch -p0 < $MENU_DIR/library.xml.patch + +# +# END +# +cd $BUILD_DIR +echo "DONE!" diff --git a/abs/core-testing/mythtv/trunk/mythtv/hdpvr-livetv.patch b/abs/core-testing/mythtv/trunk/mythtv/hdpvr-livetv.patch new file mode 100644 index 0000000..6297ae1 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/hdpvr-livetv.patch @@ -0,0 +1,109 @@ +Index: libs/libmythtv/mpegrecorder.cpp +=================================================================== +--- libs/libmythtv/mpegrecorder.cpp.orig ++++ libs/libmythtv/mpegrecorder.cpp +@@ -1109,6 +1109,14 @@ void MpegRecorder::StartRecording(void) + + if (driver == "hdpvr") + { ++ if (curRecording->recgroup == "LiveTV") ++ { ++ // Don't bother checking resolution, always use best bitrate ++ int maxbitrate = std::max(high_mpeg4peakbitrate, ++ high_mpeg4avgbitrate); ++ SetBitrate(high_mpeg4avgbitrate, maxbitrate, "LiveTV"); ++ } ++ + int progNum = 1; + MPEGStreamData *sd = new MPEGStreamData(progNum, true); + sd->SetRecordingType(_recording_type); +@@ -1553,7 +1561,7 @@ bool MpegRecorder::StartEncoding(int fd) + memset(&command, 0, sizeof(struct v4l2_encoder_cmd)); + command.cmd = V4L2_ENC_CMD_START; + +- if (driver == "hdpvr") ++ if (driver == "hdpvr" && curRecording->recgroup != "LiveTV") + HandleResolutionChanges(); + + VERBOSE(VB_RECORD, LOC + "StartEncoding"); +@@ -1755,6 +1763,35 @@ bool MpegRecorder::WaitFor_HDPVR(void) + return false; + } + ++void MpegRecorder::SetBitrate(int bitrate, int maxbitrate, ++ const QString & reason) ++{ ++ if (maxbitrate == bitrate) ++ { ++ VERBOSE(VB_RECORD, LOC + QString("%1 bitrate %2 kbps CBR") ++ .arg(reason).arg(bitrate)); ++ } ++ else ++ { ++ VERBOSE(VB_RECORD, LOC + QString("%1 bitrate %2/%3 kbps VBR") ++ .arg(reason).arg(bitrate).arg(maxbitrate)); ++ } ++ ++ vector<struct v4l2_ext_control> ext_ctrls; ++ add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE_MODE, ++ (maxbitrate == bitrate) ? ++ V4L2_MPEG_VIDEO_BITRATE_MODE_CBR : ++ V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); ++ ++ add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE, ++ bitrate * 1000); ++ ++ add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, ++ maxbitrate * 1000); ++ ++ set_ctrls(readfd, ext_ctrls); ++} ++ + void MpegRecorder::HandleResolutionChanges(void) + { + VERBOSE(VB_RECORD, LOC + "Checking Resolution"); +@@ -1819,30 +1856,7 @@ void MpegRecorder::HandleResolutionChang + .arg(old_avg).arg(old_max)); + } + +- if (maxbitrate == bitrate) +- { +- VERBOSE(VB_RECORD, LOC + QString("New bitrate %1 kbps CBR") +- .arg(bitrate)); +- } +- else +- { +- VERBOSE(VB_RECORD, LOC + QString("New bitrate %1/%2 kbps VBR") +- .arg(bitrate).arg(maxbitrate)); +- } +- +- vector<struct v4l2_ext_control> ext_ctrls; +- add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE_MODE, +- (maxbitrate == bitrate) ? +- V4L2_MPEG_VIDEO_BITRATE_MODE_CBR : +- V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); +- +- add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE, +- bitrate * 1000); +- +- add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, +- maxbitrate * 1000); +- +- set_ctrls(readfd, ext_ctrls); +- ++ SetBitrate(bitrate, maxbitrate, "New"); + } + } ++ +Index: libs/libmythtv/mpegrecorder.h +=================================================================== +--- libs/libmythtv/mpegrecorder.h.orig ++++ libs/libmythtv/mpegrecorder.h +@@ -87,6 +87,7 @@ class MpegRecorder : public DTVRecorder, + void ResetForNewFile(void); + + bool WaitFor_HDPVR(void); ++ void SetBitrate(int bitrate, int maxbitrate, const QString & reason); + void HandleResolutionChanges(void); + + inline bool CheckCC(uint pid, uint cc); diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml new file mode 100755 index 0000000..f257920 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml @@ -0,0 +1,87 @@ +<mythmenu name="HOST_SETTINGS"> + + <button> + <type>MV_NETWORK_SETUP_MENU</type> + <text>Network Settings</text> + <action>EXEC mythinstall -s network </action> + </button> + + <button> + <type>MV_SYSTEM_SETUP_MENU</type> + <text>System type</text> + <action>EXEC mythinstall -s hostype </action> + </button> + + <button> + <type>MV_MISC_SETUP_MENU</type> + <text>Misc Settings</text> + <action>EXEC mythinstall -s misc </action> + </button> + + <button> + <type>MV_SOFTWARE_MENU</type> + <text>Software</text> + <action>EXEC mythinstall -s plugins </action> + </button> + + <button> + <type>MV_SHUTDOWN_SETUP_MENU</type> + <text>Shutdown settings</text> + <action>EXEC mythinstall -s sleep </action> + </button> + + +<button> + <type>MV_ADVANCED_X_SETUP_MENU</type> + <text>Display</text> + <action>EXEC mythinstall -s advancedX</action> +</button> + +<button> + <type>MV_ADVANCED_SETUP_MENU</type> + <text>Advanced settings</text> + <action>EXEC mythinstall -s advanced</action> +</button> + + +<button> + <type>MV_AUDIO_SETUP_MENU</type> + <text>Audio settings</text> + <action>EXEC mythinstall -s sound </action> +</button> + + +<button> + <type>MV_ACCESS_SETUP_MENU</type> + <text>Access</text> + <action>EXEC mythinstall -s accesscontrol </action> +</button> + +<button> + <type>MV_USER_SETUP_MENU</type> + <text>Password </text> + <action>EXEC mythinstall -s user </action> +</button> + +<button> + <type>MV_WEBACCESS_SETUP_MENU</type> + <text>Web security</text> + <action>EXEC mythinstall -s webuser </action> +</button> + + + + + <!-- + <button> + <type>SETUP_MENU</type> + <text>Settings profile manager</text> + <action>EXEC mythinstall -t </action> + + </button> + --> + + + + +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/is.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/is.xml new file mode 100755 index 0000000..88b7e6b --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/is.xml @@ -0,0 +1,3 @@ +<mythmenu name="Internet Steams"> + +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/library.xml.patch b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/library.xml.patch new file mode 100755 index 0000000..02df082 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/library.xml.patch @@ -0,0 +1,13 @@ +--- library.xml.orig 2008-08-31 03:27:59.000000000 +0000 ++++ library.xml 2009-01-26 15:04:16.000000000 +0000 +@@ -121,8 +121,8 @@ + <type>STREAM</type> + <text>Play online streams</text> + <text lang="HE">נגן מדיה מכוונת</text> +- <action>PLUGIN mythstream</action> +- <depends>mythstream</depends> ++ <text>Online Streams</text> ++ <action>MENU is.xml</action> + </button> + + <button> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/linhes.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/linhes.xml new file mode 100755 index 0000000..8bc929f --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/linhes.xml @@ -0,0 +1,54 @@ +<mythmenu name="LinHES"> + + <button> + <type>SETUP_GENERAL</type> + <text>MythTV Configuration</text> + <text lang="IT">Impostazioni</text> + <text lang="ES">Configuración</text> + <text lang="CA">Configurar</text> + <text lang="FR">paramètres</text> + <text lang="DE">Zubehör / Konfiguration</text> + <text lang="DK">Tilbehør/Indstillinger</text> + <text lang="IS">Uppsetning</text> + <text lang="NL">Configuratie</text> + <text lang="PT">Utensílios</text> + <text lang="SV">Verktyg / Inställningar</text> + <text lang="JA">設定</text> + <text lang="FI">Oheis/Asetukset</text> + <text lang="ZH_TW">工具/設定</text> + <text lang="SI">Nastavitve</text> + <text lang="ET">Utiliidid / sätted</text> + <text lang="NB">Verktøy/Oppsett</text> + <text lang="CZ">Pomůcky</text> + <text lang="RU">Утилиты / Настройки</text> + <text lang="AR">تضبيطات</text> + <text lang="PL">Narzędzia / ustawienia</text> + <text lang="HE">עזרים / הגדרות</text> + <alttext lang="DE">Verschiedenes</alttext> + <alttext lang="SV">Inställningar</alttext> + <alttext lang="ET">Sätted</alttext> + <alttext lang="RU">Настройки</alttext> + <alttext lang="AR">تضبيطات</alttext> + <action>MENU util_menu.xml</action> + </button> + + <button> + <type>LINHES_SETUP</type> + <text>LinHES Configuration</text> + <action>MENU HOST_SETTINGS.xml</action> + </button> + + <button> + <type>BACKUP</type> + <text>Backup LinHES</text> + <action>MENU mythbackup.xml</action> + </button> + + <button> + <type>RESTORE</type> + <text>Restore LinHES</text> + <action>MENU mythrestore.xml</action> + </button> + +</mythmenu> + diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch new file mode 100755 index 0000000..a299325 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch @@ -0,0 +1,39 @@ +--- mainmenu.xml.orig 2009-01-09 02:45:07.000000000 +0000 ++++ mainmenu.xml 2009-01-22 08:04:28.000000000 +0000 +@@ -158,34 +158,8 @@ + + <button> + <type>MENU_UTILITIES_SETUP</type> +- <text>Utilities / Setup</text> +- <text lang="IT">Impostazioni</text> +- <text lang="ES">Configuración</text> +- <text lang="CA">Configurar</text> +- <text lang="FR">paramètres</text> +- <text lang="DE">Zubehör / Konfiguration</text> +- <text lang="DK">Tilbehør/Indstillinger</text> +- <text lang="IS">Uppsetning</text> +- <text lang="NL">Configuratie</text> +- <text lang="PT">Utensílios</text> +- <text lang="SV">Verktyg / Inställningar</text> +- <text lang="JA">設定</text> +- <text lang="FI">Oheis/Asetukset</text> +- <text lang="ZH_TW">工具/設定</text> +- <text lang="SI">Nastavitve</text> +- <text lang="ET">Utiliidid / sätted</text> +- <text lang="NB">Verktøy/Oppsett</text> +- <text lang="CZ">Pomůcky</text> +- <text lang="RU">Утилиты / Настройки</text> +- <text lang="AR">تضبيطات</text> +- <text lang="PL">Narzędzia / ustawienia</text> +- <text lang="HE">עזרים / הגדרות</text> +- <alttext lang="DE">Verschiedenes</alttext> +- <alttext lang="SV">Inställningar</alttext> +- <alttext lang="ET">Sätted</alttext> +- <alttext lang="RU">Настройки</alttext> +- <alttext lang="AR">تضبيطات</alttext> +- <action>MENU util_menu.xml</action> ++ <text>Service Menu</text> ++ <action>MENU linhes.xml</action> + </button> + + <!-- <button> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythbackup.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythbackup.xml new file mode 100755 index 0000000..656860d --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythbackup.xml @@ -0,0 +1,20 @@ +<mythmenu name="LinHES"> + + <button> + <type>BACKUP</type> + <text>Do you wish to backup?</text> + <action>NONE</action> + </button> + + <button> + <type>BACKUP</type> + <text>Yes</text> + <action>EXEC sudo /usr/LH/bin/mythbackup</action> + </button> + + <button> + <type>BACKUP</type> + <text>No</text> + <action>MENU linhes.xml</action> + </button> +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythrestore.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythrestore.xml new file mode 100755 index 0000000..05cb0a7 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/mythrestore.xml @@ -0,0 +1,20 @@ +<mythmenu name="LinHES"> + + <button> + <type>RESTORE</type> + <text>Do you wish to restore?</text> + <action>NONE</action> + </button> + + <button> + <type>RESTORE</type> + <text>Yes</text> + <action>EXEC sudo /usr/LH/bin/mythrestore</action> + </button> + + <button> + <type>BACKUP</type> + <text>No</text> + <action>MENU linhes.xml</action> + </button> +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/optical_menu.xml.patch b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/optical_menu.xml.patch new file mode 100755 index 0000000..d1cb70c --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/optical_menu.xml.patch @@ -0,0 +1,15 @@ +--- optical_menu.xml.orig 2008-10-02 22:46:30.000000000 +0000 ++++ optical_menu.xml 2008-07-02 04:05:15.000000000 +0000 +@@ -129,6 +129,12 @@ + </button> + + <button> ++ <type>DVD_RIP</type> ++ <text>Import video files from DVD</text> ++ <action>EXEC /usr/LH/bin/importfiles.sh</action> ++ </button> ++ ++ <button> + <type>EJECT</type> + <text>Eject media</text> + <text lang="IT">Espelli Media</text> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/original/create_patch.sh b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/original/create_patch.sh new file mode 100755 index 0000000..34d8b8c --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/original/create_patch.sh @@ -0,0 +1,5 @@ +#!/bin/bash +for i in *.xml +do + diff -u $i.orig $i > ../$i.patch +done diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/setup.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/setup.xml new file mode 100755 index 0000000..f56bb6f --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/setup.xml @@ -0,0 +1,111 @@ +<mythmenu name="MAIN"> + + <button> + <type>SETUP_GENERAL</type> + <text>1. General</text> + <text lang="IT">1. Generale</text> + <text lang="PT">1. Geral</text> + <text lang="SV">1. Generellt</text> + <text lang="JA">1. 一般</text> + <text lang="DE">1. Allgemeines</text> + <text lang="FI">1. Yleiset</text> + <text lang="FR">1. Général</text> + <text lang="SI">1. Splošno</text> + <text lang="ET">1. Üldine</text> + <text lang="NB">1 Generelt</text> + <text lang="DK">1. Generelt</text> + <text lang="ES">1. General</text> + <text lang="CZ">1. Obecný</text> + <text lang="RU">1. Общие</text> + <action>GENERAL</action> + </button> + + <button> + <type>SETUP_CAPTURE_CARDS</type> + <text>2. Capture cards</text> + <text lang="IT">2. Schede di Acquisizione</text> + <text lang="PT">2. Placas de Captura</text> + <text lang="SV">2. TV-kort</text> + <text lang="JA">2. キャプチャカード</text> + <text lang="DE">2. TV-Karten</text> + <text lang="FI">2. TV-kortit</text> + <text lang="FR">2. Cartes d'acquisition</text> + <text lang="SI">2. Kartice za zajem</text> + <text lang="ET">2. TV-kaardid</text> + <text lang="NB">2 TV-kort</text> + <text lang="DK">2. TV-kort</text> + <text lang="ES">2. Capturadoras</text> + <text lang="CZ">2. Zachytávací karty</text> + <text lang="RU">2. Карты захвата</text> + <action>CAPTURE CARDS</action> + </button> + + <button> + <type>SETUP_VIDEO_SOURCES</type> + <text>3. Video sources</text> + <text lang="IT">3. Fonte Video</text> + <text lang="PT">3. Fontes de Vídeo</text> + <text lang="SV">3. Videokällor</text> + <text lang="JA">3. ビデオソース</text> + <text lang="DE">3. Videoquellen</text> + <text lang="FI">3. Kuvanlähteet</text> + <text lang="FR">3. Sources vidéo</text> + <text lang="SI">3. Video viri</text> + <text lang="ET">3. Videosisendid</text> + <text lang="NB">3 Videokilder</text> + <text lang="DK">3. Videokilder</text> + <text lang="ES">3. Fuentes de Vídeo</text> + <text lang="CZ">3. Zdroje obrazu</text> + <text lang="RU">3. Видео источники</text> + <action>VIDEO SOURCES</action> + </button> + + <button> + <type>SETUP_INPUT_CONNECTIONS</type> + <text>4. Input connections</text> + <text lang="IT">4. Connessioni di Ingresso</text> + <text lang="PT">4. Ligações de Entrada</text> + <text lang="SV">4. Anslutningar</text> + <text lang="JA">4. 入力とソースの接続</text> + <text lang="DE">4. Verknüpfungen</text> + <text lang="FI">4. Sisääntuloasetukset</text> + <text lang="FR">4. Entrées Vidéos</text> + <text lang="SI">4. Vhodne povezave</text> + <text lang="ET">4. Sisendite ühendused</text> + <text lang="NB">4 Inndata</text> + <text lang="DK">4. Indgange</text> + <text lang="ES">4. Conexiones</text> + <text lang="CZ">4. Připojení vstupů</text> + <text lang="RU">4. Соединение входов</text> + <action>CARD INPUTS</action> + </button> + + <button> + <type>SETUP_CHANNEL_EDITOR</type> + <text>5. Channel Editor</text> + <text lang="IT">5. Modifica Canali</text> + <text lang="SV">5. Kanaleditor</text> + <text lang="JA">5. チャンネル設定</text> + <text lang="DE">5. Sender bearbeiten</text> + <text lang="FI">5. Kanavanviritys</text> + <text lang="FR">5. Editeur de chaînes</text> + <text lang="SI">5. Urejanje kanalov</text> + <text lang="ET">5. Kanaliredaktor</text> + <text lang="NB">5 Kanalredigerer</text> + <text lang="DK">5. Kanal opsætning</text> + <text lang="ES">5. Editor Canales</text> + <text lang="CZ">5. Editor kanálů</text> + <text lang="RU">5. Редактор каналов</text> + <action>CHANNEL EDITOR</action> + </button> + + <button> + <type>SETUP_STORAGE_GROUPS</type> + <text>6. Storage Directories</text> + <text lang="IT">6. Cartelle</text> + <text lang="FI">Tallennusryhmät</text> + <text lang="SV">Lagringsgrupper</text> + <action>STORAGE GROUPS</action> + </button> + +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/siriusmenu.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/siriusmenu.xml new file mode 100755 index 0000000..e317b36 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/siriusmenu.xml @@ -0,0 +1,419 @@ +<mythmenu name="SIRIUS"> + <button> + <type>MUSIC</type> + <text>Sirius Hits 1</text> + <action>EXEC /usr/bin/cliSipie siriushits1</action> + </button> + <button> + <type>MUSIC</type> + <text>StarLite</text> + <action>EXEC /usr/bin/cliSipie starlite</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius Love</text> + <action>EXEC /usr/bin/cliSipie siriuslove</action> + </button> + <button> + <type>MUSIC</type> + <text>Movin EZ</text> + <action>EXEC /usr/bin/cliSipie movineasy</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius Gold</text> + <action>EXEC /usr/bin/cliSipie siriusgold</action> + </button> + <button> + <type>MUSIC</type> + <text>'60s Vibrations</text> + <action>EXEC /usr/bin/cliSipie 60svibrations</action> + </button> + <button> + <type>MUSIC</type> + <text>Totally '70s</text> + <action>EXEC /usr/bin/cliSipie totally70s</action> + </button> + <button> + <type>MUSIC</type> + <text>Big '80s</text> + <action>EXEC /usr/bin/cliSipie big80s</action> + </button> + <button> + <type>MUSIC</type> + <text>ThePulse</text> + <action>EXEC /usr/bin/cliSipie thepulse</action> + </button> + <button> + <type>MUSIC</type> + <text>Bridge</text> + <action>EXEC /usr/bin/cliSipie thebridge</action> + </button> + <button> + <type>MUSIC</type> + <text>BBC Radio 1</text> + <action>EXEC /usr/bin/cliSipie bbcradio1</action> + </button> + <button> + <type>MUSIC</type> + <text>Super Shuffle</text> + <action>EXEC /usr/bin/cliSipie supershuffle</action> + </button> + <button> + <type>MUSIC</type> + <text>Elvis Radio</text> + <action>EXEC /usr/bin/cliSipie elvisradio</action> + </button> + <button> + <type>MUSIC</type> + <text>Classic Vinyl</text> + <action>EXEC /usr/bin/cliSipie classicvinyl</action> + </button> + <button> + <type>MUSIC</type> + <text>Classic Rewind</text> + <action>EXEC /usr/bin/cliSipie classicrewind</action> + </button> + <button> + <type>MUSIC</type> + <text>TheVault</text> + <action>EXEC /usr/bin/cliSipie thevault</action> + </button> + <button> + <type>MUSIC</type> + <text>Jam_ON</text> + <action>EXEC /usr/bin/cliSipie jamon</action> + </button> + <button> + <type>MUSIC</type> + <text>Spectrum</text> + <action>EXEC /usr/bin/cliSipie thespectrum</action> + </button> + <button> + <type>MUSIC</type> + <text>BuzzSaw</text> + <action>EXEC /usr/bin/cliSipie buzzsaw</action> + </button> + <button> + <type>MUSIC</type> + <text>Octane</text> + <action>EXEC /usr/bin/cliSipie octane</action> + </button> + <button> + <type>MUSIC</type> + <text>Alt Nation</text> + <action>EXEC /usr/bin/cliSipie altnation</action> + </button> + <button> + <type>MUSIC</type> + <text>1st Wave</text> + <action>EXEC /usr/bin/cliSipie firstwave</action> + </button> + <button> + <type>MUSIC</type> + <text>Hair Nation</text> + <action>EXEC /usr/bin/cliSipie hairnation</action> + </button> + <button> + <type>MUSIC</type> + <text>'90s Alternative</text> + <action>EXEC /usr/bin/cliSipie 90salternative</action> + </button> + <button> + <type>MUSIC</type> + <text>Garage</text> + <action>EXEC /usr/bin/cliSipie undergroundgarage</action> + </button> + <button> + <type>MUSIC</type> + <text>Left of Center</text> + <action>EXEC /usr/bin/cliSipie leftofcenter</action> + </button> + <button> + <type>MUSIC</type> + <text>Hard Attack</text> + <action>EXEC /usr/bin/cliSipie hardattack</action> + </button> + <button> + <type>MUSIC</type> + <text>Faction</text> + <action>EXEC /usr/bin/cliSipie faction</action> + </button> + <button> + <type>MUSIC</type> + <text>Punk</text> + <action>EXEC /usr/bin/cliSipie punk</action> + </button> + <button> + <type>MUSIC</type> + <text>The Coffee House</text> + <action>EXEC /usr/bin/cliSipie coffeehouse</action> + </button> + <button> + <type>MUSIC</type> + <text>Margaritaville</text> + <action>EXEC /usr/bin/cliSipie radiomargaritaville</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius Disorder</text> + <action>EXEC /usr/bin/cliSipie siriusdisorder</action> + </button> + <button> + <type>MUSIC</type> + <text>Reggae</text> + <action>EXEC /usr/bin/cliSipie reggaerhythms</action> + </button> + <button> + <type>MUSIC</type> + <text>Area 33</text> + <action>EXEC /usr/bin/cliSipie area33</action> + </button> + <button> + <type>MUSIC</type> + <text>Boombox</text> + <action>EXEC /usr/bin/cliSipie boombox</action> + </button> + <button> + <type>MUSIC</type> + <text>Chill</text> + <action>EXEC /usr/bin/cliSipie chill</action> + </button> + <button> + <type>MUSIC</type> + <text>The Beat</text> + <action>EXEC /usr/bin/cliSipie thebeat</action> + </button> + <button> + <type>MUSIC</type> + <text>Strobe</text> + <action>EXEC /usr/bin/cliSipie thestrobe</action> + </button> + <button> + <type>MUSIC</type> + <text>Hip-Hop Nation</text> + <action>EXEC /usr/bin/cliSipie hiphopnation</action> + </button> + <button> + <type>MUSIC</type> + <text>BackSpin</text> + <action>EXEC /usr/bin/cliSipie backspin</action> + </button> + <button> + <type>MUSIC</type> + <text>Shade 45</text> + <action>EXEC /usr/bin/cliSipie shade45</action> + </button> + <button> + <type>MUSIC</type> + <text>Hot Jamz</text> + <action>EXEC /usr/bin/cliSipie hotjamz</action> + </button> + <button> + <type>MUSIC</type> + <text>Heart & Soul</text> + <action>EXEC /usr/bin/cliSipie heartandsoul</action> + </button> + <button> + <type>MUSIC</type> + <text>SoulTown</text> + <action>EXEC /usr/bin/cliSipie soultown</action> + </button> + <button> + <type>MUSIC</type> + <text>New Country</text> + <action>EXEC /usr/bin/cliSipie newcountry</action> + </button> + <button> + <type>MUSIC</type> + <text>Prime Country</text> + <action>EXEC /usr/bin/cliSipie primecountry</action> + </button> + <button> + <type>MUSIC</type> + <text>Roadhouse</text> + <action>EXEC /usr/bin/cliSipie theroadhouse</action> + </button> + <button> + <type>MUSIC</type> + <text>Outlaw Country</text> + <action>EXEC /usr/bin/cliSipie outlawcountry</action> + </button> + <button> + <type>MUSIC</type> + <text>Bluegrass</text> + <action>EXEC /usr/bin/cliSipie bluegrass</action> + </button> + <button> + <type>MUSIC</type> + <text>Spirit</text> + <action>EXEC /usr/bin/cliSipie spirit</action> + </button> + <button> + <type>MUSIC</type> + <text>Praise</text> + <action>EXEC /usr/bin/cliSipie praise</action> + </button> + <button> + <type>MUSIC</type> + <text>Planet Jazz</text> + <action>EXEC /usr/bin/cliSipie planetjazz</action> + </button> + <button> + <type>MUSIC</type> + <text>JazzCafe</text> + <action>EXEC /usr/bin/cliSipie jazzcafe</action> + </button> + <button> + <type>MUSIC</type> + <text>PureJazz</text> + <action>EXEC /usr/bin/cliSipie purejazz</action> + </button> + <button> + <type>MUSIC</type> + <text>Spa 73</text> + <action>EXEC /usr/bin/cliSipie spa73</action> + </button> + <button> + <type>MUSIC</type> + <text>Blues</text> + <action>EXEC /usr/bin/cliSipie siriusblues</action> + </button> + <button> + <type>MUSIC</type> + <text>Siriusly Sinatra</text> + <action>EXEC /usr/bin/cliSipie siriuslysinatra</action> + </button> + <button> + <type>MUSIC</type> + <text>Broadway's Best</text> + <action>EXEC /usr/bin/cliSipie broadwaysbest</action> + </button> + <button> + <type>MUSIC</type> + <text>Symphony Hall</text> + <action>EXEC /usr/bin/cliSipie symphonyhall</action> + </button> + <button> + <type>MUSIC</type> + <text>Met Opera Radio</text> + <action>EXEC /usr/bin/cliSipie metropolitanopera</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius Pops</text> + <action>EXEC /usr/bin/cliSipie siriuspops</action> + </button> + <button> + <type>MUSIC</type> + <text>Universo Latino</text> + <action>EXEC /usr/bin/cliSipie universolatino</action> + </button> + <button> + <type>MUSIC</type> + <text>Rumbon</text> + <action>EXEC /usr/bin/cliSipie rumbon</action> + </button> + <button> + <type>MUSIC</type> + <text>Martha Stewart</text> + <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius Stars</text> + <action>EXEC /usr/bin/cliSipie siriusstars</action> + </button> + <button> + <type>MUSIC</type> + <text>OutQ Gay Radio</text> + <action>EXEC /usr/bin/cliSipie siriusoutq</action> + </button> + <button> + <type>MUSIC</type> + <text>Patriot</text> + <action>EXEC /usr/bin/cliSipie siriuspatriot</action> + </button> + <button> + <type>MUSIC</type> + <text>Left</text> + <action>EXEC /usr/bin/cliSipie siriusleft</action> + </button> + <button> + <type>MUSIC</type> + <text>CNN</text> + <action>EXEC /usr/bin/cliSipie cnn</action> + </button> + <button> + <type>MUSIC</type> + <text>wrn</text> + <action>EXEC /usr/bin/cliSipie wrn</action> + </button> + <button> + <type>MUSIC</type> + <text>Blue Collar Comedy</text> + <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action> + </button> + <button> + <type>MUSIC</type> + <text>Raw Dog Comedy</text> + <action>EXEC /usr/bin/cliSipie rawdog</action> + </button> + <button> + <type>MUSIC</type> + <text>Laugh Break Comedy</text> + <action>EXEC /usr/bin/cliSipie laughbreak</action> + </button> + <button> + <type>MUSIC</type> + <text>thefoxxhole</text> + <action>EXEC /usr/bin/cliSipie thefoxxhole</action> + </button> + <button> + <type>MUSIC</type> + <text>lime</text> + <action>EXEC /usr/bin/cliSipie lime</action> + </button> + <button> + <type>MUSIC</type> + <text>Kids Stuff</text> + <action>EXEC /usr/bin/cliSipie kidsstuff</action> + </button> + <button> + <type>MUSIC</type> + <text>Catholic Channel</text> + <action>EXEC /usr/bin/cliSipie thecatholicchannel</action> + </button> + <button> + <type>MUSIC</type> + <text>EWTN</text> + <action>EXEC /usr/bin/cliSipie ewtnglobal</action> + </button> + <button> + <type>MUSIC</type> + <text>christiantalk</text> + <action>EXEC /usr/bin/cliSipie christiantalk</action> + </button> + <button> + <type>MUSIC</type> + <text>Sirius NFL Radio</text> + <action>EXEC /usr/bin/cliSipie siriusnflradio</action> + </button> + <button> + <type>MUSIC</type> + <text>Maxim Radio</text> + <action>EXEC /usr/bin/cliSipie maximradio</action> + </button> + <button> + <type>MUSIC</type> + <text>Cosmo Radio</text> + <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action> + </button> + <button> + <type>TV_DELETE</type> + <text>Stop Listening</text> + <action>EXEC /usr/bin/sipie_kill</action> + </button> + +</mythmenu> + diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/util_menu.xml.patch b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/util_menu.xml.patch new file mode 100755 index 0000000..26ac863 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/util_menu.xml.patch @@ -0,0 +1,17 @@ +--- util_menu.xml.orig 2009-01-09 02:45:07.000000000 +0000 ++++ util_menu.xml 2009-01-22 08:04:28.000000000 +0000 +@@ -76,7 +76,13 @@ + <action>PLUGIN mythcontrols</action> + <depends>mythcontrols</depends> + </button> +- ++ ++ <button> ++ <type>VIDEO_SCREENSHOOTER</type> ++ <text>Thumbnail Generator</text> ++ <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action> ++ </button> ++ + <button> + <type>SETUP_MENU</type> + <text>Setup</text> diff --git a/abs/core-testing/mythtv/trunk/mythtv/menu-xml/xmmenu.xml b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/xmmenu.xml new file mode 100755 index 0000000..6b26d11 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/menu-xml/xmmenu.xml @@ -0,0 +1,574 @@ +<!-- Current as of April 25, 2007 --> +<mythmenu name="XM"> + + <button> + <type>MUSIC</type> + <text>The '40s</text> + <action>EXEC /usr/bin/xamp kill 4</action> + </button> + + <button> + <type>MUSIC</type> + <text>The '50s</text> + <action>EXEC /usr/bin/xamp kill 5</action> + </button> + + <button> + <type>MUSIC</type> + <text>The '60s</text> + <action>EXEC /usr/bin/xamp kill 6</action> + </button> + + <button> + <type>MUSIC</type> + <text>The '70s</text> + <action>EXEC /usr/bin/xamp kill 7</action> + </button> + + <button> + <type>MUSIC</type> + <text>The '80s</text> + <action>EXEC /usr/bin/xamp kill 8</action> + </button> + + <button> + <type>MUSIC</type> + <text>The '90s</text> + <action>EXEC /usr/bin/xamp kill 9</action> + </button> + + <button> + <type>MUSIC</type> + <text>America</text> + <action>EXEC /usr/bin/xamp kill 10</action> + </button> + + <button> + <type>MUSIC</type> + <text>X Country</text> + <action>EXEC /usr/bin/xamp kill 12</action> + </button> + + <button> + <type>MUSIC</type> + <text>Willie's Place</text> + <action>EXEC /usr/bin/xamp kill 13</action> + </button> + + <button> + <type>MUSIC</type> + <text>Bluegrass Junction</text> + <action>EXEC /usr/bin/xamp kill 14</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Village</text> + <action>EXEC /usr/bin/xamp kill 15</action> + </button> + + <button> + <type>MUSIC</type> + <text>Highway 16</text> + <action>EXEC /usr/bin/xamp kill 16</action> + </button> + + <button> + <type>MUSIC</type> + <text>US Country</text> + <action>EXEC /usr/bin/xamp kill 17</action> + </button> + + <button> + <type>MUSIC</type> + <text>20 on 20</text> + <action>EXEC /usr/bin/xamp kill 20</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Heart</text> + <action>EXEC /usr/bin/xamp kill 23</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Blend</text> + <action>EXEC /usr/bin/xamp kill 25</action> + </button> + + <button> + <type>MUSIC</type> + <text>Flight 26</text> + <action>EXEC /usr/bin/xamp kill 26</action> + </button> + + <button> + <type>MUSIC</type> + <text>Cinemagic</text> + <action>EXEC /usr/bin/xamp kill 27</action> + </button> + + <button> + <type>MUSIC</type> + <text>On Broadway</text> + <action>EXEC /usr/bin/xamp kill 28</action> + </button> + + <button> + <type>MUSIC</type> + <text>U-Pop</text> + <action>EXEC /usr/bin/xamp kill 29</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Hitlist</text> + <action>EXEC /usr/bin/xamp kill 30</action> + </button> + + <button> + <type>MUSIC</type> + <text>Torch</text> + <action>EXEC /usr/bin/xamp kill 31</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Message</text> + <action>EXEC /usr/bin/xamp kill 32</action> + </button> + + <button> + <type>MUSIC</type> + <text>Spirit</text> + <action>EXEC /usr/bin/xamp kill 33</action> + </button> + + <button> + <type>MUSIC</type> + <text>enLighten</text> + <action>EXEC /usr/bin/xamp kill 34</action> + </button> + + <button> + <type>MUSIC</type> + <text>Deep Tracks</text> + <action>EXEC /usr/bin/xamp kill 40</action> + </button> + + <button> + <type>MUSIC</type> + <text>Boneyard</text> + <action>EXEC /usr/bin/xamp kill 41</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Liquid Metal</text> + <action>EXEC /usr/bin/xamp kill 42</action> + </button> + + <button> + <type>MUSIC</type> + <text>XMU</text> + <action>EXEC /usr/bin/xamp kill 43</action> + </button> + + <button> + <type>MUSIC</type> + <text>Fred</text> + <action>EXEC /usr/bin/xamp kill 44</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Cafe</text> + <action>EXEC /usr/bin/xamp kill 45</action> + </button> + + <button> + <type>MUSIC</type> + <text>Top Tracks</text> + <action>EXEC /usr/bin/xamp kill 46</action> + </button> + + <button> + <type>MUSIC</type> + <text>Ethel</text> + <action>EXEC /usr/bin/xamp kill 47</action> + </button> + + <button> + <type>MUSIC</type> + <text>Squizz</text> + <action>EXEC /usr/bin/xamp kill 48</action> + </button> + + <button> + <type>MUSIC</type> + <text>Big Tracks</text> + <action>EXEC /usr/bin/xamp kill 49</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Loft</text> + <action>EXEC /usr/bin/xamp kill 50</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Music Lab</text> + <action>EXEC /usr/bin/xamp kill 51</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Verge</text> + <action>EXEC /usr/bin/xamp kill 52</action> + </button> + + <button> + <type>MUSIC</type> + <text>Fungus</text> + <action>EXEC /usr/bin/xamp kill 53</action> + </button> + + <button> + <type>MUSIC</type> + <text>Lucy</text> + <action>EXEC /usr/bin/xamp kill 54</action> + </button> + + <button> + <type>MUSIC</type> + <text>Soul Street</text> + <action>EXEC /usr/bin/xamp kill 60</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Flow</text> + <action>EXEC /usr/bin/xamp kill 61</action> + </button> + + <button> + <type>MUSIC</type> + <text>Suite 62</text> + <action>EXEC /usr/bin/xamp kill 62</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Groove</text> + <action>EXEC /usr/bin/xamp kill 64</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Rhyme</text> + <action>EXEC /usr/bin/xamp kill 65</action> + </button> + + <button> + <type>MUSIC</type> + <text>RAW</text> + <action>EXEC /usr/bin/xamp kill 66</action> + </button> + + <button> + <type>MUSIC</type> + <text>The City</text> + <action>EXEC /usr/bin/xamp kill 67</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Heat</text> + <action>EXEC /usr/bin/xamp kill 68</action> + </button> + + <button> + <type>MUSIC</type> + <text>Real Jazz</text> + <action>EXEC /usr/bin/xamp kill 70</action> + </button> + + <button> + <type>MUSIC</type> + <text>Watercolors</text> + <action>EXEC /usr/bin/xamp kill 71</action> + </button> + + <button> + <type>MUSIC</type> + <text>Beyond Jazz</text> + <action>EXEC /usr/bin/xamp kill 72</action> + </button> + + <button> + <type>MUSIC</type> + <text>High Standards</text> + <action>EXEC /usr/bin/xamp kill 73</action> + </button> + + <button> + <type>MUSIC</type> + <text>Bluesville</text> + <action>EXEC /usr/bin/xamp kill 74</action> + </button> + + <button> + <type>MUSIC</type> + <text>Hear Music</text> + <action>EXEC /usr/bin/xamp kill 75</action> + </button> + + <button> + <type>MUSIC</type> + <text>Fine Tuning</text> + <action>EXEC /usr/bin/xamp kill 76</action> + </button> + + <button> + <type>MUSIC</type> + <text>Audio Visions</text> + <action>EXEC /usr/bin/xamp kill 77</action> + </button> + + <button> + <type>MUSIC</type> + <text>Escape</text> + <action>EXEC /usr/bin/xamp kill 78</action> + </button> + + <button> + <type>MUSIC</type> + <text>On The Rocks</text> + <action>EXEC /usr/bin/xamp kill 79</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Move</text> + <action>EXEC /usr/bin/xamp kill 80</action> + </button> + + <button> + <type>MUSIC</type> + <text>BPM</text> + <action>EXEC /usr/bin/xamp kill 81</action> + </button> + + <button> + <type>MUSIC</type> + <text>The System</text> + <action>EXEC /usr/bin/xamp kill 82</action> + </button> + + <button> + <type>MUSIC</type> + <text>Chrome</text> + <action>EXEC /usr/bin/xamp kill 83</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM-Chill</text> + <action>EXEC /usr/bin/xamp kill 84</action> + </button> + + <button> + <type>MUSIC</type> + <text>Fuego</text> + <action>EXEC /usr/bin/xamp kill 90</action> + </button> + + <button> + <type>MUSIC</type> + <text>Viva</text> + <action>EXEC /usr/bin/xamp kill 91</action> + </button> + + <button> + <type>MUSIC</type> + <text>Aguila</text> + <action>EXEC /usr/bin/xamp kill 92</action> + </button> + + <button> + <type>MUSIC</type> + <text>Caliente</text> + <action>EXEC /usr/bin/xamp kill 94</action> + </button> + + <button> + <type>MUSIC</type> + <text>Luna</text> + <action>EXEC /usr/bin/xamp kill 95</action> + </button> + + <button> + <type>MUSIC</type> + <text>Air Musique</text> + <action>EXEC /usr/bin/xamp kill 100</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Joint</text> + <action>EXEC /usr/bin/xamp kill 101</action> + </button> + + <button> + <type>MUSIC</type> + <text>Sur La Route</text> + <action>EXEC /usr/bin/xamp kill 102</action> + </button> + + <button> + <type>MUSIC</type> + <text>World Zone</text> + <action>EXEC /usr/bin/xamp kill 103</action> + </button> + + <button> + <type>MUSIC</type> + <text>Ngoma</text> + <action>EXEC /usr/bin/xamp kill 104</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Classics</text> + <action>EXEC /usr/bin/xamp kill 110</action> + </button> + + <button> + <type>MUSIC</type> + <text>Vox</text> + <action>EXEC /usr/bin/xamp kill 112</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Pops</text> + <action>EXEC /usr/bin/xamp kill 113</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Kids</text> + <action>EXEC /usr/bin/xamp kill 116</action> + </button> + + <button> + <type>MUSIC</type> + <text>Bob Edwards Show</text> + <action>EXEC /usr/bin/xamp kill 133</action> + </button> + + <button> + <type>MUSIC</type> + <text>XM Comedy</text> + <action>EXEC /usr/bin/xamp kill 150</action> + </button> + + <button> + <type>MUSIC</type> + <text>Laugh USA</text> + <action>EXEC /usr/bin/xamp kill 151</action> + </button> + + <button> + <type>MUSIC</type> + <text>Special X</text> + <action>EXEC /usr/bin/xamp kill 154</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Agenda</text> + <action>EXEC /usr/bin/xamp kill 134</action> + </button> + + <button> + <type>MUSIC</type> + <text>Oprah and Friends</text> + <action>EXEC /usr/bin/xamp kill 156</action> + </button> + + <button> + <type>MUSIC</type> + <text>The Virus</text> + <action>EXEC /usr/bin/xamp kill 202</action> + </button> + + <button> + <type>MUSIC</type> + <text>1 Hit Wonders</text> + <action>EXEC /usr/bin/xamp kill 300</action> + </button> + + <button> + <type>MUSIC</type> + <text>Metalcore</text> + <action>EXEC /usr/bin/xamp kill 301</action> + </button> + + <button> + <type>MUSIC</type> + <text>New Indie First</text> + <action>EXEC /usr/bin/xamp kill 302</action> + </button> + + <button> + <type>MUSIC</type> + <text>Late Night Mix</text> + <action>EXEC /usr/bin/xamp kill 303</action> + </button> + + <button> + <type>MUSIC</type> + <text>Sessions@AOL</text> + <action>EXEC /usr/bin/xamp kill 304</action> + </button> + + <button> + <type>MUSIC</type> + <text>Shuffle</text> + <action>EXEC /usr/bin/xamp kill 305</action> + </button> + + <button> + <type>MUSIC</type> + <text>New Rock First</text> + <action>EXEC /usr/bin/xamp kill 306</action> + </button> + + <button> + <type>MUSIC</type> + <text>New Country First</text> + <action>EXEC /usr/bin/xamp kill 307</action> + </button> + + <button> + <type>MUSIC</type> + <text>New Hip Hop First</text> + <action>EXEC /usr/bin/xamp kill 308</action> + </button> + + <button> + <type>MUSIC</type> + <text>New Pop First</text> + <action>EXEC /usr/bin/xamp kill 309</action> + </button> + + <button> + <type>TV_DELETE</type> + <text>Stop Listening</text> + <action>EXEC /usr/bin/xamp kill</action> + </button> + +</mythmenu> diff --git a/abs/core-testing/mythtv/trunk/mythtv/mpegrecorder-hdpvr-v2a.patch b/abs/core-testing/mythtv/trunk/mythtv/mpegrecorder-hdpvr-v2a.patch new file mode 100644 index 0000000..dbef933 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/mpegrecorder-hdpvr-v2a.patch @@ -0,0 +1,668 @@ +Index: libs/libmythtv/DeviceReadBuffer.cpp +=================================================================== +--- libs/libmythtv/DeviceReadBuffer.cpp.orig ++++ libs/libmythtv/DeviceReadBuffer.cpp +@@ -169,7 +169,17 @@ bool DeviceReadBuffer::IsPaused(void) co + return paused; + } + +-bool DeviceReadBuffer::WaitForUnpause(int timeout) ++bool DeviceReadBuffer::WaitForPaused(unsigned long timeout) ++{ ++ QMutexLocker locker(&lock); ++ ++ if (!paused) ++ pauseWait.wait(&lock, timeout); ++ ++ return paused; ++} ++ ++bool DeviceReadBuffer::WaitForUnpause(unsigned long timeout) + { + QMutexLocker locker(&lock); + +Index: libs/libmythtv/DeviceReadBuffer.h +=================================================================== +--- libs/libmythtv/DeviceReadBuffer.h.orig ++++ libs/libmythtv/DeviceReadBuffer.h +@@ -42,7 +42,8 @@ class DeviceReadBuffer + + void SetRequestPause(bool request); + bool IsPaused(void) const; +- bool WaitForUnpause(int timeout); ++ bool WaitForUnpause(unsigned long timeout); ++ bool WaitForPaused(unsigned long timeout); + + bool IsErrored(void) const { return error; } + bool IsEOF(void) const { return eof; } +Index: libs/libmythtv/mpegrecorder.cpp +=================================================================== +--- libs/libmythtv/mpegrecorder.cpp.orig ++++ libs/libmythtv/mpegrecorder.cpp +@@ -19,6 +19,7 @@ using namespace std; + #include <sys/stat.h> + #include <sys/ioctl.h> + #include <sys/time.h> ++#include <sys/poll.h> + + // avlib headers + extern "C" { +@@ -86,7 +87,7 @@ MpegRecorder::MpegRecorder(TVRec *rec) : + requires_special_pause(false), + // State + recording(false), encoding(false), +- needs_resolution(false), start_stop_encoding_lock(QMutex::Recursive), ++ start_stop_encoding_lock(QMutex::Recursive), + recording_wait_lock(), recording_wait(), + // Pausing state + cleartimeonpause(false), +@@ -493,12 +494,20 @@ bool MpegRecorder::OpenV4L2DeviceAsInput + + bool MpegRecorder::SetFormat(int chanfd) + { ++ uint idx; + struct v4l2_format vfmt; + bzero(&vfmt, sizeof(vfmt)); + + vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +- if (ioctl(chanfd, VIDIOC_G_FMT, &vfmt) < 0) ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_G_FMT, &vfmt) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 10) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "Error getting format" + ENO); + return false; +@@ -507,7 +516,14 @@ bool MpegRecorder::SetFormat(int chanfd) + vfmt.fmt.pix.width = width; + vfmt.fmt.pix.height = height; + +- if (ioctl(chanfd, VIDIOC_S_FMT, &vfmt) < 0) ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_S_FMT, &vfmt) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "Error setting format" + ENO); + return false; +@@ -519,9 +535,18 @@ bool MpegRecorder::SetFormat(int chanfd) + /// Set audio language mode + bool MpegRecorder::SetLanguageMode(int chanfd) + { ++ uint idx; + struct v4l2_tuner vt; + bzero(&vt, sizeof(struct v4l2_tuner)); +- if (ioctl(chanfd, VIDIOC_G_TUNER, &vt) < 0) ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_G_TUNER, &vt) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + "Unable to get audio mode" + ENO); + return false; +@@ -555,7 +580,14 @@ bool MpegRecorder::SetLanguageMode(int c + success = false; + } + +- if (ioctl(chanfd, VIDIOC_S_TUNER, &vt) < 0) ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_S_TUNER, &vt) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + "Unable to set audio mode" + ENO); + success = false; +@@ -567,9 +599,18 @@ bool MpegRecorder::SetLanguageMode(int c + bool MpegRecorder::SetRecordingVolume(int chanfd) + { + // Get volume min/max values ++ uint idx; + struct v4l2_queryctrl qctrl; + qctrl.id = V4L2_CID_AUDIO_VOLUME; +- if (ioctl(chanfd, VIDIOC_QUERYCTRL, &qctrl) < 0) ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_QUERYCTRL, &qctrl) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + "Unable to get recording volume parameters(max/min)" + ENO + +@@ -588,7 +629,14 @@ bool MpegRecorder::SetRecordingVolume(in + ctrl.id = V4L2_CID_AUDIO_VOLUME; + ctrl.value = ctrl_volume; + +- if (ioctl(chanfd, VIDIOC_S_CTRL, &ctrl) < 0) ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_S_CTRL, &ctrl) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + "Unable to set recording volume" + ENO + "\n\t\t\t" + +@@ -771,6 +819,7 @@ static void set_ctrls(int fd, vector<str + + for (uint i = 0; i < ext_ctrls.size(); i++) + { ++ uint idx; + struct v4l2_ext_controls ctrls; + bzero(&ctrls, sizeof(struct v4l2_ext_controls)); + +@@ -780,7 +829,14 @@ static void set_ctrls(int fd, vector<str + ctrls.count = 1; + ctrls.controls = &ext_ctrls[i]; + +- if (ioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls) < 0) ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + QMutexLocker locker(&control_description_lock); + VERBOSE(VB_IMPORTANT, QString("mpegrecorder.cpp:set_ctrls(): ") + +@@ -820,6 +876,30 @@ bool MpegRecorder::SetV4L2DeviceOptions( + { + maxbitrate = high_mpeg4peakbitrate; + bitrate = high_mpeg4avgbitrate; ++ ++ // query supported audio codecs and prefer AC3 ++ uint idx; ++ struct v4l2_queryctrl qctrl; ++ qctrl.id = V4L2_CID_MPEG_AUDIO_ENCODING; ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_QUERYCTRL, &qctrl) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) ++ { ++ VERBOSE(VB_IMPORTANT, LOC_WARN + ++ "Unable to get supported audio codecs." + ENO); ++ } ++ else ++ { ++ if (qctrl.minimum != qctrl.maximum) ++ add_ext_ctrl(ext_ctrls, V4L2_CID_MPEG_AUDIO_ENCODING, ++ qctrl.maximum); ++ } + } + maxbitrate = std::max(maxbitrate, bitrate); + +@@ -843,10 +923,19 @@ bool MpegRecorder::SetV4L2DeviceOptions( + int audioinput = audiodevice.toUInt(&ok); + if (ok) + { ++ uint idx; + struct v4l2_audio ain; + bzero(&ain, sizeof(ain)); + ain.index = audioinput; +- if (ioctl(chanfd, VIDIOC_ENUMAUDIO, &ain) < 0) ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_ENUMAUDIO, &ain) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + "Unable to get audio input."); +@@ -854,7 +943,15 @@ bool MpegRecorder::SetV4L2DeviceOptions( + else + { + ain.index = audioinput; +- if (ioctl(chanfd, VIDIOC_S_AUDIO, &ain) < 0) ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(chanfd, VIDIOC_S_AUDIO, &ain) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + "Unable to set audio input."); +@@ -1042,17 +1139,26 @@ void MpegRecorder::StartRecording(void) + if (deviceIsMpegFile) + elapsedTimer.start(); + else if (_device_read_buffer) +- _device_read_buffer->Start(); ++ { ++ VERBOSE(VB_RECORD, LOC + "Initial startup of recorder"); + +- needs_resolution = (driver == "hdpvr"); ++ if (StartEncoding(readfd)) ++ _device_read_buffer->Start(); ++ else ++ { ++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to start recording"); ++ recording = false; ++ QMutexLocker locker(&recording_wait_lock); ++ recording_wait.wakeAll(); ++ _error = true; ++ } ++ } + + QByteArray vdevice = videodevice.toAscii(); + while (encoding && !_error) + { + if (PauseAndWait(100)) + continue; +- +- HandleResolutionChanges(); + + if (deviceIsMpegFile) + { +@@ -1096,35 +1202,7 @@ void MpegRecorder::StartRecording(void) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "Device error detected"); + +- _device_read_buffer->Stop(); +- +- QMutexLocker locker(&start_stop_encoding_lock); +- +- StopEncoding(readfd); +- +- // Make sure the next things in the file are a PAT & PMT +- if (_stream_data->PATSingleProgram() && +- _stream_data->PMTSingleProgram()) +- { +- bool tmp = _wait_for_keyframe_option; +- _wait_for_keyframe_option = false; +- HandleSingleProgramPAT(_stream_data->PATSingleProgram()); +- HandleSingleProgramPMT(_stream_data->PMTSingleProgram()); +- _wait_for_keyframe_option = tmp; +- } +- +- if (StartEncoding(readfd)) +- { +- _device_read_buffer->Start(); +- } +- else +- { +- if (0 != close(readfd)) +- VERBOSE(VB_IMPORTANT, LOC_ERR + "Close error" + ENO); +- +- // Force card to be reopened on next iteration.. +- readfd = -1; +- } ++ RestartEncoding(); + } + else if (_device_read_buffer->IsEOF()) + { +@@ -1222,6 +1300,8 @@ void MpegRecorder::StartRecording(void) + } + } + ++ VERBOSE(VB_RECORD, LOC + "StartRecording finishing up"); ++ + if (_device_read_buffer) + { + if (_device_read_buffer->IsRunning()) +@@ -1230,6 +1310,7 @@ void MpegRecorder::StartRecording(void) + delete _device_read_buffer; + _device_read_buffer = NULL; + } ++ + StopEncoding(readfd); + + FinishRecording(); +@@ -1379,19 +1460,14 @@ bool MpegRecorder::PauseAndWait(int time + + if (!paused) + { ++ VERBOSE(VB_RECORD, LOC + "PauseAndWait pause"); ++ + if (_device_read_buffer) + { + QMutex drb_lock; + drb_lock.lock(); +- + _device_read_buffer->SetRequestPause(true); +- +- pauseWait.wait(&drb_lock, timeout); +- } +- else +- { +- paused = true; +- pauseWait.wakeAll(); ++ _device_read_buffer->WaitForPaused(4000); + } + + // Some drivers require streaming to be disabled before +@@ -1399,32 +1475,76 @@ bool MpegRecorder::PauseAndWait(int time + if (requires_special_pause) + StopEncoding(readfd); + ++ paused = true; ++ pauseWait.wakeAll(); ++ + if (tvrec) + tvrec->RecorderPaused(); + } + + unpauseWait.wait(&waitlock, timeout); + } +- if (!request_pause) ++ ++ if (!request_pause && paused) + { +- if (paused) ++ VERBOSE(VB_RECORD, LOC + "PauseAndWait unpause"); ++ ++ if (driver == "hdpvr") + { +- // Some drivers require streaming to be disabled before +- // an input switch and other channel format setting. +- if (requires_special_pause) +- StartEncoding(readfd); ++ m_h264_parser.Reset(); ++ _wait_for_keyframe_option = true; ++ _seen_sps = false; ++ } + +- if (_device_read_buffer) +- _device_read_buffer->SetRequestPause(false); ++ // Some drivers require streaming to be disabled before ++ // an input switch and other channel format setting. ++ if (requires_special_pause) ++ StartEncoding(readfd); ++ ++ if (_device_read_buffer) ++ _device_read_buffer->SetRequestPause(false); ++ ++ if (_stream_data) ++ _stream_data->Reset(_stream_data->DesiredProgram()); + +- if (_stream_data) +- _stream_data->Reset(_stream_data->DesiredProgram()); +- } + paused = false; + } ++ + return paused; + } + ++void MpegRecorder::RestartEncoding(void) ++{ ++ VERBOSE(VB_RECORD, LOC + "RestartEncoding"); ++ ++ _device_read_buffer->Stop(); ++ ++ QMutexLocker locker(&start_stop_encoding_lock); ++ ++ StopEncoding(readfd); ++ ++ // Make sure the next things in the file are a PAT & PMT ++ if (_stream_data->PATSingleProgram() && ++ _stream_data->PMTSingleProgram()) ++ { ++ _wait_for_keyframe_option = false; ++ HandleSingleProgramPAT(_stream_data->PATSingleProgram()); ++ HandleSingleProgramPMT(_stream_data->PMTSingleProgram()); ++ } ++ ++ if (StartEncoding(readfd)) ++ { ++ _device_read_buffer->Start(); ++ } ++ else ++ { ++ if (0 != close(readfd)) ++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Close error" + ENO); ++ ++ readfd = -1; ++ } ++} ++ + bool MpegRecorder::StartEncoding(int fd) + { + QMutexLocker locker(&start_stop_encoding_lock); +@@ -1433,13 +1553,22 @@ bool MpegRecorder::StartEncoding(int fd) + memset(&command, 0, sizeof(struct v4l2_encoder_cmd)); + command.cmd = V4L2_ENC_CMD_START; + ++ if (driver == "hdpvr") ++ HandleResolutionChanges(); ++ + VERBOSE(VB_RECORD, LOC + "StartEncoding"); +- needs_resolution = (driver == "hdpvr"); + +- for (int idx = 0; idx < 10; ++idx) ++ for (int idx = 0; idx < 20; ++idx) + { + if (ioctl(fd, VIDIOC_ENCODER_CMD, &command) == 0) + { ++ if (driver == "hdpvr") ++ { ++ m_h264_parser.Reset(); ++ _wait_for_keyframe_option = true; ++ _seen_sps = false; ++ } ++ + VERBOSE(VB_RECORD, LOC + "Encoding started"); + return true; + } +@@ -1450,7 +1579,7 @@ bool MpegRecorder::StartEncoding(int fd) + return false; + } + +- usleep(250 * 1000); ++ usleep(100 * 1000); + } + + VERBOSE(VB_IMPORTANT, LOC_ERR + "StartEncoding - giving up" + ENO); +@@ -1467,9 +1596,8 @@ bool MpegRecorder::StopEncoding(int fd) + + VERBOSE(VB_RECORD, LOC + "StopEncoding"); + +- for (int idx = 0; idx < 10; ++idx) ++ for (int idx = 0; idx < 20; ++idx) + { +- + if (ioctl(fd, VIDIOC_ENCODER_CMD, &command) == 0) + { + VERBOSE(VB_RECORD, LOC + "Encoding stopped"); +@@ -1482,7 +1610,7 @@ bool MpegRecorder::StopEncoding(int fd) + return false; + } + +- usleep(250 * 1000); ++ usleep(100 * 1000); + } + + VERBOSE(VB_IMPORTANT, LOC_ERR + "StopEncoding - giving up" + ENO); +@@ -1550,7 +1678,7 @@ void MpegRecorder::HandleSingleProgramPA + void MpegRecorder::HandleSingleProgramPMT(ProgramMapTable *pmt) + { + if (!pmt) +-{ ++ { + return; + } + +@@ -1570,27 +1698,94 @@ void MpegRecorder::HandleSingleProgramPM + DTVRecorder::BufferedWrite(*(reinterpret_cast<TSPacket*>(&buf[i]))); + } + +-void MpegRecorder::HandleResolutionChanges(void) ++bool MpegRecorder::WaitFor_HDPVR(void) + { +- if (!needs_resolution) +- return; ++ // After a resolution change, it can take the HD-PVR a few ++ // seconds before it is usable again. ++ ++ // Tell it to start encoding, then wait for it to actually feed us ++ // some data. ++ QMutexLocker locker(&start_stop_encoding_lock); ++ ++ ++ // Sleep any less than 1.5 seconds, and the HD-PVR will ++ // return the old resolution, when the resolution is changing. ++ usleep(1500 * 1000); + ++ struct v4l2_encoder_cmd command; ++ struct pollfd polls; ++ int idx; ++ ++ memset(&command, 0, sizeof(struct v4l2_encoder_cmd)); ++ command.cmd = V4L2_ENC_CMD_START; ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(readfd, VIDIOC_ENCODER_CMD, &command) == 0) ++ break; ++ usleep(100 * 1000); ++ } ++ ++ if (idx == 20) ++ return false; ++ ++ polls.fd = readfd; ++ polls.events = POLLIN; ++ polls.revents = 0; ++ ++ for (idx = 0; idx < 10; ++idx) ++ { ++ if (poll(&polls, 1, 250) > 0) ++ break; ++ } ++ ++ if (idx == 10) ++ return false; ++ ++ // HD-PVR should now be "ready" ++ command.cmd = V4L2_ENC_CMD_STOP; ++ ++ for (idx = 0; idx < 20; ++idx) ++ { ++ if (ioctl(readfd, VIDIOC_ENCODER_CMD, &command) == 0) ++ return true; ++ usleep(100 * 1000); ++ } ++ ++ return false; ++} ++ ++void MpegRecorder::HandleResolutionChanges(void) ++{ + VERBOSE(VB_RECORD, LOC + "Checking Resolution"); + struct v4l2_format vfmt; + memset(&vfmt, 0, sizeof(vfmt)); + vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + ++ if (driver == "hdpvr") ++ WaitFor_HDPVR(); ++ ++ uint idx; + uint pix = 0; ++ ++ for (idx = 0; idx < 20; ++idx) ++ { + if (0 == ioctl(chanfd, VIDIOC_G_FMT, &vfmt)) + { + VERBOSE(VB_RECORD, LOC + QString("Got Resolution %1x%2") + .arg(vfmt.fmt.pix.width).arg(vfmt.fmt.pix.height)); + pix = vfmt.fmt.pix.width * vfmt.fmt.pix.height; +- needs_resolution = false; ++ break; ++ } ++ // Typically takes 0.9 seconds after a resolution change ++ usleep(100 * 1000); + } + + if (!pix) ++ { ++ VERBOSE(VB_RECORD, LOC + "Giving up detecting resolution"); + return; // nothing to do, we don't have a resolution yet ++ } + + int old_max = maxbitrate, old_avg = bitrate; + if (pix <= 768*568) +@@ -1648,12 +1843,6 @@ void MpegRecorder::HandleResolutionChang + maxbitrate * 1000); + + set_ctrls(readfd, ext_ctrls); +- } + +- // Restart streaming. Shouldn't be needed? seems to be with current driver. +- QMutexLocker locker(&start_stop_encoding_lock); +- StopEncoding(readfd); +- StartEncoding(readfd); +- +- needs_resolution = false; ++ } + } +Index: libs/libmythtv/mpegrecorder.h +=================================================================== +--- libs/libmythtv/mpegrecorder.h.orig ++++ libs/libmythtv/mpegrecorder.h +@@ -80,11 +80,13 @@ class MpegRecorder : public DTVRecorder, + uint GetFilteredAudioLayer(void) const; + uint GetFilteredAudioBitRate(uint audio_layer) const; + ++ void RestartEncoding(void); + bool StartEncoding(int fd); + bool StopEncoding(int fd); + + void ResetForNewFile(void); + ++ bool WaitFor_HDPVR(void); + void HandleResolutionChanges(void); + + inline bool CheckCC(uint pid, uint cc); +@@ -104,7 +106,6 @@ class MpegRecorder : public DTVRecorder, + // State + bool recording; + bool encoding; +- bool needs_resolution; + mutable QMutex start_stop_encoding_lock; + QMutex recording_wait_lock; + QWaitCondition recording_wait; +@@ -113,7 +114,7 @@ class MpegRecorder : public DTVRecorder, + bool cleartimeonpause; + + // Encoding info +- int width, height; ++ uint width, height; + int bitrate, maxbitrate, streamtype, aspectratio; + int audtype, audsamplerate, audbitratel1, audbitratel2, audbitratel3; + int audvolume; diff --git a/abs/core-testing/mythtv/trunk/mythtv/myth.sh b/abs/core-testing/mythtv/trunk/mythtv/myth.sh new file mode 100755 index 0000000..fb7122c --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/myth.sh @@ -0,0 +1,4 @@ +export PATH=$PATH:/usr/local/bin +# set core file size to 0 +ulimit -c 0 +export MALLOC_CHECK_=0
\ No newline at end of file diff --git a/abs/core-testing/mythtv/trunk/mythtv/mythbackend b/abs/core-testing/mythtv/trunk/mythtv/mythbackend new file mode 100755 index 0000000..93773a2 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/mythbackend @@ -0,0 +1,38 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions + +PID=`pidof -o %PPID /usr/bin/mythbackend` +case "$1" in + start) + stat_busy "Starting MythTV Backend" + [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit + [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important + if [ $? -gt 0 ]; then + stat_fail + else + echo $PID > /var/run/mythbackend.pid + add_daemon mythbackend + stat_done + fi + ;; + stop) + stat_busy "Stopping MythTV Backend" + [ ! -z "$PID" ] && kill $PID &>/dev/null + if [ $? -gt 0 ]; then + stat_fail + else + rm_daemon mythbackend + stat_done + fi + ;; + restart) + $0 stop + sleep 1s + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac +exit 0 diff --git a/abs/core-testing/mythtv/trunk/mythtv/mythbackend.sh b/abs/core-testing/mythtv/trunk/mythtv/mythbackend.sh new file mode 100755 index 0000000..e7a7b70 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/mythbackend.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# +# /etc/rc.d/init.d/mythbackend +# +# Starts the mythbackend as a daemon +# +# chkconfig: 345 90 10 +# description: Starts the mythbackend process as a daemon after the XWindows \ +# system is started, in runlevel 5. This allows scheduled \ +# recordings to occur without manual intervention. +# processname: mythbackend + +# Copyright (c) by Michael Thomson <linux at m-thomson dot net> +# With thanks to Stu Tomlinson <stu at nosnilmot dot com> +# +# 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 + +# Default values to use if none are supplied in the config file. +# User who should start the mythbackend processes +MBE_USER="root" +# Directory holding the mythbackend binary +MBE_LOCATION="/usr/local/bin/" +# Name of mythbackend binary +MBE_PROG="mythbackend" +# Full path to mythbackend log file +MBE_LOGFILE="/var/log/mythtv/mythbackend.log" + +# Source function library. +. /etc/init.d/functions + +# Source config file if available +if [ -f "/etc/sysconfig/mythbackend" ]; then + . /etc/sysconfig/mythbackend +fi + +test -x ${MBE_LOCATION}${MBE_PROG} || exit 0 + +RETVAL=0 + +# +# See how we were called. +# + +start() { + # Check if mythbackend is already running + if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then + echo -n "Starting ${MBE_PROG}: " + # /usr/local/bin/mythbackend -d -l /some/log/file + #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE} + ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE} + RETVAL=$? + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG} + echo + fi + return $RETVAL +} + +stop() { + echo -n "Stopping ${MBE_PROG}: " + killproc ${MBE_LOCATION}${MBE_PROG} + RETVAL=$? + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG} + echo + return $RETVAL +} + + +restart() { + stop + start +} + +reload() { + restart +} + +status_at() { + status ${MBE_LOCATION}${MBE_PROG} +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +reload|restart) + restart + ;; +condrestart) + if [ -f /var/lock/subsys/${MBE_PROG} ]; then + restart + fi + ;; +status) + status_at + ;; +*) + echo "Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $? +exit $RETVAL diff --git a/abs/core-testing/mythtv/trunk/mythtv/mythtv.install b/abs/core-testing/mythtv/trunk/mythtv/mythtv.install new file mode 100755 index 0000000..513852a --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/mythtv.install @@ -0,0 +1,55 @@ + +# arg 1: the new package version +pre_install () { + echo "backing up the database" + dbver=`pacman -Q mythtv-svn | awk ' { print $2 } '` + if [ ! -e /data/databases_backup ] + then + mkdir -p /data/database_backup + fi + mysqldump -u mythtv -pmythtv mythconverg -c > /data/database_backup/${dbver}.dump.sql +} + +post_install() { + mkdir -p /data/home + /usr/sbin/useradd -G users,video,audio,optical -m -d /data/home/mythtv mythtv + /usr/sbin/usermod -G users,video,audio,optical mythtv +# mkdir /var/log/mythtv +# chown -R mythtv:users /var/log/mythtv + dbver=`pacman -Q mythtv-svn | awk ' { print $2 } '` + if [ ! -e /data/database_backup ] + then + mkdir -p /data/database_backup + fi + chown mythtv:nobody /data/database_backup + chmod g+s /data/database_backup + + mysqldump -u mythtv -pmythtv mythconverg -c > /data/database_backup/${dbver}.dump.sql + + +} +pre_upgrade () { + pre_install +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install + + /bin/true +} + +# arg 1: the old package version +pre_remove() { + /bin/true +} + +# arg 1: the old package version +post_remove() { +/bint/true +} + +op=$1 +shift +$op $* diff --git a/abs/core-testing/mythtv/trunk/mythtv/smolt_jump.patch b/abs/core-testing/mythtv/trunk/mythtv/smolt_jump.patch new file mode 100644 index 0000000..0fc452a --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/smolt_jump.patch @@ -0,0 +1,30 @@ +Index: programs/mythfrontend/networkcontrol.cpp +=================================================================== +--- programs/mythfrontend/networkcontrol.cpp (revision 19291) ++++ programs/mythfrontend/networkcontrol.cpp (working copy) +@@ -83,6 +83,7 @@ + jumpMap["zoneminderliveview"] = "ZoneMinder Live View"; + jumpMap["zoneminderevents"] = "ZoneMinder Events"; + jumpMap["snapshot"] = "ScreenShot"; ++ jumpMap["mythsmolt"] = "MythSmolt"; + + // These jump point names match the (lowercased) locations from gContext + jumpMap["channelrecpriority"] = "Channel Recording Priorities"; +@@ -191,7 +192,7 @@ + pthread_create(&command_thread, NULL, CommandThread, this); + + gContext->addListener(this); +- ++ + connect(this, SIGNAL(newConnection()), this, SLOT(newConnection())); + } + +@@ -307,7 +308,7 @@ + cs = new QTextStream(s); + cs->setCodec("UTF-8"); + } +- ++ + if (client) + { + closedOldConn = true; diff --git a/abs/core-testing/mythtv/trunk/mythtv/svn_main_menu_popup.patch b/abs/core-testing/mythtv/trunk/mythtv/svn_main_menu_popup.patch new file mode 100644 index 0000000..5556683 --- /dev/null +++ b/abs/core-testing/mythtv/trunk/mythtv/svn_main_menu_popup.patch @@ -0,0 +1,211 @@ +Index: libs/libmythui/myththemedmenu.h +=================================================================== +--- libs/libmythui/myththemedmenu.h (revision 19291) ++++ libs/libmythui/myththemedmenu.h (working copy) +@@ -2,6 +2,7 @@ + #define MYTHTHEMEDMENU_H_ + + #include "mythscreentype.h" ++#include "mythdialogbox.h" + #include "mythuistatetype.h" + #include "mythuibuttonlist.h" + #include "xmlparsebase.h" +@@ -77,6 +78,11 @@ + void ReloadExitKey(void); + virtual void aboutToShow(void); + ++ void doMenu(); ++ void aboutScreen(); ++ MythDialogBox *m_menuPopup; ++ void customEvent(QEvent *event); ++ + protected: + virtual bool keyPressEvent(QKeyEvent *e); + +Index: libs/libmythui/myththemedmenu.cpp +=================================================================== +--- libs/libmythui/myththemedmenu.cpp (revision 19291) ++++ libs/libmythui/myththemedmenu.cpp (working copy) +@@ -32,6 +32,7 @@ + m_callbackdata = NULL; + + m_killable = false; ++ + } + + MythThemedMenuState::~MythThemedMenuState() +@@ -95,7 +96,7 @@ + m_exitModifier = -1; + m_menumode = ""; + m_buttonList = NULL; +- ++ m_menuPopup = NULL; + if (!m_state) + { + m_state = new MythThemedMenuState(parent, "themedmenustate"); +@@ -271,6 +272,10 @@ + m_wantpop = true; + } + } ++ else if (action == "MENU") ++ { ++ doMenu(); ++ } + else + handled = false; + } +@@ -292,6 +297,154 @@ + updateLCD(); + } + ++void MythThemedMenu::doMenu() ++{ ++ ++ if (m_menuPopup) ++ return; ++ int allowsd = GetMythDB()->GetNumSetting("AllowQuitShutdown"); ++ int override_menu = GetMythDB()->GetNumSetting("OverRideExitMenu"); ++ QString label = "System Menu"; ++ MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); ++ m_menuPopup = new MythDialogBox(label, mainStack, "menuPopup"); ++ if (m_menuPopup->Create()) ++ mainStack->AddScreen(m_menuPopup); ++ if ( override_menu == 0 ) ++ { ++ if ( allowsd != 0 && allowsd !=4 ) ++ { ++ m_menuPopup->SetReturnEvent(this,"popmenu_exit"); ++ m_menuPopup->AddButton("Shutdown"); ++ m_menuPopup->AddButton("Reboot"); ++ } ++ else ++ { ++ m_menuPopup->SetReturnEvent(this,"popmenu_noexit"); ++ } ++ } ++ if ( override_menu == 5 ) ++ { // reboot ++ m_menuPopup->SetReturnEvent(this,"popmenu_reboot"); ++ m_menuPopup->AddButton("Reboot"); ++ } ++ else if ( override_menu == 2 || override_menu == 4 ) ++ { // shutdown ++ m_menuPopup->SetReturnEvent(this,"popmenu_shutdown"); ++ m_menuPopup->AddButton("Shutdown"); ++ } ++ else if ( override_menu == 3 || override_menu == 6 ) ++ { // both ++ m_menuPopup->SetReturnEvent(this,"popmenu_exit"); ++ m_menuPopup->AddButton("Shutdown"); ++ m_menuPopup->AddButton("Reboot"); ++ } ++ else ++ { ++ m_menuPopup->SetReturnEvent(this,"popmenu_noexit"); ++ } ++ ++ m_menuPopup->AddButton("About"); ++ m_menuPopup->AddButton("Cancel"); ++ ++} ++void MythThemedMenu::aboutScreen() ++{ ++ ++ extern const char *myth_source_version; ++ extern const char *myth_source_path; ++ QString distro_line; ++ distro_line=""; ++ ++ QFile file("/etc/os_myth_release"); ++ if ( file.open(QFile::ReadOnly)) ++ { ++ QTextStream t( &file ); // use a text stream ++ distro_line = t.readLine(); ++ file.close(); ++ } ++ ++ QString label = ""; ++ label.append(QObject::tr("Revision: ") + myth_source_version + " \n Branch:" + myth_source_path + "\n" + distro_line ); ++ ++ MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); ++ m_menuPopup = new MythDialogBox(label, mainStack, "About"); ++ if (m_menuPopup->Create()) ++ mainStack->AddScreen(m_menuPopup); ++ ++ m_menuPopup->SetReturnEvent(this,"About"); ++ m_menuPopup->AddButton("OK!"); ++ ++} ++ ++void MythThemedMenu::customEvent(QEvent *event) ++{ ++ if (event->type() == kMythDialogBoxCompletionEventType) ++ { ++ DialogCompletionEvent *dce = ++ dynamic_cast<DialogCompletionEvent*>(event); ++ QString resultid= dce->GetId(); ++ int buttonnum = dce->GetResult(); ++ QString halt_cmd=GetMythDB()->GetSetting("HaltCommand"); ++ QString reboot_cmd=GetMythDB()->GetSetting("RebootCommand"); ++ ++ if (resultid == "popmenu_exit") ++ { ++ if (buttonnum == 0) ++ { ++ if (!halt_cmd.isEmpty() ) ++ system(halt_cmd.toAscii()); ++ } ++ ++ if (buttonnum == 1) ++ { ++ if (!reboot_cmd.isEmpty() ) ++ system(reboot_cmd.toAscii()); ++ } ++ ++ if (buttonnum == 2) ++ { ++ aboutScreen(); ++ } ++ } ++ ++ if (resultid == "popmenu_noexit") ++ { ++ if (buttonnum == 0) ++ aboutScreen(); ++ } ++ ++ if (resultid == "popmenu_reboot") ++ { ++ if (buttonnum == 0) ++ { ++ if (!reboot_cmd.isEmpty() ) ++ system(reboot_cmd.toAscii()); ++ } ++ ++ if (buttonnum == 1) ++ { ++ aboutScreen(); ++ } ++ } ++ ++ if (resultid == "popmenu_shutdown") ++ { ++ if (buttonnum == 0) ++ { ++ if (!halt_cmd.isEmpty() ) ++ system(halt_cmd.toAscii()); ++ } ++ ++ if (buttonnum == 1) ++ { ++ aboutScreen(); ++ } ++ } ++ ++ m_menuPopup = NULL; ++ } ++} ++ + /** \brief Parses the element's tags and set the ThemeButton's type, + * text, depends, and action, then adds the button. + * |