def show_user_manual(): time_now = int(time.time()) for uri in (APPMANUALURL_OFFLINE, APPMANUALURL_ONLINE): try: gtk.show_uri(None, uri, time_now) return except Exception, e: log.debug("utils", "Failed loading URI %s: %s", uri, e) continue
def show_user_manual(page=None): """ Display the user manual with Yelp. Optional: for contextual help, a page ID can be specified. """ time_now = int(time.time()) for uri in (APPMANUALURL_OFFLINE, APPMANUALURL_ONLINE): if page is not None: uri += "#" + page try: Gtk.show_uri(None, uri, time_now) return except Exception, e: log.debug("utils", "Failed loading URI %s: %s", uri, e) continue
def get_controllable_properties(element): """ Returns a list of controllable properties for the given element (and child if it's a container). The list is made of tuples containing: * The GstObject * The GParamspec """ log.debug("utils", "element %r, %d", element, isinstance(element, gst.Bin)) res = [] if isinstance(element, gst.Bin): for child in element.elements(): res.extend(get_controllable_properties(child)) else: for prop in gobject.list_properties(element): if prop.flags & gst.PARAM_CONTROLLABLE: log.debug("utils", "adding property %r", prop) res.append((element, prop)) return res
def get_controllable_properties(element): """ Returns a list of controllable properties for the given element (and child if it's a container). The list is made of tuples containing: * The GstObject * The GParamspec """ log.debug("utils", "element %r, %d", element, isinstance(element, Gst.Bin)) res = [] if isinstance(element, Gst.Bin): for child in element.elements(): res.extend(get_controllable_properties(child)) else: for prop in GObject.list_properties(element): if prop.flags & Gst.PARAM_CONTROLLABLE: log.debug("utils", "adding property %r", prop) res.append((element, prop)) return res
def fixate_caps_with_default_values(template, restrictions, default_values, prev_vals=None): """Fixates @template taking into account other restriction values. The resulting caps will only contain the fields from @default_values, @restrictions and @prev_vals Args: template (Gst.Caps) : The pad template to fixate. restrictions (Gst.Caps): Restriction caps to be used to fixate @template. This is the minimum requested restriction. Can be None default_values (dict) : Dictionary containing the minimal fields to be fixated and some default values (can be ranges). prev_vals (Optional[Gst.Caps]) : Some values that were previously used, and should be kept instead of the default values if possible. Returns: Gst.Caps: The caps resulting from the previously defined operations. """ res = Gst.Caps.new_empty() fields = set(default_values.keys()) if restrictions: for struct in restrictions: fields.update(struct.keys()) log.log("utils", "Intersect template %s with the restriction %s", template, restrictions) tmp = template.intersect(restrictions) if not tmp: log.warning("utils", "No common format between template %s and restrictions %s", template, restrictions) else: template = tmp for struct in template: struct = struct.copy() for field in fields: prev_val = None default_val = default_values.get(field) if prev_vals and prev_vals[0].has_field(field): prev_val = prev_vals[0][field] if not struct.has_field(field): if prev_val: struct[field] = prev_val elif default_val: struct[field] = default_val else: v = None struct_val = struct[field] if prev_val: v = intersect(struct_val, prev_val) if v is not None: struct[field] = v if v is None and default_val: v = intersect(struct_val, default_val) if v is not None: struct[field] = v else: log.debug("utils", "Field %s from %s is plainly fixated", field, struct) struct = struct.copy() for key in struct.keys(): if key not in fields: struct.remove_field(key) log.debug("utils", "Adding %s to resulting caps", struct) res.append_structure(struct) res.mini_object.refcount += 1 res = res.fixate() log.debug("utils", "Fixated %s", res) return res
def fixate_caps_with_default_values(template, restrictions, default_values, prev_vals=None): """Fixates @template taking into account other restriction values. The resulting caps will only contain the fields from @default_values, @restrictions and @prev_vals Args: template (Gst.Caps) : The pad template to fixate. restrictions (Gst.Caps): Restriction caps to be used to fixate @template. This is the minimum requested restriction. Can be None default_values (dict) : Dictionary containing the minimal fields to be fixated and some default values (can be ranges). prev_vals (Optional[Gst.Caps]) : Some values that were previously used, and should be kept instead of the default values if possible. Returns: Gst.Caps: The caps resulting from the previously defined operations. """ log.log("utils", "\ntemplate=Gst.Caps(\"%s\")," "\nrestrictions=%s,\n" "default_values=%s,\n" "prev_vals=Gst.Caps(\"%s\"),\n", "\"\n \"".join(template.to_string().split(";")), "Gst.Caps(\"%s\')" % restrictions if restrictions is not None else "None", default_values, "Gst.Caps(\"%s\')" % prev_vals if prev_vals is not None else "None") res = Gst.Caps.new_empty() fields = set(default_values.keys()) if restrictions: for struct in restrictions: fields.update(struct.keys()) log.log("utils", "Intersect template %s with the restriction %s", template, restrictions) tmp = template.intersect(restrictions) if not tmp: log.warning("utils", "No common format between template %s and restrictions %s", template, restrictions) else: template = tmp for struct in template: struct = struct.copy() for field in fields: prev_val = None default_val = default_values.get(field) if prev_vals and prev_vals[0].has_field(field): prev_val = prev_vals[0][field] if not struct.has_field(field): if prev_val: struct[field] = prev_val elif default_val: struct[field] = default_val else: value = None struct_val = struct[field] if prev_val: value = intersect(struct_val, prev_val) if value is not None: struct[field] = value if value is None and default_val: value = intersect(struct_val, default_val) if value is not None: struct[field] = value else: log.debug("utils", "Field %s from %s is plainly fixated", field, struct) struct = struct.copy() for key in struct.keys(): if key not in fields: struct.remove_field(key) if prev_vals and struct.is_equal(prev_vals[0]): res = Gst.Caps.new_empty() res.append_structure(prev_vals[0]) res.mini_object.refcount += 1 res = res.fixate() log.debug("utils", "Returning previous caps %s as it is fully compatible" " with the template", res) return res log.debug("utils", "Adding %s to resulting caps", struct) res.append_structure(struct) res.mini_object.refcount += 1 log.debug("utils", "Fixating %s", res) res = res.fixate() log.debug("utils", "Fixated %s", res) return res