--- 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