1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 from flumotion.worker.checks import check
23 from flumotion.common import messages, log
24
25 import gst
26
27 from gst010 import do_element_check
28
30 """
31 Probe the given GStreamer element factory with the given device for
32 audio mixer tracks.
33 Return a deferred firing a result.
34
35 The result is either:
36 - succesful, with a None value: no device found
37 - succesful, with a human-readable device name and a list of mixer
38 track labels.
39 - failed
40
41 @rtype: L{twisted.internet.defer.Deferred}
42 """
43 result = messages.Result()
44
45 def get_tracks(element):
46
47 if not element.implements_interface(gst.interfaces.Mixer):
48 msg = 'Cannot get mixer tracks from the device. '\
49 'Check permissions on the mixer device.'
50 log.debug('checks', "returning failure: %s" % msg)
51 raise check.CheckProcError(msg)
52 return (element.get_property('device-name'),
53 [track.label for track in element.list_tracks()])
54
55 pipeline = '%s name=source device=%s ! audio/x-raw-int,channels=%d ! fakesink' % (source_factory, device, channels)
56 d = do_element_check(pipeline, 'source', get_tracks,
57 set_state_deferred = True)
58
59 d.addCallback(check.callbackResult, result)
60 d.addErrback(check.errbackNotFoundResult, result, id, device)
61 d.addErrback(check.errbackResult, result, id, device)
62
63 return d
64