def get_element_property(self, element_name, property): 'Gets a property of an element in the GStreamer pipeline.' self.debug("%s: getting property %s of element %s" % (self.getName(), property, element_name)) element = self.get_element(element_name) if not element: msg = "Element '%s' does not exist" % element_name self.warning(msg) raise errors.PropertyError(msg) self.debug('getting property %s on element %s' % (property, element_name)) try: value = element.get_property(property) except (ValueError, TypeError): msg = "Property '%s' on element '%s' does not exist" % ( property, element_name) self.warning(msg) raise errors.PropertyError(msg) # param enums and enums need to be returned by integer value if isinstance(value, gobject.GEnum): value = int(value) return value
def start(self, component=None): self.filename = self.args['properties']['logfile'] try: self.file = open(self.filename, 'a') except IOError, data: raise errors.PropertyError('could not open log file %s ' 'for writing (%s)' % (self.filename, data[1]))
def gobject_set_property(object, property, value): """ Set the given property to the given value on the given object. @type object: L{gobject.GObject} @type property: string @param value: value to set property to """ for pspec in gobject.list_properties(object): if pspec.name == property: break else: raise errors.PropertyError( "Property '%s' in element '%s' does not exist" % (property, object.get_property('name'))) if pspec.value_type in (gobject.TYPE_INT, gobject.TYPE_UINT, gobject.TYPE_INT64, gobject.TYPE_UINT64): try: value = int(value) except ValueError: msg = "Invalid value given for property '%s' in element '%s'" % ( property, object.get_property('name')) raise errors.PropertyError(msg) elif pspec.value_type == gobject.TYPE_BOOLEAN: if value == 'False': value = False elif value == 'True': value = True else: value = bool(value) elif pspec.value_type in (gobject.TYPE_DOUBLE, gobject.TYPE_FLOAT): value = float(value) elif pspec.value_type == gobject.TYPE_STRING: value = str(value) # FIXME: this is superevil ! we really need to find a better way # of checking if this property is a param enum # also, we only allow int for now elif repr(pspec.__gtype__).startswith("<GType GParamEnum"): value = int(value) else: raise errors.PropertyError('Unknown property type: %s' % pspec.value_type) object.set_property(property, value)
def set_element_property(self, element_name, property, value): 'Sets a property on an element in the GStreamer pipeline.' self.debug("%s: setting property %s of element %s to %s" % (self.getName(), property, element_name, value)) element = self.get_element(element_name) if not element: msg = "Element '%s' does not exist" % element_name self.warning(msg) raise errors.PropertyError(msg) self.debug('setting property %s on element %r to %s' % (property, element_name, value)) pygobject.gobject_set_property(element, property, value)