summaryrefslogtreecommitdiffstats
path: root/abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch
diff options
context:
space:
mode:
Diffstat (limited to 'abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch')
-rw-r--r--abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch303
1 files changed, 303 insertions, 0 deletions
diff --git a/abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch b/abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch
new file mode 100644
index 0000000..abac7df
--- /dev/null
+++ b/abs/not_built/core/mythtv/stable-0.24/mythplugins/mythburn.py.patch
@@ -0,0 +1,303 @@
+--- 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 @@
+ #******************************************************************************
+
+ # version of script - change after each update
+-VERSION="0.1.20101206-1"
++VERSION="0.1.20110821-1"
+
+ # keep all temporary files for debugging purposes
+ # set this to True before a first run through when testing
+@@ -75,6 +75,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 @@
+ # of a video file from its stream info file
+
+ def getVideoParams(folder):
+- """Returns the video resolution, fps and aspect ratio for the video file from the streamindo.xml file"""
++ """Returns the video resolution, fps and aspect ratio for the video file from the streaminfo.xml file"""
+
+ #open the XML containing information about this file
+ infoDOM = xml.dom.minidom.parse(os.path.join(folder, 'streaminfo.xml'))
+@@ -642,14 +643,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)
+@@ -1762,6 +1763,37 @@
+
+
+ #############################################################
++# Finds the path of a video file from the local video path
++# or 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
++
++ db.close()
++ del db
++ del cursor
++
++
++#############################################################
+ # 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":
+ mediafile = file.attributes["filename"].value
+- 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":
+ mediafile = file.attributes["filename"].value
+ else:
+ fatalError("Unknown type of video file it must be 'recording', 'video' or 'file'.")
+@@ -1935,9 +1967,39 @@
+
+ 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)
++
++ #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 = path_ffmpeg[0] + " -i " + quoteFilename(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("streaminfo.xml :-\n" + infoDOM.toprettyxml(" ", ""), False)
+
+ #############################################################
+@@ -2322,7 +2384,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"""
+
+ profileNode = findEncodingProfile(profile)
+@@ -2347,6 +2409,18 @@
+ value = quoteFilename(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)
++ if float(videoAR) >= 1.9:
++ if videomode == "ntsc":
++ videoheight = 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)
+
+ # 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 @@
+ outaudiosamplerate = 48000
+ outaudiocodec = "ac3"
+ deinterlace = 0
+- croptop = 0
+- cropright = 0
+- cropbottom = 0
+- cropleft = 0
+ qmin = 5
+ qmax = 31
+ qdiff = 31
+@@ -2470,14 +2540,6 @@
+ outvideores = value
+ if name == "-deinterlace":
+ deinterlace = 1
+- if name == "-croptop":
+- croptop = value
+- if name == "-cropright":
+- cropright = value
+- if name == "-cropbottom":
+- cropbottom = value
+- if name == "-cropleft":
+- cropleft = value
+ 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 @@
+ 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)
+ 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
+
+ #do the re-encode
+- 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)
+ mediafile = os.path.join(folder, 'newfile2.mpg')
+
+ #remove the old mediafile that was run through mythtranscode
+@@ -4936,7 +4995,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)
+ 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
+
+ #do the re-encode
+- 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)
+ mediafile = os.path.join(folder, 'newfile2.mpg')
+
+ #remove an intermediate file