[transmageddon/gtk3: 3/3] Commit latest changes in port



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]