def create_pipeline(self): unparsed = self.__pipeline self.pipeline_string = self.parse_pipeline(unparsed) try: # don't bother creating a gstreamer pipeline # pipeline = gst.parse_launch(self.pipeline_string) return None except gobject.GError, e: self.warning('Could not parse pipeline: %s' % e.message) raise errors.PipelineParseError(e.message)
class ParseLaunchComponent(FeedComponent): """A component using gst-launch syntax @cvar checkTimestamp: whether to check continuity of timestamps for eaters @cvar checkOffset: whether to check continuity of offsets for eaters """ DELIMITER = '@' # can be set by subclasses checkTimestamp = False checkOffset = False # keep these as class variables for the tests FDSRC_TMPL = 'fdsrc name=%(name)s' DEPAY_TMPL = 'gdpdepay name=%(name)s-depay' FEEDER_TMPL = 'gdppay name=%(name)s-pay ! multifdsink sync=false '\ 'name=%(name)s buffers-max=500 buffers-soft-max=450 '\ 'recover-policy=1' EATER_TMPL = None def init(self): if not gstreamer.get_plugin_version('coreelements'): raise errors.MissingElementError('identity') if not gstreamer.element_factory_has_property( 'identity', 'check-imperfect-timestamp'): self.checkTimestamp = False self.checkOffset = False self.addMessage( messages.Info( T_( N_("You will get more debugging information " "if you upgrade to GStreamer 0.10.13 or later.")))) self.EATER_TMPL = self.FDSRC_TMPL + ' %(queue)s ' + self.DEPAY_TMPL if self.checkTimestamp or self.checkOffset: self.EATER_TMPL += " ! identity name=%(name)s-identity silent=TRUE" if self.checkTimestamp: self.EATER_TMPL += " check-imperfect-timestamp=1" if self.checkOffset: self.EATER_TMPL += " check-imperfect-offset=1" ### FeedComponent interface implementations def create_pipeline(self): try: unparsed = self.get_pipeline_string(self.config['properties']) except errors.MissingElementError, e: self.warning('Missing %s element' % e.args[0]) m = messages.Error( T_( N_("The worker does not have the '%s' element installed.\n" "Please install the necessary plug-in and restart " "the component.\n"), e.args[0])) self.addMessage(m) raise errors.ComponentSetupHandledError(e) self.pipeline_string = self.parse_pipeline(unparsed) try: pipeline = gst.parse_launch(self.pipeline_string) except gobject.GError, e: self.warning('Could not parse pipeline: %s' % e.message) m = messages.Error(T_( N_("GStreamer error: could not parse component pipeline.")), debug="Reason: %s\nPipeline: %s" % (e.message, self.pipeline_string)) self.addMessage(m) raise errors.PipelineParseError(e.message)