Add create fakemixer element for testing.
- GStreamer tests now use this instead of a real mixer. - fakemixer and the autoaudiomixer still need to be moved. - We should probably use a fakesink as output as well.
This commit is contained in:
parent
2d5ba154ed
commit
b796d7c859
@ -21,6 +21,8 @@ class GStreamerError(Exception):
|
||||
# TODO: we might want to add some ranking to the mixers we know about?
|
||||
# TODO: move to mixers module and do from mopidy.mixers import * to install
|
||||
# elements.
|
||||
# TODO: use gst.Bin so we can add the real mixer and have state sync
|
||||
# automatically.
|
||||
class AutoAudioMixer(gst.Element, gst.ImplementsInterface, gst.interfaces.Mixer):
|
||||
__gstdetails__ = ('AutoAudioMixer',
|
||||
'Mixer',
|
||||
@ -31,7 +33,7 @@ class AutoAudioMixer(gst.Element, gst.ImplementsInterface, gst.interfaces.Mixer)
|
||||
gst.Element.__init__(self)
|
||||
self._mixer = self._find_mixer()
|
||||
self._mixer.set_state(gst.STATE_READY)
|
||||
logger.debug('AutoAudioMixer choose: %s', self._mixer.get_name())
|
||||
logger.debug('AutoAudioMixer chose: %s', self._mixer.get_name())
|
||||
|
||||
def _find_mixer(self):
|
||||
registry = gst.registry_get_default()
|
||||
@ -101,6 +103,77 @@ gobject.type_register(AutoAudioMixer)
|
||||
gst.element_register (AutoAudioMixer, 'autoaudiomixer', gst.RANK_MARGINAL)
|
||||
|
||||
|
||||
def create_fake_track(label, min_volume, max_volume, num_channels, flags):
|
||||
class Track(gst.interfaces.MixerTrack):
|
||||
def __init__(self):
|
||||
super(Track, self).__init__()
|
||||
self.volumes = (100,) * self.num_channels
|
||||
|
||||
@gobject.property
|
||||
def label(self):
|
||||
return label
|
||||
|
||||
@gobject.property
|
||||
def min_volume(self):
|
||||
return min_volume
|
||||
|
||||
@gobject.property
|
||||
def max_volume(self):
|
||||
return max_volume
|
||||
|
||||
@gobject.property
|
||||
def num_channels(self):
|
||||
return num_channels
|
||||
|
||||
@gobject.property
|
||||
def flags(self):
|
||||
return flags
|
||||
|
||||
return Track()
|
||||
|
||||
class FakeMixer(gst.Element, gst.ImplementsInterface, gst.interfaces.Mixer):
|
||||
__gstdetails__ = ('FakeMixer',
|
||||
'Mixer',
|
||||
'Fake mixer for use in tests.',
|
||||
'Thomas Adamcik')
|
||||
|
||||
track_label = gobject.property(type=str, default='Master')
|
||||
|
||||
track_min_volume = gobject.property(type=int, default=0)
|
||||
|
||||
track_max_volume = gobject.property(type=int, default=100)
|
||||
|
||||
track_num_channels = gobject.property(type=int, default=2)
|
||||
|
||||
track_flags = gobject.property(type=int,
|
||||
default=(gst.interfaces.MIXER_TRACK_MASTER |
|
||||
gst.interfaces.MIXER_TRACK_OUTPUT))
|
||||
|
||||
def __init__(self):
|
||||
gst.Element.__init__(self)
|
||||
|
||||
def list_tracks(self):
|
||||
track = create_fake_track(self.track_label,
|
||||
self.track_min_volume,
|
||||
self.track_max_volume,
|
||||
self.track_num_channels,
|
||||
self.track_flags)
|
||||
return [track]
|
||||
|
||||
def get_volume(self, track):
|
||||
return track.volumes
|
||||
|
||||
def set_volume(self, track, volumes):
|
||||
track.volumes = volumes
|
||||
|
||||
def set_record(self, track, record):
|
||||
pass
|
||||
|
||||
|
||||
gobject.type_register(FakeMixer)
|
||||
gst.element_register (FakeMixer, 'fakemixer', gst.RANK_MARGINAL)
|
||||
|
||||
|
||||
class GStreamer(ThreadingActor):
|
||||
"""
|
||||
Audio output through `GStreamer <http://gstreamer.freedesktop.org/>`_.
|
||||
|
||||
@ -8,7 +8,7 @@ import sys
|
||||
logger = logging.getLogger('mopidy.utils')
|
||||
|
||||
|
||||
# TODO: user itertools.chain.from_iterable(the_list)?
|
||||
# TODO: use itertools.chain.from_iterable(the_list)?
|
||||
def flatten(the_list):
|
||||
result = []
|
||||
for element in the_list:
|
||||
|
||||
@ -12,6 +12,7 @@ from tests import unittest, path_to_data_dir
|
||||
class GStreamerTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
settings.BACKENDS = ('mopidy.backends.local.LocalBackend',)
|
||||
settings.MIXER = 'fakemixer'
|
||||
self.song_uri = path_to_uri(path_to_data_dir('song1.wav'))
|
||||
self.gstreamer = GStreamer()
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user