[transmageddon] Fix video remuxing code, add workaround for h264parse
- From: Christian Fredrik Kalager Schaller <uraeus src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [transmageddon] Fix video remuxing code, add workaround for h264parse
- Date: Sat, 12 Sep 2009 17:54:37 +0000 (UTC)
commit d5826bd110cf2ac9c17a5bdbb5f76b8580e072c3
Author: Christian Schaller <christian schaller collabora co uk>
Date: Sat Sep 12 18:55:33 2009 +0100
Fix video remuxing code, add workaround for h264parse
src/transcoder_engine.py | 23 +++++++++++++++++------
src/transmageddon.py | 8 +++++++-
2 files changed, 24 insertions(+), 7 deletions(-)
---
diff --git a/src/transcoder_engine.py b/src/transcoder_engine.py
index ab8aecc..071a216 100644
--- a/src/transcoder_engine.py
+++ b/src/transcoder_engine.py
@@ -384,7 +384,7 @@ class Transcoder(gobject.GObject):
parseintersect = caps.intersect(gst.caps_from_string(self.audiocaps))
if parseintersect != ("EMPTY"):
self.aparserelement = parser
- print "parser " + str(parser)
+ print "audio parser " + str(parser)
# TODO: Need to handle the case when no parser is found
self.audioparse = gst.element_factory_make(self.aparserelement)
@@ -508,33 +508,44 @@ class Transcoder(gobject.GObject):
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
else:
+ # Code for passthrough mode
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)):
sink_pad.link(self.multiqueuevideosinkpad)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
+ print "video pad is subset"
else:
+ print "video pad is not subset"
flist = gst.registry_get_default().get_feature_list(gst.ElementFactory)
parsers = []
for fact in flist:
if self.list_compat(["Codec", "Parser","Video"], fact.get_klass().split('/')):
parsers.append(fact.get_name())
+ elif self.list_compat(["Codec", "Parser"], fact.get_klass().split('/')):
+ parsers.append(fact.get_name())
for x in parsers:
parser = x
+ print parser
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]
parseintersect = ("EMPTY")
for caps in sinkcaps:
if parseintersect == ("EMPTY"):
+ print "trying to intersect videoparser"
+ print "parser caps are " + gst.Caps.to_string(caps)
+ print "incomign caps are " + self.videocaps
parseintersect = caps.intersect(gst.caps_from_string(self.videocaps))
if parseintersect != ("EMPTY"):
self.vparserelement = parser
- self.videoparse = gst.element_factory_make(self.vparserelement)
- self.pipeline.add(self.videoparse)
- sink_pad.link(self.videoparse.get_static_pad("sink"))
- self.videoparse.get_static_pad("src").link(self.multiqueuevideosinkpad)
- self.videoparse.set_state(gst.STATE_PAUSED)
+ print "video parser " + str(parser)
+
+ self.videoparse = gst.element_factory_make(self.vparserelement)
+ self.pipeline.add(self.videoparse)
+ sink_pad.link(self.videoparse.get_static_pad("sink"))
+ self.videoparse.get_static_pad("src").link(self.multiqueuevideosinkpad)
+ self.videoparse.set_state(gst.STATE_PAUSED)
self.multiqueuevideosrcpad.link(self.containermuxervideosinkpad)
self.gstmultiqueue.set_state(gst.STATE_PAUSED)
diff --git a/src/transmageddon.py b/src/transmageddon.py
index 7a8a8ae..4dfe6bf 100644
--- a/src/transmageddon.py
+++ b/src/transmageddon.py
@@ -53,7 +53,7 @@ if (major == 2) and (minor < 18):
sys.exit(1)
os.environ["GST_DEBUG_DUMP_DOT_DIR"] = "/tmp"
-# os.putenv('GST_DEBUG_DUMP_DIR_DIR', '/tmp')
+os.putenv('GST_DEBUG_DUMP_DIR_DIR', '/tmp')
supported_containers = [
"Ogg",
@@ -665,6 +665,12 @@ class TransmageddonUI (gtk.glade.XML):
about.AboutDialog()
def on_debug_activate(self, widget):
+ dotfile = "/tmp/transmageddon-debug-graph.dot"
+ pngfile = "/tmp/transmageddon-pipeline.png"
+ if os.access(dotfile, os.F_OK):
+ os.remove(dotfile)
+ if os.access(pngfile, os.F_OK):
+ os.remove(pngfile)
gst.DEBUG_BIN_TO_DOT_FILE (self._transcoder.pipeline, gst.DEBUG_GRAPH_SHOW_ALL, 'transmageddon-debug-graph')
print "The debug feature requiers Eye of GNOME (eog) and graphviz (dot) to be installed"
os.system("dot -Tpng -o /tmp/transmageddon-pipeline.png /tmp/transmageddon-debug-graph.dot")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]