def testMatchStreamGroupsBestMatch(self): stream1 = AudioStream(gst.Caps("video/x-theora")) stream2 = AudioStream(gst.Caps("audio/x-vorbis, meh={FAIL, WIN}")) stream3 = AudioStream(gst.Caps("audio/x-vorbis")) stream4 = AudioStream(gst.Caps("video/x-theora")) stream5 = AudioStream(gst.Caps("audio/x-vorbis, meh=WIN")) stream6 = AudioStream(gst.Caps("audio/x-vorbis")) known_best_map = {(stream1, stream4): STREAM_MATCH_SAME_CAPS, (stream2, stream5): STREAM_MATCH_COMPATIBLE_CAPS, (stream3, stream6): STREAM_MATCH_SAME_CAPS} group_a = [stream1, stream2, stream3] group_b = [stream4, stream5, stream6] best_map = match_stream_groups(group_a, group_b) self.failUnlessEqual(known_best_map, best_map) group_a = [stream1, stream2, stream3] group_b = [stream6, stream5, stream4] best_map = match_stream_groups(group_a, group_b) self.failUnlessEqual(known_best_map, best_map) group_a = [stream1, stream2, stream3] group_b = [stream5, stream6, stream4] best_map = match_stream_groups(group_a, group_b) self.failUnlessEqual(known_best_map, best_map)
def testMatchStreamGroupsOrder(self): stream1 = AudioStream(gst.Caps("audio/x-vorbis")) stream2 = AudioStream(gst.Caps("audio/x-vorbis")) stream3 = AudioStream(gst.Caps("audio/x-vorbis")) known_best_map = {(stream1, stream2): STREAM_MATCH_SAME_CAPS} group_a = [stream1] group_b = [stream2, stream3] best_map = match_stream_groups(group_a, group_b) self.failUnlessEqual(known_best_map, best_map)
def makeBin(self, output_stream=None): """ Create a bin that outputs the stream described by C{output_stream}. If C{output_stream} is None, it's up to the implementations to return a suitable "default" bin. @param output_stream: A L{MultimediaStream} @return: The bin. @rtype: C{gst.Bin} @see: L{releaseBin} """ compatible_stream = None self.debug("stream %r", output_stream) if output_stream is not None: self.debug("output_streams:%r", self.output_streams) # get the best stream from self.output_streams that matches # output_stream stream_map_rank = match_stream_groups([output_stream], self.output_streams) stream_map = dict(stream_map_rank.keys()) if output_stream not in stream_map: self.warning("stream not available in map %r", stream_map) raise ObjectFactoryError("can not create stream") compatible_stream = stream_map[output_stream] rank = stream_map_rank[output_stream, compatible_stream] if rank < STREAM_MATCH_COMPATIBLE_CAPS: raise ObjectFactoryError("can not create stream") if self.max_bins != -1 and self.current_bins == self.max_bins: raise ObjectFactoryError('no bins available') bin = self._makeBin(compatible_stream) bin.factory = self self.bins.append(bin) self.current_bins += 1 self.emit('bin-created', bin) return bin