[transmageddon] various fixes to make aac work
- From: Christian Fredrik Kalager Schaller <uraeus src gnome org>
- To: svn-commits-list gnome org
- Subject: [transmageddon] various fixes to make aac work
- Date: Wed, 22 Jul 2009 16:10:24 +0000 (UTC)
commit 62168a7b59ee632a9405bce83fe68463b989071e
Author: Christian Schaller <christian schaller collabora co uk>
Date: Wed Jul 22 17:16:51 2009 +0100
various fixes to make aac work
src/codecfinder.py | 11 +++++--
src/transcoder_engine.py | 66 ++++++++++++++++++++++++---------------------
2 files changed, 43 insertions(+), 34 deletions(-)
---
diff --git a/src/codecfinder.py b/src/codecfinder.py
index 892ec37..94a30df 100644
--- a/src/codecfinder.py
+++ b/src/codecfinder.py
@@ -41,7 +41,7 @@ csuffixmap = { 'Ogg' : ".ogg", 'Matroska' : ".mkv", 'MXF' : ".mxf", 'AVI' : ".
'MPEG4' : ".mp4", 'MPEG PS' : ".mpg", 'MPEG TS' : ".ts", 'FLV' : ".flv", '3GPP' : ".3gp" }
codecmap = { 'vorbis' : "audio/x-vorbis", 'flac' : "audio/x-flac", 'mp3' : "audio/mpeg,mpegversion=1,layer=3",
- 'aac' : "audio/mpeg,mpegversion=[4, 2]", 'ac3' : "audio/x-ac3", 'speex' : "audio/x-speex",
+ 'aac' : "audio/mpeg,mpegversion=4", 'ac3' : "audio/x-ac3", 'speex' : "audio/x-speex",
'celt' : "audio/x-celt", 'alac' : "audio/x-alac", 'wma2' : "audio/x-wma,wmaversion=2",
'theora' : "video/x-theora", 'dirac' : "video/x-dirac", 'h264' : "video/x-h264",
'mpeg2' : "video/mpeg,mpegversion=2,systemstream=false", 'mpeg4' : "video/mpeg,mpegversion=4",
@@ -79,7 +79,6 @@ def get_muxer_element(containercaps):
factory = gst.registry_get_default().lookup_feature(str(x))
sinkcaps = [x.get_caps() for x in factory.get_static_pad_templates() if x.direction == gst.PAD_SRC]
for caps in sinkcaps:
-
result = caps[0].get_name()
for attr in caps[0].keys():
if attr not in blacklist:
@@ -133,9 +132,14 @@ def get_audio_encoder_element(audioencodercaps):
sinkcaps = [x.get_caps() for x in factory.get_static_pad_templates() if x.direction == gst.PAD_SRC]
for caps in sinkcaps:
result = caps[0].get_name();
+ # print "result before attributes " + str(result)
for attr in caps[0].keys():
if attr not in blacklist:
- result += ","+attr+"="+str(caps[0][attr])
+ if codec == "faac":
+ result = "audio/mpeg,mpegversion=4"
+ #ugly workaround for Caps.from_string not handling mpegversion =[2,4]
+ else:
+ result += ","+attr+"="+str(caps[0][attr])
if audiocoderchoice.has_key(result):
mostrecent = gst.PluginFeature.get_rank(encoderfeature[codec])
original = gst.PluginFeature.get_rank(encoderfeature[audiocoderchoice[result]])
@@ -144,6 +148,7 @@ def get_audio_encoder_element(audioencodercaps):
else:
audiocoderchoice[result] = codec
+ # print "*** printing audiocodecchoice ***"
# print audiocoderchoice
if audiocoderchoice.has_key(audioencodercaps):
elementname = audiocoderchoice[audioencodercaps]
diff --git a/src/transcoder_engine.py b/src/transcoder_engine.py
index 273c38f..f0d14a2 100644
--- a/src/transcoder_engine.py
+++ b/src/transcoder_engine.py
@@ -52,15 +52,18 @@ class Transcoder(gobject.GObject):
self.audiocaps = AUDIOCODECVALUE
self.videocaps = VIDEOCODECVALUE
self.audiopasstoggle = AUDIOPASSTOGGLE
+ # print "audiopass toggle is " + str(self.audiopasstoggle)
self.videopasstoggle = VIDEOPASSTOGGLE
if self.audiopasstoggle == False:
+ # print "audiopasstoggle is false, setting AudioEncoderPlugin"
+ # print "self.audiocaps IS **** " + str(self.audiocaps)
self.AudioEncoderPlugin = codecfinder.get_audio_encoder_element(self.audiocaps)
if self.videopasstoggle == False:
- print "self.videopasstoggle is false so setting self.VideoEncoderPlugin"
- print "look at incoming videocaps " + str(self.videocaps)
+ # print "self.videopasstoggle is false so setting self.VideoEncoderPlugin"
+ # print "look at incoming videocaps " + str(self.videocaps)
self.VideoEncoderPlugin = codecfinder.get_video_encoder_element(self.videocaps)
- print "self.VideoEncoderPlugin " + str(self.VideoEncoderPlugin)
+ # print "self.VideoEncoderPlugin " + str(self.VideoEncoderPlugin)
self.preset = PRESET
self.oheight = OHEIGHT
self.owidth = OWIDTH
@@ -89,17 +92,17 @@ class Transcoder(gobject.GObject):
self.gstmultiqueue = gst.element_factory_make("multiqueue")
self.multiqueueaudiosinkpad = self.gstmultiqueue.get_request_pad("sink0")
- print "self.multiqueueaudiosinkpad " + str(self.multiqueueaudiosinkpad)
+ # print "self.multiqueueaudiosinkpad " + str(self.multiqueueaudiosinkpad)
self.multiqueuevideosinkpad = self.gstmultiqueue.get_request_pad("sink1")
- print "self.multiqueuevideosinkpad " + str(self.multiqueuevideosinkpad)
+ # print "self.multiqueuevideosinkpad " + str(self.multiqueuevideosinkpad)
self.multiqueueaudiosrcpad = self.gstmultiqueue.get_pad("src0")
- print "self.multiqueueaudiosrcpad " + str(self.multiqueueaudiosrcpad)
+ # print "self.multiqueueaudiosrcpad " + str(self.multiqueueaudiosrcpad)
self.multiqueuevideosrcpad = self.gstmultiqueue.get_pad("src1")
- print "self.multiqueuevideosrcpad " + str(self.multiqueuevideosrcpad)
+ # print "self.multiqueuevideosrcpad " + str(self.multiqueuevideosrcpad)
self.pipeline.add(self.gstmultiqueue)
- print "audiopass toggle is " + str(self.audiopasstoggle)
- print "videopass toggle is " + str(self.videopasstoggle)
+ # print "audiopass toggle is " + str(self.audiopasstoggle)
+ # print "videopass toggle is " + str(self.videopasstoggle)
self.remuxcaps = gst.Caps()
if self.audiopasstoggle:
self.remuxcaps.append(self.audiocaps)
@@ -113,7 +116,7 @@ class Transcoder(gobject.GObject):
self.remuxcaps.append_structure(gst.Structure("audio/x-raw-int"))
if (self.audiopasstoggle) or (self.videopasstoggle):
- print "remuxcaps is " + str(self.remuxcaps)
+ # print "remuxcaps is " + str(self.remuxcaps)
self.uridecoder.set_property("caps", self.remuxcaps)
self.pipeline.add(self.uridecoder)
@@ -127,20 +130,21 @@ class Transcoder(gobject.GObject):
sourcecaps = x.get_caps()
if videointersect == ("EMPTY"):
videointersect = sourcecaps.intersect(gst.caps_from_string(self.videocaps))
- print "muxer video intersect is " + str(videointersect)
+ # print "muxer video intersect is " + str(videointersect)
if videointersect != ("EMPTY"):
- print "pad is X which is " + str(x)
+ # print "pad is X which is " + str(x)
self.containermuxervideosinkpad = self.containermuxer.get_request_pad(x.name_template)
- print "self.containermuxervideosinkpad " + str(self.containermuxervideosinkpad)
+ # print "self.containermuxervideosinkpad " + str(self.containermuxervideosinkpad)
if audiointersect == ("EMPTY"):
- print "self.audiocaps is " + str(self.audiocaps)
+ # print "self.audiocaps is " + str(self.audiocaps)
+ # print "caps converted audio caps is " + str(gst.caps_from_string(self.audiocaps))
audiointersect = sourcecaps.intersect(gst.caps_from_string(self.audiocaps))
- print "muxer audio intersect is " + str(audiointersect)
+ # print "muxer audio intersect is " + str(audiointersect)
if audiointersect != ("EMPTY"):
self.containermuxeraudiosinkpad = self.containermuxer.get_request_pad(x.name_template)
- print "self.containermuxeraudiosinkpad " + str(self.containermuxeraudiosinkpad)
- else:
- print "audiointersect is EMPTY and thus no self.containermuxeraudiosinkpad gets created"
+ # print "self.containermuxeraudiosinkpad " + str(self.containermuxeraudiosinkpad)
+ # else:
+ # print "audiointersect is EMPTY and thus no self.containermuxeraudiosinkpad gets created"
self.pipeline.add(self.containermuxer)
@@ -149,17 +153,17 @@ class Transcoder(gobject.GObject):
self.pipeline.add(self.transcodefileoutput)
self.containermuxer.link(self.transcodefileoutput)
- print "reached end of first pipeline bulk, next step dynamic audio/video pads"
+ # print "reached end of first pipeline bulk, next step dynamic audio/video pads"
else:
self.multipassfakesink = gst.element_factory_make("fakesink", "multipassfakesink")
self.pipeline.add(self.multipassfakesink)
self.uridecoder.set_state(gst.STATE_PAUSED)
- print "setting uridcodebin to paused"
+ # print "setting uridcodebin to paused"
self.BusMessages = self.BusWatcher()
self.uridecoder.connect("no-more-pads", self.noMorePads) # we need to wait on this one before going further
- print "connecting to no-more-pads"
+ # print "connecting to no-more-pads"
# Get hold of all needed data from the XML profile files.
def provide_presets(self):
devices = presets.get()
@@ -279,7 +283,7 @@ class Transcoder(gobject.GObject):
self.transcodefileoutput.set_state(gst.STATE_PAUSED)
self.containermuxer.set_state(gst.STATE_PAUSED)
glib.idle_add(self.idlePlay)
- print "No More pads received"
+ # print "No More pads received"
def idlePlay(self):
self.Pipeline("playing")
@@ -322,7 +326,7 @@ class Transcoder(gobject.GObject):
if (self.multipass == False) or (self.passcounter == int(0)):
self.audioconverter = gst.element_factory_make("audioconvert")
self.pipeline.add(self.audioconverter)
-
+ print "self.AudioEncoderPlugin is " + str(self.AudioEncoderPlugin)
self.audioencoder = gst.element_factory_make(self.AudioEncoderPlugin)
self.pipeline.add(self.audioencoder)
if self.preset != "nopreset":
@@ -360,8 +364,8 @@ class Transcoder(gobject.GObject):
self.acapsfilter.set_state(gst.STATE_PAUSED)
self.audioencoder.set_state(gst.STATE_PAUSED)
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
- print "containermuxer audio sinkpad is " + str(self.containermuxeraudiosinkpad)
self.multiqueueaudiosrcpad.link(self.containermuxeraudiosinkpad)
+ print "containermuxer audio sinkpad is " + str(self.containermuxeraudiosinkpad)
else:
# TODO: dynamically plug correct parser. Iterate on parsers and intersect.
@@ -394,7 +398,7 @@ class Transcoder(gobject.GObject):
self.audioparse = gst.element_factory_make(self.aparserelement)
self.pipeline.add(self.audioparse)
- print "audiopad " + str(self.multiqueueaudiosinkpad)
+ # print "audiopad " + str(self.multiqueueaudiosinkpad)
sink_pad.link(self.audioparse.get_static_pad("sink"))
self.audioparse.get_static_pad("src").link(self.multiqueueaudiosinkpad)
self.multiqueueaudiosrcpad.link(self.containermuxeraudiosinkpad)
@@ -403,7 +407,7 @@ class Transcoder(gobject.GObject):
elif c.startswith("video/"):
if self.videopasstoggle == False:
- print "Got an video cap"
+ # print "Got an video cap"
self.colorspaceconverter = gst.element_factory_make("ffmpegcolorspace")
self.pipeline.add(self.colorspaceconverter)
@@ -460,7 +464,7 @@ class Transcoder(gobject.GObject):
self.colorspaceconvert3 = gst.element_factory_make("ffmpegcolorspace")
self.pipeline.add(self.colorspaceconvert3)
- print "self.VideoEncoderPlugin is " + str(self.VideoEncoderPlugin)
+ # print "self.VideoEncoderPlugin is " + str(self.VideoEncoderPlugin)
self.videoencoder = gst.element_factory_make(self.VideoEncoderPlugin)
self.pipeline.add(self.videoencoder)
if self.preset != "nopreset":
@@ -521,15 +525,15 @@ class Transcoder(gobject.GObject):
self.videoencoder.set_state(gst.STATE_PAUSED)
if self.multipass == False or (self.passcounter == int(0)):
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
- print "self.multiqueuevideosrcpad is hopefully " + str(self.multiqueuevideosrcpad)
+ # print "self.multiqueuevideosrcpad is hopefully " + str(self.multiqueuevideosrcpad)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
else:
- print "videopasstoggle True, remuxing" + str(self.videopasstoggle)
+ # print "videopasstoggle True, remuxing" + str(self.videopasstoggle)
vparsedcaps = gst.caps_from_string(self.videocaps+",parsed=true")
vframedcaps = gst.caps_from_string(self.videocaps+",framed=true")
if (sink_pad.get_caps().is_subset(vparsedcaps)) or (sink_pad.get_caps().is_subset(vframedcaps)):
- print "is framedcaps subset? Yes"
+ # print "is framedcaps subset? Yes"
sink_pad.link(self.multiqueuevideosinkpad)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
@@ -552,7 +556,7 @@ class Transcoder(gobject.GObject):
self.videoparse = gst.element_factory_make(self.vparserelement)
self.pipeline.add(self.videoparse)
- print "videopad " + str(self.multiqueuevideosinkpad)
+ # print "videopad " + str(self.multiqueuevideosinkpad)
sink_pad.link(self.videoparse.get_static_pad("sink"))
self.videoparse.get_static_pad("src").link(self.multiqueuevideosinkpad)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]