def tryV4L1(_): log.debug('webcam', 'trying v4l1') pipeline = 'v4lsrc name=source device=%s ! fakesink' % (device, ) d = do_element_check(pipeline, 'source', probeDevice, state=gst.STATE_PAUSED, set_state_deferred=True) return d
def checkDVBVideo(p, mid='check-dvb-video'): """ @rtype: L{twisted.internet.defer.Deferred} """ result = messages.Result() def get_dvb_video_params(element): pad = element.get_pad('src') if pad.get_negotiated_caps() == None: raise errors.GStreamerError('Pipeline failed to negotiate?') caps = pad.get_negotiated_caps() s = caps[0] w = s['width'] h = s['height'] par = s['pixel-aspect-ratio'] fr = s['framerate'] result = dict(width=w, height=h, par=(par.num, par.denom), framerate=(fr.num, fr.denom)) log.debug('check', 'returning dict %r' % result) return result if p.get('dvb_type') == "T": pipeline = ("dvbsrc modulation=\"QAM %(modulation)d\" " "trans-mode=%(trans_mode)s bandwidth=%(bandwidth)d " "code-rate-lp=%(code_rate_lp)s " "code-rate-hp=%(code_rate_hp)s " "guard=%(guard)d hierarchy=%(hierarchy)d ") % p elif p.get('dvb_type') == "S": pipeline = ("dvbsrc polarity=%(polarity)s symbol-rate=%(symbol_rate)s " "diseqc-source=%(sat)d ") % p if p.get('code-rate-hp'): pipeline += " code-rate-hp=%s" % p.get('code_rate_hp') elif p.get('dvb_type') == "C": pipeline = ("dvbsrc modulation=\"QAM %(modulation)d\" " "code-rate-hp=%(code_rate_hp)s ") % p if p.get('dvb_type') in ["S", "T", "C"]: pipeline += ("frequency=%d adapter=%d frontend=%d " % (p.get('frequency'), p.get('adapter'), p.get('frontend'))) pipeline += ("! mpegtsdemux program-number=%d " "! mpegvideoparse name=parser ! fakesink" % p.get('program_number')) log.debug('check', 'Using pipeline: %s', pipeline) d = do_element_check(pipeline, 'parser', get_dvb_video_params) d.addCallback(check.callbackResult, result) return d
def tryV4L2(): log.debug('webcam', 'trying v4l2') version = gstreamer.get_plugin_version('video4linux2') minVersion = (0, 10, 5, 1) if not version or version < minVersion: log.info('webcam', 'v4l2 version %r too old (need >=%r)', version, minVersion) return defer.fail(NotImplementedError()) pipeline = 'v4l2src name=source device=%s ! fakesink' % (device, ) d = do_element_check(pipeline, 'source', probeDevice, state=gst.STATE_PAUSED, set_state_deferred=True) return d
def checkTVCard(device, mid='check-tvcard'): """ Probe the given device node as a TV card. Return a deferred firing a human-readable device name, a list of channel names (Tuner/Composite/...), and a list of norms (PAL/NTSC/SECAM/...). @rtype: L{twisted.internet.defer.Deferred} """ result = messages.Result() def get_name_channels_norms(element): deviceName = element.get_property('device-name') channels = [channel.label for channel in element.list_channels()] norms = [norm.label for norm in element.list_norms()] return (deviceName, channels, norms) pipeline = 'v4lsrc name=source device=%s ! fakesink' % device d = do_element_check(pipeline, 'source', get_name_channels_norms) d.addCallback(check.callbackResult, result) d.addErrback(check.errbackNotFoundResult, result, mid, device) d.addErrback(check.errbackResult, result, mid, device) return d