예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
파일: base.py 프로젝트: dparker18/Pitivi
    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
예제 #4
0
    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