[transmageddon/gtk3: 3/3] Commit latest changes in port
- From: Christian Fredrik Kalager Schaller <uraeus src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [transmageddon/gtk3: 3/3] Commit latest changes in port
- Date: Thu, 24 Nov 2011 13:55:42 +0000 (UTC)
commit f8d469f4fdcff328cc0ff85230f2e134e2a2384c
Author: Christian Fredrik Kalager Schaller <christian schaller collabora co uk>
Date: Tue Nov 22 12:19:58 2011 +0000
Commit latest changes in port
src/codecfinder.py | 63 ++++++++++++++++++++++++---------------------
src/transcoder_engine.py | 34 ++++++++++++++-----------
src/transmageddon.py | 13 +++++----
3 files changed, 60 insertions(+), 50 deletions(-)
---
diff --git a/src/codecfinder.py b/src/codecfinder.py
index 3b02a2f..1b021cc 100644
--- a/src/codecfinder.py
+++ b/src/codecfinder.py
@@ -24,9 +24,9 @@
# REMAINING IS FFMUXERS AND WAVPACK
-import pygst
-pygst.require("0.10")
-import gst
+from gi.repository import Gst
+from gi.repository import GstPbutils
+#Gst.init(None)
def list_compat(a1, b1):
for x1 in a1:
@@ -111,6 +111,9 @@ codecmap = { 'Vorbis' : "audio/x-vorbis", \
#This code checks for available muxers and return a unique caps string
#for each. It also creates a python dictionary mapping the caps strings
#to concrete element names.
+
+# This part of the file might be mostly uneeded due to the encodebin port, seems remaining code
+# calling it could be removed even if its a biggish effort
#####
def get_muxer_element(containercaps):
@@ -119,32 +122,34 @@ def get_muxer_element(containercaps):
to element names. Then return elementname
"""
- flist = gst.registry_get_default().get_feature_list(gst.ElementFactory)
+ flist = Gst.Registry.get_default().get_feature_list(Gst.ElementFactory)
muxers = []
features = []
elementname = False
for fact in flist:
- # FIXME: the 'and not' part of this line should be removed, but it has to
- # stay in until Ranks have been set on most muxers in GStreamer. If
- # removed now we get lots of failures due to ending up with broken muxers
- if list_compat(["Codec", "Muxer"], fact.get_klass().split('/')) and not \
- fact.get_name().startswith('ffmux'):
+ # This code is a lot simpler than what I used with 0.10 thanks to the list_is_type call.
+ # 16 is the 'muxer' class of plugins
+ if Gst.ElementFactory.list_is_type(fact, 16):
+ test=fact.get_name()
+ print "muxer is " + str(test)
muxers.append(fact.get_name())
features.append(fact)
muxerfeature = dict(zip(muxers, features))
- incomingcaps = containercaps
- for x in muxers:
- element = x
- factory = gst.registry_get_default().lookup_feature(str(x))
+ incomingcaps = Gst.caps_from_string(containercaps)
+ print "containercaps is " + str(containercaps)
+ for muxer in muxers:
+ element = muxer
+ factory = Gst.Registry.get_default().lookup_feature(str(muxer))
sinkcaps = [x.get_caps() for x in factory.get_static_pad_templates() \
- if x.direction == gst.PAD_SRC]
+ if x.direction == Gst.PadDirection.SRC]
+ print "sinkcaps are " + str(sinkcaps)
for caps in sinkcaps:
if caps.intersect(incomingcaps):
if elementname == False:
elementname = element
else:
- mostrecent = gst.PluginFeature.get_rank(muxerfeature[element])
- original = gst.PluginFeature.get_rank(muxerfeature[elementname])
+ mostrecent = Gst.PluginFeature.get_rank(muxerfeature[element])
+ original = Gst.PluginFeature.get_rank(muxerfeature[elementname])
if mostrecent >= original:
elementname = element
return elementname
@@ -164,13 +169,13 @@ def get_audio_encoder_element(audioencodercaps):
will return False.
"""
- flist = gst.registry_get_default().get_feature_list(gst.ElementFactory)
+ flist = Gst.Registry.get_default().get_feature_list(Gst.ElementFactory)
encoders = []
features = []
elementname = False
for fact in flist:
if list_compat(["Codec", "Encoder", "Audio"], \
- fact.get_klass().split('/')):
+ fact.get_metadata().split('/')):
# excluding wavpackenc as the fact that it got two SRC pads mess up
# the logic of this code
if fact.get_name() != 'wavpackenc':
@@ -180,16 +185,16 @@ def get_audio_encoder_element(audioencodercaps):
incomingcaps = audioencodercaps
for x in encoders:
element = x
- factory = gst.registry_get_default().lookup_feature(str(x))
+ 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]
+ if x.direction == Gst.PAD_SRC]
for caps in sinkcaps:
if caps.intersect(incomingcaps):
if elementname == False:
elementname = element
else:
- mostrecent = gst.PluginFeature.get_rank(encoderfeature[element])
- original = gst.PluginFeature.get_rank(encoderfeature[elementname])
+ mostrecent = Gst.PluginFeature.get_rank(encoderfeature[element])
+ original = Gst.PluginFeature.get_rank(encoderfeature[elementname])
if mostrecent >= original:
elementname = element
return elementname
@@ -209,33 +214,33 @@ def get_video_encoder_element(videoencodercaps):
will return False.
"""
- flist = gst.registry_get_default().get_feature_list(gst.ElementFactory)
+ flist = Gst.Registry.get_default().get_feature_list(Gst.ElementFactory)
encoders = []
features = []
elementname = False
for fact in flist:
if list_compat(["Codec", "Encoder", "Video"], \
- fact.get_klass().split('/')):
+ fact.get_metadata().split('/')):
encoders.append(fact.get_name())
features.append(fact)
elif list_compat(["Codec", "Encoder", "Image"], \
- fact.get_klass().split('/')):
+ fact.get_metadata().split('/')):
encoders.append(fact.get_name())
features.append(fact)
encoderfeature = dict(zip(encoders, features))
incomingcaps = videoencodercaps
for x in encoders:
element = x
- factory = gst.registry_get_default().lookup_feature(str(x))
+ 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]
+ if x.direction == Gst.PAD_SRC]
for caps in sinkcaps:
if caps.intersect(incomingcaps):
if elementname == False:
elementname = element
else:
- mostrecent = gst.PluginFeature.get_rank(encoderfeature[element])
- original = gst.PluginFeature.get_rank(encoderfeature[elementname])
+ mostrecent = Gst.PluginFeature.get_rank(encoderfeature[element])
+ original = Gst.PluginFeature.get_rank(encoderfeature[elementname])
if mostrecent >= original:
elementname = element
return elementname
diff --git a/src/transcoder_engine.py b/src/transcoder_engine.py
index 6206ca0..4126c7b 100644
--- a/src/transcoder_engine.py
+++ b/src/transcoder_engine.py
@@ -21,9 +21,10 @@ import os
import codecfinder
import presets
from gi.repository import GObject
+GObject.threads_init()
from gi.repository import Gst
+Gst.init(None)
from gi.repository import GstPbutils
-#Gst.init(None)
class Transcoder(GObject.GObject):
@@ -42,7 +43,7 @@ class Transcoder(GObject.GObject):
self.container = CONTAINERCHOICE
self.audiocaps = AUDIOCODECVALUE
if self.container != False:
- self.containercaps = Gst.caps_from_string_from_string(codecfinder.containermap[CONTAINERCHOICE])
+ self.containercaps = Gst.caps_from_string(codecfinder.containermap[CONTAINERCHOICE])
# special case mp3 which is a no-container format with a container (id3mux)
else:
if self.audiocaps.intersect(Gst.caps_from_string("audio/mpeg, mpegversion=1, layer=3")):
@@ -101,12 +102,15 @@ class Transcoder(GObject.GObject):
# Create transcoding pipeline
- self.pipeline = Gst.Pipeline("TranscodingPipeline")
- self.pipeline.set_state(Gst.STATE_PAUSED)
+ self.pipeline = Gst.Pipeline()
+ self.pipeline.set_state(Gst.State.PAUSED)
self.uridecoder = Gst.ElementFactory.make("uridecodebin", "uridecoder")
+ print "self.uridecoder " + str(self.uridecoder)
+ print "FILECHOSEN " + str(FILECHOSEN)
self.uridecoder.set_property("uri", FILECHOSEN)
self.uridecoder.connect("pad-added", self.OnDynamicPad)
+ self.uridecoder.set_state(Gst.State.PAUSED)
# first check if we have a container format, if not set up output for possible outputs
# should not be hardcoded
@@ -140,7 +144,7 @@ class Transcoder(GObject.GObject):
self.encodebin.set_property("profile", self.encodebinprofile)
self.encodebin.set_property("avoid-reencoding", True)
self.pipeline.add(self.encodebin)
- self.encodebin.set_state(Gst.STATE_PAUSED)
+ self.encodebin.set_state(Gst.State.PAUSED)
if self.videopasstoggle==False:
if self.container != False:
@@ -151,14 +155,14 @@ class Transcoder(GObject.GObject):
self.deinterlacer = Gst.ElementFactory.make("deinterlace")
self.pipeline.add(self.deinterlacer)
- self.colorspaceconversion = Gst.ElementFactory.make("ffmpegcolorspace")
+ self.colorspaceconversion = Gst.ElementFactory.make("videoconvert")
self.pipeline.add(self.colorspaceconversion)
self.deinterlacer.link(self.colorspaceconversion)
self.colorspaceconversion.link(self.videoflipper)
- self.deinterlacer.set_state(Gst.STATE_PAUSED)
- self.colorspaceconversion.set_state(Gst.STATE_PAUSED)
- self.videoflipper.set_state(Gst.STATE_PAUSED)
+ self.deinterlacer.set_state(Gst.State.PAUSED)
+ self.colorspaceconversion.set_state(Gst.State.PAUSED)
+ self.videoflipper.set_state(Gst.State.PAUSED)
self.remuxcaps = Gst.Caps()
if self.audiopasstoggle:
@@ -191,7 +195,7 @@ class Transcoder(GObject.GObject):
self.pipeline.add(self.transcodefileoutput)
self.encodebin.link(self.transcodefileoutput)
- self.uridecoder.set_state(Gst.STATE_PAUSED)
+ self.uridecoder.set_state(Gst.State.PAUSED)
# print "setting uridcodebin to paused"
self.BusMessages = self.BusWatcher()
@@ -280,7 +284,7 @@ class Transcoder(GObject.GObject):
def noMorePads(self, dbin):
if (self.multipass == False) or (self.passcounter == int(0)):
- self.transcodefileoutput.set_state(Gst.STATE_PAUSED)
+ self.transcodefileoutput.set_state(Gst.State.PAUSED)
glib.idle_add(self.idlePlay)
# print "No More pads received"
@@ -312,9 +316,9 @@ class Transcoder(GObject.GObject):
if os.access(self.cachefile, os.F_OK):
os.remove(self.cachefile)
self.emit('got-eos')
- self.pipeline.set_state(Gst.STATE_NULL)
+ self.pipeline.set_state(Gst.State.NULL)
elif mtype == Gst.MESSAGE_APPLICATION:
- self.pipeline.set_state(Gst.STATE_NULL)
+ self.pipeline.set_state(Gst.State.NULL)
self.pipeline.remove(self.uridecoder)
return True
@@ -373,6 +377,6 @@ class Transcoder(GObject.GObject):
def Pipeline (self, state):
if state == ("playing"):
- self.pipeline.set_state(Gst.STATE_PLAYING)
+ self.pipeline.set_state(Gst.State.PLAYING)
elif state == ("null"):
- self.pipeline.set_state(Gst.STATE_NULL)
+ self.pipeline.set_state(Gst.State.NULL)
diff --git a/src/transmageddon.py b/src/transmageddon.py
index 11ec05e..029bcef 100644
--- a/src/transmageddon.py
+++ b/src/transmageddon.py
@@ -603,7 +603,7 @@ class TransmageddonUI:
if self.container != False:
self.check_for_passthrough(self.container)
else:
- self.check_for_elements()
+ # self.check_for_elements()
if self.missingtoggle==False:
self._start_transcoding()
if self.container != False:
@@ -642,11 +642,11 @@ class TransmageddonUI:
containerelement = codecfinder.get_muxer_element(container)
if containerelement == False:
self.containertoggle = True
- self.check_for_elements()
+ # self.check_for_elements()
else:
factory = Gst.Registry.get_default().lookup_feature(containerelement)
for x in factory.get_static_pad_templates():
- if (x.direction == Gst.PAD_SINK):
+ if (x.direction == Gst.PadDirection.SINK):
sourcecaps = x.get_caps()
if self.havevideo == True:
if videointersect == ("EMPTY"):
@@ -767,7 +767,8 @@ class TransmageddonUI:
# but it is a rather narrow corner case when it fails
self._start_transcoding()
elif donemessage == GstPbutils.INSTALL_PLUGINS_PARTIAL_SUCCESS:
- self.check_for_elements()
+ print "Plugin install not fully succesfull"
+ #self.check_for_elements()
elif donemessage == GstPbutils.INSTALL_PLUGINS_NOT_FOUND:
context_id = self.StatusBar.get_context_id("EOS")
self.StatusBar.push(context_id, \
@@ -871,14 +872,14 @@ class TransmageddonUI:
self.ProgressBar.set_text(_("Pass %(count)d Progress") % {'count': self.passcounter})
if self.haveaudio:
if self.audiodata.has_key("samplerate"):
- self.check_for_elements()
+ # self.check_for_elements()
if self.missingtoggle==False:
self._start_transcoding()
else:
self.waiting_for_signal="True"
elif self.havevideo:
if self.videodata.has_key("videoheight"):
- self.check_for_elements()
+ # self.check_for_elements()
if self.missingtoggle==False:
self._start_transcoding()
else:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]