diff options
Diffstat (limited to 'abs/core/mythtv/stable-30/mythplugins')
5 files changed, 345 insertions, 0 deletions
diff --git a/abs/core/mythtv/stable-30/mythplugins/0317-0336-MythMusic-Fix-Playlist-copyTracks-and-removeAllTrack.patch b/abs/core/mythtv/stable-30/mythplugins/0317-0336-MythMusic-Fix-Playlist-copyTracks-and-removeAllTrack.patch new file mode 100644 index 0000000..5c0f623 --- /dev/null +++ b/abs/core/mythtv/stable-30/mythplugins/0317-0336-MythMusic-Fix-Playlist-copyTracks-and-removeAllTrack.patch @@ -0,0 +1,50 @@ +From e7c80f43a3ec0fc2024f64e17d13461840429029 Mon Sep 17 00:00:00 2001 +From: Lawrence Rust <lvr@softsystem.co.uk> +Date: Fri, 17 Jun 2016 18:40:37 +0100 +Subject: [PATCH 336/348] MythMusic: Fix Playlist::copyTracks and + removeAllTracks + +Correct these 2 functions to call gPlayer->activePlaylistChanged + +Signed-off-by: Lawrence Rust <lvr@softsystem.co.uk> +--- + mythplugins/mythmusic/mythmusic/playlist.cpp | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/mythplugins/mythmusic/mythmusic/playlist.cpp b/mythplugins/mythmusic/mythmusic/playlist.cpp +index 79a509a..94146a4 100644 +--- a/mythplugins/mythmusic/mythmusic/playlist.cpp ++++ src/mythplugins/mythmusic/mythmusic/playlist.cpp +@@ -46,7 +46,7 @@ bool Playlist::checkTrack(MusicMetadata::IdType trackID) const + + void Playlist::copyTracks(Playlist *to_ptr, bool update_display) + { +- disableSaves(); ++ to_ptr->disableSaves(); + + for (int x = 0; x < m_songs.size(); x++) + { +@@ -58,9 +58,9 @@ void Playlist::copyTracks(Playlist *to_ptr, bool update_display) + } + } + +- enableSaves(); ++ to_ptr->enableSaves(); + +- changed(); ++ to_ptr->changed(); + } + + /// Given a tracks ID, add that track to this playlist +@@ -94,6 +94,8 @@ void Playlist::removeAllTracks(void) + m_shuffledSongs.clear(); + + changed(); ++ ++ gPlayer->activePlaylistChanged(-1, true); + } + + void Playlist::removeAllCDTracks(void) +-- +1.7.9.5 + diff --git a/abs/core/mythtv/stable-30/mythplugins/PKGBUILD b/abs/core/mythtv/stable-30/mythplugins/PKGBUILD new file mode 100644 index 0000000..60c62a7 --- /dev/null +++ b/abs/core/mythtv/stable-30/mythplugins/PKGBUILD @@ -0,0 +1,133 @@ +pkgbase=mythplugins +pkgname=('mytharchive' + 'mythbrowser' + 'mythgallery' + 'mythgame' + 'mythmusic' + 'mythnetvision' + 'mythnews' + 'mythweather' + 'mythzoneminder') +pkgver=30.0 +pkgrel=1 +arch=('x86_64') +url="http://www.mythtv.org" +license=('GPL') +makedepends=('cdrkit' 'dcraw' 'dvdauthor' 'dvd+rw-tools' 'ffmpeg' 'flac' 'libexif' + 'libvorbis' 'mesa' 'libgl' 'mplayer' "mythtv>=${pkgver}" + 'perl-datetime-format-iso8601' 'perl-date-manip' 'perl-image-size' + 'perl-json' 'perl-libwww' 'perl-soap-lite' 'perl-xml-sax' + 'perl-xml-simple' 'perl-xml-xpath' 'python2-oauth' 'python2-pillow' + 'python2-pycurl' 'zlib') +source=('mythburn.py-aspectratio.patch' + 'mythburn.cpp-python2.patch' + '0317-0336-MythMusic-Fix-Playlist-copyTracks-and-removeAllTrack.patch' + ) + +prepare() { + if [ -e ${srcdir}/mythplugins ] + then + msg "Removing old mythplugins src" + rm -rf ${srcdir}/mythplugins + fi + + cd ${startdir} + msg "Copying in mythplugins git_src" + cp -rp ../git_src/mythtv/mythplugins $srcdir + + msg "Patch MythMusic Playlist" + cd ${srcdir} + patch -Np1 -i "$srcdir/0317-0336-MythMusic-Fix-Playlist-copyTracks-and-removeAllTrack.patch" + + msg "Change python to python2" + find . -name '*.py' -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@' + patch -Np1 -i "$srcdir/mythburn.cpp-python2.patch" + +} + +build() { + cd ${srcdir}/${pkgbase} + msg "Configuring mythplugins" + ./configure --prefix=/usr \ + --enable-all \ + --python=python2 + + msg "Compiling mythplugins" + qmake-qt5 mythplugins.pro || return 1 + make || return 1 +} + +package_mytharchive() { + pkgdesc="Create DVDs or archive recorded shows in MythTV" + depends=('cdrkit' 'dvdauthor' 'dvd+rw-tools' 'ffmpeg' "mythtv>=${pkgver}" + 'm2vrequantiser' 'mjpegtools' 'python2-pillow') + optdepends=('projectx: for subtitle support') + cd "${srcdir}/${_gitname}/${pkgbase}/mytharchive" + patch mythburn/scripts/mythburn.py < $srcdir/mythburn.py-aspectratio.patch || return 1 + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythbrowser() { + pkgdesc="Mini web browser for MythTV" + depends=("mythtv>=${pkgver}") + cd "${srcdir}/${_gitname}/${pkgbase}/mythbrowser" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythgallery() { + pkgdesc="Image gallery plugin for MythTV" + depends=('libexif' "mythtv>=${pkgver}" 'dcraw') + cd "${srcdir}/${_gitname}/${pkgbase}/mythgallery" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythgame() { + pkgdesc="Game emulator plugin for MythTV" + depends=("mythtv>=${pkgver}" 'zlib') + cd "${srcdir}/${_gitname}/${pkgbase}/mythgame" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythmusic() { + pkgdesc="Music playing plugin for MythTV" + depends=('cdparanoia' 'fftw' 'flac' 'libcdaudio' 'libcdio-paranoia' + 'libvisual-plugins' 'libvorbis' "mythtv>=${pkgver}" 'taglib') + cd "${srcdir}/${_gitname}/${pkgbase}/mythmusic" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythnetvision() { + pkgdesc="MythNetvision plugin for MythTV" + depends=("mythtv>=${pkgver}" 'python2-pycurl' 'python2-oauth' + 'python2-lxml' 'python2') + cd "${srcdir}/${_gitname}/${pkgbase}/mythnetvision" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythnews() { + pkgdesc="News checking plugin for MythTV" + depends=("mythtv>=${pkgver}") + cd "${srcdir}/${_gitname}/${pkgbase}/mythnews" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythweather() { + pkgdesc="Weather checking plugin for MythTV" + depends=("mythtv>=${pkgver}" 'perl-date-manip' 'perl-json' 'perl-soap-lite' + 'perl-xml-sax' 'perl-xml-simple' 'perl-xml-xpath' 'perl-image-size' + 'perl-datetime-format-iso8601') + cd "${srcdir}/${_gitname}/${pkgbase}/mythweather" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +package_mythzoneminder() { + pkgdesc="View CCTV footage from zoneminder in MythTV" + depends=("mythtv>=${pkgver}") +# install=mythplugins-mythzoneminder.install + cd "${srcdir}/${_gitname}/${pkgbase}/mythzoneminder" + make INSTALL_ROOT="${pkgdir}" install || return 1 +} + +md5sums=('e98c2a09bcb051fdde959fb4bb2e5ab2' + 'b9edd8f7da64ffa74baa91092bd48cc9' + '0299d0214c0d3a452c0284352435d698') diff --git a/abs/core/mythtv/stable-30/mythplugins/mythburn.cpp-python2.patch b/abs/core/mythtv/stable-30/mythplugins/mythburn.cpp-python2.patch new file mode 100644 index 0000000..2c43f9e --- /dev/null +++ b/abs/core/mythtv/stable-30/mythplugins/mythburn.cpp-python2.patch @@ -0,0 +1,13 @@ +diff --git a/mythplugins/mytharchive/mytharchive/mythburn.cpp b/mythplugins/mytharchive/mytharchive/mythburn.cpp +index 4188579bb0..639f17abe9 100644 +--- a/mythplugins/mytharchive/mytharchive/mythburn.cpp ++++ b/mythplugins/mytharchive/mytharchive/mythburn.cpp +@@ -950,7 +950,7 @@ void MythBurn::runScript() + QFile::remove(logDir + "/mythburncancel.lck"); + + createConfigFile(configDir + "/mydata.xml"); +- commandline = "python " + GetShareDir() + "mytharchive/scripts/mythburn.py"; ++ commandline = "python2 " + GetShareDir() + "mytharchive/scripts/mythburn.py"; + commandline += " -j " + configDir + "/mydata.xml"; // job file + commandline += " -l " + logDir + "/progress.log"; // progress log + commandline += " > " + logDir + "/mythburn.log 2>&1 &"; // Logs diff --git a/abs/core/mythtv/stable-30/mythplugins/mythburn.py-aspectratio.patch b/abs/core/mythtv/stable-30/mythplugins/mythburn.py-aspectratio.patch new file mode 100644 index 0000000..377de95 --- /dev/null +++ b/abs/core/mythtv/stable-30/mythplugins/mythburn.py-aspectratio.patch @@ -0,0 +1,138 @@ +--- mythburn.py.orig 2013-12-16 22:41:31.532703825 +0000 ++++ mythburn.py 2013-12-16 22:40:52.191109409 +0000 +@@ -98,6 +98,7 @@ + from fcntl import ioctl + import CDROM + from shutil import copy ++from subprocess import Popen, PIPE + + import MythTV + from MythTV import datetime +@@ -440,7 +441,7 @@ + os.remove(os.path.join(root, name)) + + ############################################################# +-# Romoves all the objects from a directory ++# Removes all the objects from a directory + + def deleteEverythingInFolder(folder): + for root, dirs, files in os.walk(folder, topdown=False): +@@ -666,14 +667,14 @@ + # Gets the aspect ratio of a video file from its stream info file + + def getAspectRatioOfVideo(index): +- """Returns the aspect ratio of the video file (1.333, 1.778, etc)""" ++ """Returns the aspect ratio of the original video file (1.333, 1.778, etc)""" + + #open the XML containing information about this file +- infoDOM = xml.dom.minidom.parse(os.path.join(getItemTempPath(index), 'streaminfo.xml')) ++ infoDOM = xml.dom.minidom.parse(os.path.join(getItemTempPath(index), 'streaminfo_orig.xml')) + + #error out if its the wrong XML + if infoDOM.documentElement.tagName != "file": +- fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo.xml')) ++ fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo_orig.xml')) + video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0] + if video.attributes["aspectratio"].value != 'N/A': + aspect_ratio = float(video.attributes["aspectratio"].value) +@@ -1695,6 +1696,37 @@ + fatalError("Failed while running mytharchivehelper to get stream information.\n" + "Result: %d, Command was %s" % (result, command)) + ++ #open the XML containing information about this file ++ infoDOM = xml.dom.minidom.parse(xmlFilename) ++ ++ #error out if its the wrong XML ++ if infoDOM.documentElement.tagName != "file": ++ fatalError("This info file doesn't look right (%s)." % xmlFilename) ++ ++ file = infoDOM.getElementsByTagName("file")[0] ++ video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0] ++ ++ #use ffmpeg to get display aspect ratio (DAR) of video ++ cmd = "mythffmpeg -i " + quoteCmdArg(file.attributes["filename"].value) + " 2>&1" ++ aspect_ratio = Popen(cmd, shell=True, stdout=PIPE).stdout.read() ++ if "DAR" in aspect_ratio: ++ #clean DAR string ++ aspect_ratio = aspect_ratio.split("DAR ")[-1].split(",")[0] ++ aspect_ratio = ''.join([c for c in aspect_ratio if c in '1234567890:']).split(":") ++ else: ++ #calculate aspect from video size ++ aspect_ratio = getVideoSize(xmlFilename) ++ ++ #convert to decimal+ ++ aspect_ratio = float(aspect_ratio[0]) / float(aspect_ratio[1]) ++ ++ write("Video %s aspect ratio is: %s" % (filename, aspect_ratio)) ++ ++ #set aspect ratio ++ video.setAttribute("aspectratio",str(aspect_ratio)) ++ ++ WriteXMLToFile (infoDOM,xmlFilename) ++ + # print out the streaminfo.xml file to the log + infoDOM = xml.dom.minidom.parse(xmlFilename) + write(xmlFilename + ":-\n" + infoDOM.toprettyxml(" ", ""), False) +@@ -2010,7 +2042,7 @@ + ############################################################# + # Re-encodes a file to mpeg2 + +-def encodeVideoToMPEG2(source, destvideofile, video, audio1, audio2, aspectratio, profile): ++def encodeVideoToMPEG2(source, destvideofile, video, folder, audio1, audio2, aspectratio, profile): + """Encodes an unknown video source file eg. AVI to MPEG2 video and AC3 audio, use mythffmpeg""" + + profileNode = findEncodingProfile(profile) +@@ -2035,6 +2067,35 @@ + value = quoteCmdArg(destvideofile) + if value == "%aspect": + value = aspectratio ++ if value == "720x480" or value == "720x576": ++ videores, fps, videoAR = getVideoParams(folder) ++ videoWidth = int(videores.split("x")[0]) ++ videoHeight = int(videores.split("x")[1]) ++ ++ #add padding to correct for aspects > than 1.9:1 ++ if float(videoAR) >= 1.9: ++ #check which video type and set the correct height ++ if videomode == "ntsc": ++ videoModeHeight = 480 ++ else: ++ videoModeHeight = 576 ++ ++ #calculate the video height based on the aspect ratio of the video ++ #multiply by 1.185 to compensate for dvds non-square pixels ++ calVideoHeight = int(round((720 / float(videoAR)) * 1.185)) ++ if calVideoHeight % 2 == 1: ++ calVideoHeight = calVideoHeight + 1 ++ #write("calVideoHeight: %s" % calVideoHeight) ++ ++ #use original video height if the calculated video height is close ++ if (calVideoHeight + 20 < videoHeight) or (calVideoHeight - 20 > videoHeight): ++ videoHeight = calVideoHeight ++ ++ cropPixels = videoModeHeight - videoHeight ++ ++ write("Crop Pixels Total: %s" % cropPixels) ++ name = "-vf" ++ value = "\"scale=720:%d, setsar=1:1, pad=720:%d:0:%d:black\"" % (videoModeHeight - cropPixels, videoModeHeight, cropPixels / 2) + + # only re-encode the audio if it is not already in AC3 format + if audio1[AUDIO_CODEC] == "AC3": +@@ -4608,7 +4669,7 @@ + + #do the re-encode + encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, +- audio1, audio2, aspectratio, profile) ++ folder, audio1, audio2, aspectratio, profile) + mediafile = os.path.join(folder, 'newfile2.mpg') + + #remove the old mediafile that was run through mythtranscode +@@ -4762,7 +4823,7 @@ + + #do the re-encode + encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, +- audio1, audio2, aspectratio, profile) ++ folder, audio1, audio2, aspectratio, profile) + mediafile = os.path.join(folder, 'newfile2.mpg') + + #remove an intermediate file diff --git a/abs/core/mythtv/stable-30/mythplugins/mythplugins-mythzoneminder.install b/abs/core/mythtv/stable-30/mythplugins/mythplugins-mythzoneminder.install new file mode 100644 index 0000000..a4e0c0d --- /dev/null +++ b/abs/core/mythtv/stable-30/mythplugins/mythplugins-mythzoneminder.install @@ -0,0 +1,11 @@ +post_install() { + . /etc/systemconfig + if [ $SystemType = Master_backend -o $SystemType = Standalone ] + then + echo "This looks a zoneminder server install" + echo "Installing zoneminder" + #for reference the pacman statement below will not work because of a db lock. + pacman -S zoneminder + fi + +} |