summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBritney Fransen <brfransen@gmail.com>2012-12-16 23:00:42 (GMT)
committerBritney Fransen <brfransen@gmail.com>2012-12-16 23:00:42 (GMT)
commitcace87216a88208a87e4ef3a2f8fc24f9022988f (patch)
tree6ac99fc81f9d3cf7c2b7de91c0d138f933e89fcf
parentc1816a6385b492d3547500d78bbca3dca9eb3bce (diff)
downloadlinhes_pkgbuild-cace87216a88208a87e4ef3a2f8fc24f9022988f.zip
linhes_pkgbuild-cace87216a88208a87e4ef3a2f8fc24f9022988f.tar.gz
linhes_pkgbuild-cace87216a88208a87e4ef3a2f8fc24f9022988f.tar.bz2
mythplugins: mythburn.py patch for aspect ratio and video storage groups support.
Updated for mythtv .25
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD6
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch279
2 files changed, 130 insertions, 155 deletions
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD b/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
index f8b7cbb..356e6c7 100644
--- a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
+++ b/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
@@ -12,7 +12,7 @@ pkgname=('mytharchive'
'mythweather'
'mythzoneminder')
pkgver=0.25
-pkgrel=6
+pkgrel=7
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
@@ -61,7 +61,7 @@ package_mytharchive() {
# replaces=('mytharchive')
cd "${srcdir}/${_gitname}/${pkgbase}/mytharchive"
-# patch mythburn/scripts/mythburn.py < $srcdir/mythburn.py.patch || return 1
+ patch mythburn/scripts/mythburn.py < $srcdir/mythburn.py.patch || return 1
make INSTALL_ROOT="${pkgdir}" install || return 1
}
@@ -134,4 +134,4 @@ package_mythzoneminder() {
make INSTALL_ROOT="${pkgdir}" install || return 1
}
-md5sums=('cc7e6887acda167fcc5336af33f29411')
+md5sums=('8a0e5e6a7fba3a7d03040fc23556f717')
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch b/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
index abac7df..7b385b3 100644
--- a/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
+++ b/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
@@ -1,23 +1,32 @@
---- mythburn.py.orig 2011-09-16 13:41:43.000000000 -0500
-+++ mythburn.py 2011-09-17 10:51:36.000000000 -0500
-@@ -38,7 +38,7 @@
- #******************************************************************************
+--- mythburn.py.orig 2012-12-16 15:23:41.000000000 -0600
++++ mythburn.py 2012-12-16 15:33:37.000000000 -0600
+@@ -44,7 +44,7 @@
+
# version of script - change after each update
--VERSION="0.1.20101206-1"
-+VERSION="0.1.20110821-1"
+-VERSION="0.1.20120304-1"
++VERSION="0.1.20121210-1"
# keep all temporary files for debugging purposes
# set this to True before a first run through when testing
-@@ -75,6 +75,7 @@
+@@ -93,6 +93,7 @@
from fcntl import ioctl
import CDROM
from shutil import copy
+from subprocess import Popen, PIPE
- # media types (should match the enum in mytharchivewizard.h)
- DVD_SL = 0
-@@ -606,7 +607,7 @@
+ import MythTV
+ from MythTV.altdict import OrdDict
+@@ -425,7 +426,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):
+@@ -615,7 +616,7 @@
# of a video file from its stream info file
def getVideoParams(folder):
@@ -26,7 +35,7 @@
#open the XML containing information about this file
infoDOM = xml.dom.minidom.parse(os.path.join(folder, 'streaminfo.xml'))
-@@ -642,14 +643,14 @@
+@@ -651,14 +652,14 @@
# Gets the aspect ratio of a video file from its stream info file
def getAspectRatioOfVideo(index):
@@ -44,65 +53,78 @@
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)
-@@ -1762,6 +1763,37 @@
+@@ -679,7 +680,7 @@
+
+ #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_orig.xml'))
++ fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo.xml'))
+
+ video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
+ video_start = float(video.attributes["start_time"].value)
+@@ -1432,9 +1433,18 @@
+
+ data.rating = str(vid.userrating)
+
+- if doesFileExist(vid.coverfile):
++ #Check filename for valid path. If valid return nothing.
++ if doesFileExist(str(vid.coverfile)):
++ write("Coverart is in local directory: %s" % vid.coverfile)
+ data.coverfile = vid.coverfile
+-
++ else:
++ # iterate through storage group directories to get Coverart
++ for sg in DB.getStorageGroup(groupname='Coverart', hostname=DB.gethostname()):
++ if doesFileExist(os.path.join(sg.dirname, str(vid.coverfile))):
++ write("Coverart is in Storage Groups: %s%s" % (sg.dirname, vid.coverfile))
++ data.coverfile = os.path.join(sg.dirname, str(vid.coverfile))
++ break
++
+ elif file.attributes["type"].value=="file":
+ data.type = file.attributes["type"].value
+ data.filename = file.attributes["filename"].value
+@@ -1485,6 +1495,28 @@
#############################################################
-+# Finds the path of a video file from the local video path
-+# or Storage Group
++# Finds the path of a video file from a Storage Group
+
+def getVideoPath(filename):
-+ # connect
-+ db = getDatabaseConnection()
-+ # create a cursor
-+ cursor = db.cursor()
-+ # execute SQL statement
-+ cursor.execute("""SELECT dirname
-+ FROM storagegroup
-+ WHERE groupname='Videos'""")
-+ # get the resultset as a tuple
-+ result = cursor.fetchall()
-+ # make result a list and add local video path if exists
-+ result = [videopath] + list(result)
-+
-+ # iterate through result set
-+ for sg in result:
-+ if doesFileExist(os.path.join("".join(sg), filename)) == True:
-+ filepath = "".join(sg)
-+ write("Video Path: %s" % filepath)
-+ return (filepath)
-+ break
++
++ filepath = None
+
-+ db.close()
-+ del db
-+ del cursor
++ #Check filename for valid path. If valid return nothing.
++ if doesFileExist(filename):
++ write("Video is in local video dir: %s" % filename)
++ return (filepath)
++ else:
++ # iterate through storage group directories
++ for sg in DB.getStorageGroup(groupname='Videos', hostname=DB.gethostname()):
++ wholepath = os.path.join(sg.dirname, filename)
++ if doesFileExist(wholepath):
++ write("Video is in Storage Groups: %s" % wholepath)
++ filepath = "".join(sg.dirname)
++ return (filepath)
++ break
+
+
+#############################################################
# Pre-process a single video/recording file
def preProcessFile(file, folder, count):
-@@ -1775,11 +1807,11 @@
- #3. Extract a single frame from the video to use as a thumbnail and resolution check
- mediafile=""
-
-- if file.attributes["type"].value == "recording":
-+ if file.attributes["type"].value=="recording":
+@@ -1501,7 +1533,7 @@
+ if file.attributes["type"].value == "recording":
mediafile = file.attributes["filename"].value
-- elif file.attributes["type"].value == "video":
+ elif file.attributes["type"].value == "video":
- mediafile = os.path.join(videopath, file.attributes["filename"].value)
-- elif file.attributes["type"].value == "file":
-+ elif file.attributes["type"].value=="video":
+ mediafile = os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
-+ elif file.attributes["type"].value=="file":
+ elif file.attributes["type"].value == "file":
mediafile = file.attributes["filename"].value
else:
- fatalError("Unknown type of video file it must be 'recording', 'video' or 'file'.")
-@@ -1935,9 +1967,39 @@
+@@ -1661,6 +1693,37 @@
+ fatalError("Failed while running mytharchivehelper to get stream information.\n"
+ "Result: %d, Command was %s" % (result, command))
- if result <> 0:
- fatalError("Failed while running mytharchivehelper to get stream information from %s" % filename)
-+
+ #open the XML containing information about this file
+ infoDOM = xml.dom.minidom.parse(xmlFilename)
+
@@ -114,7 +136,7 @@
+ video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
+
+ #use ffmpeg to get display aspect ratio (DAR) of video
-+ cmd = path_ffmpeg[0] + " -i " + quoteFilename(file.attributes["filename"].value) + " 2>&1"
++ 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
@@ -133,74 +155,66 @@
+ 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("streaminfo.xml :-\n" + infoDOM.toprettyxml(" ", ""), False)
+ infoDOM = xml.dom.minidom.parse(xmlFilename)
+ write(xmlFilename + ":-\n" + infoDOM.toprettyxml(" ", ""), False)
+@@ -1707,7 +1770,7 @@
+ write("Using cutlist: %s" % cutlist_s)
- #############################################################
-@@ -2322,7 +2384,7 @@
+ if (localfile != ""):
+- localfile = quoteFilename(localfile)
++ localfile = quoteCmdArg(localfile)
+ if usecutlist == True:
+ command = "mythtranscode --mpeg2 --honorcutlist %s --infile %s --outfile %s" % (cutlist_s, quoteCmdArg(localfile), quoteCmdArg(destination))
+ else:
+@@ -1973,7 +2036,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 ffmpeg"""
+ """Encodes an unknown video source file eg. AVI to MPEG2 video and AC3 audio, use mythffmpeg"""
profileNode = findEncodingProfile(profile)
-@@ -2347,6 +2409,18 @@
- value = quoteFilename(destvideofile)
+@@ -1998,7 +2061,36 @@
+ value = quoteCmdArg(destvideofile)
if value == "%aspect":
value = aspectratio
+ if value == "720x480" or value == "720x576":
-+ #add padding to correct for aspects > than 1.9:1
+ 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":
-+ videoheight = 480
++ videoModeHeight = 480
+ else:
-+ videoheight = 576
-+
-+ croppixels = videoheight - (720 / float(videoAR))
-+ write("CropPixels Total: %s" % croppixels)
-+ value = "720x%d -vf pad=720:%d:0:%d:black" % (videoheight - croppixels, videoheight, croppixels / 2)
++ 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":
-@@ -2383,12 +2457,12 @@
- command += " -newaudio"
-
- #make sure we get the correct stream(s) that we want
-- command += " -map 0:%d -map 0:%d " % (video[VIDEO_INDEX], audio1[AUDIO_INDEX])
-+ command += " -map 0:%d -map 0:%d" % (video[VIDEO_INDEX], audio1[AUDIO_INDEX])
- if audio2[AUDIO_ID] != -1:
- command += "-map 0:%d" % (audio2[AUDIO_INDEX])
-
- if passes == 1:
-- write(command)
-+ write("Running ffmpeg: %s" % command)
- result = runCommand(command)
- if result!=0:
- fatalError("Failed while running ffmpeg to re-encode video.\n"
-@@ -2399,7 +2473,7 @@
-
- pass1 = string.replace(command, "%passno","1")
- pass1 = string.replace(pass1, "%passlogfile", passLog)
-- write("Pass 1 - " + pass1)
-+ write("Running ffmpeg Pass 1: %s" % pass1)
- result = runCommand(pass1)
-
- if result!=0:
-@@ -2411,7 +2485,7 @@
-
- pass2 = string.replace(command, "%passno","2")
- pass2 = string.replace(pass2, "%passlogfile", passLog)
-- write("Pass 2 - " + pass2)
-+ write("Running ffmpeg Pass 2: %s" % pass2)
- result = runCommand(pass2)
-
- if result!=0:
-@@ -2443,10 +2517,6 @@
+ if name == "-acodec":
+@@ -2094,10 +2186,6 @@
outaudiosamplerate = 48000
outaudiocodec = "ac3"
deinterlace = 0
@@ -211,7 +225,7 @@
qmin = 5
qmax = 31
qdiff = 31
-@@ -2470,14 +2540,6 @@
+@@ -2121,14 +2209,6 @@
outvideores = value
if name == "-deinterlace":
deinterlace = 1
@@ -226,78 +240,39 @@
if name == "-qmin":
qmin = value
if name == "-qmax":
-@@ -2526,7 +2588,6 @@
- command += "-aspect %s -r %s " % (aspectratio, fps)
- if (deinterlace == 1):
- command += "-deinterlace "
-- command += "-croptop %s -cropright %s -cropbottom %s -cropleft %s " % (croptop, cropright, cropbottom, cropleft)
- command += "-s %s -b %s -vcodec mpeg2video " % (outvideores, outvideobitrate)
- command += "-qmin %s -qmax %s -qdiff %s " % (qmin, qmax, qdiff)
- command += "-ab %s -ar %s -acodec %s " % (outaudiobitrate, outaudiosamplerate, outaudiocodec)
-@@ -2543,7 +2604,7 @@
- if (not(doesFileExist(os.path.join(folder, "audout")) and doesFileExist(os.path.join(folder, "vidout")))):
- fatalError("Waited too long for mythtranscode to create the fifos - giving up!!")
-
-- write("Running ffmpeg")
-+ write("Running ffmpeg: %s" % command)
- result = runCommand(command)
- if result != 0:
- os.kill(PID, signal.SIGKILL)
-@@ -4724,7 +4785,7 @@
+@@ -4409,7 +4489,7 @@
elif file.attributes["type"].value=="recording":
mediafile = file.attributes["filename"].value
elif file.attributes["type"].value=="video":
- mediafile=os.path.join(videopath, file.attributes["filename"].value)
-+ mediafile = os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
++ mediafile=os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
elif file.attributes["type"].value=="file":
mediafile=file.attributes["filename"].value
else:
-@@ -4834,8 +4895,7 @@
- starttime = -1
- usecutlist = -1
-
-- encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder,
-- profile, usecutlist)
-+ encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder, profile, usecutlist)
- mediafile = os.path.join(folder, 'newfile2.mpg')
- else:
- #we need to re-encode the file, make sure we get the right video/audio streams
-@@ -4861,8 +4921,7 @@
- profile = defaultEncodingProfile
+@@ -4547,7 +4627,7 @@
#do the re-encode
-- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
- audio1, audio2, aspectratio, profile)
-+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, folder, 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
-@@ -4936,7 +4995,7 @@
+@@ -4621,7 +4701,7 @@
elif file.attributes["type"].value=="recording":
mediafile = file.attributes["filename"].value
elif file.attributes["type"].value=="video":
- mediafile=os.path.join(videopath, file.attributes["filename"].value)
-+ mediafile = os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
++ mediafile=os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
elif file.attributes["type"].value=="file":
mediafile=file.attributes["filename"].value
else:
-@@ -4988,8 +5047,7 @@
- starttime = -1
- usecutlist = -1
-
-- encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder,
-- profile, usecutlist)
-+ encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder, profile, usecutlist)
- mediafile = os.path.join(folder, 'newfile2.mpg')
- else:
- #we need to re-encode the file, make sure we get the right video/audio streams
-@@ -5015,8 +5073,7 @@
- profile = defaultEncodingProfile
+@@ -4701,7 +4781,7 @@
#do the re-encode
-- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
- audio1, audio2, aspectratio, profile)
-+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, folder, audio1, audio2, aspectratio, profile)
++ folder, audio1, audio2, aspectratio, profile)
mediafile = os.path.join(folder, 'newfile2.mpg')
#remove an intermediate file