Example #1
0
    def _create_main_pipeline(self, device, size, fps, sync):
        self.pipeline = Gst.Pipeline()

        self.source = Gst.ElementFactory.make('v4l2src', 'source')
        self.source.set_property('device', device)
        self.source.set_property('do-timestamp', 'true')
        # run 'v4l2-ctl --list-ctrls' for full list of controls
        struct, _ = Gst.structure_from_string('name,\
                                               white_balance_temperature_auto=(bool){0},\
                                               backlight_compensation=(int){0},\
                                               exposure_auto=0,\
                                               focus_auto=(bool){0}')
        self.source.set_property('extra-controls', struct)

        caps = Gst.caps_from_string(
            'video/x-raw,format=(string){BGR},width=%d,height=%d,framerate=%d/1'
            % (size[1], size[0], fps))
        self.sink = Gst.ElementFactory.make('appsink', 'sink')
        self.sink.set_property('emit-signals', True)
        self.sink.set_property('sync', sync)
        self.sink.set_property('drop', True)
        self.sink.set_property('max-buffers', 1)
        self.sink.set_property('caps', caps)
        self.sink.emit('pull-preroll')

        self.pipeline.add(self.source)
        self.pipeline.add(self.sink)

        Gst.Element.link(self.source, self.sink)
Example #2
0
        def buffer_probe(pad, buffer, unused_user_data):
            # this comes from another thread
            caps = pad.query_caps(None).to_string()
            kaps = Gst.structure_from_string(caps)
            in_rate = 44100  # kaps[0].get_value('rate')

            # now do necessary filtercaps
            self.rate = in_rate
            if self.bitrate > -1:
                maxsamplerate = get_max_sample_rate(self.bitrate, self.channels)
                if in_rate > maxsamplerate:
                    self.rate = get_preferred_sample_rate(maxsamplerate)
                    self.debug(
                        "rate %d > max rate %d (for %d kbit/sec), "
                        "selecting rate %d instead" % (in_rate, maxsamplerate, self.bitrate, self.rate)
                    )

            caps_str = "audio/x-raw, rate=%d, channels=%d" % (self.rate, self.channels)
            cf.set_property("caps", Gst.caps_from_string(caps_str))
            pad.remove_probe(handle)
            return True
Example #3
0
    def get_pipeline_string(self, properties):
        capsString = properties.get('format', 'video/x-raw')

        if capsString == 'video/x-raw':
            capsString = '%s,format=(string)I420' % capsString

        # Filtered caps
        struct = Gst.structure_from_string(capsString)[0]
        for k in 'width', 'height':
            if k in properties:
                struct.set_value(k, properties[k])

        if 'framerate' in properties:
            framerate = properties['framerate']
            struct.set_value('framerate', Gst.Fraction(framerate[0]/framerate[1]))

        # always set par
        struct.set_value('pixel-aspect-ratio', Gst.Fraction(1/1))
        if 'pixel-aspect-ratio' in properties:
            par = properties['pixel-aspect-ratio']
            struct.set_value('pixel-aspect-ratio', Gst.Fraction(par[0]/par[1]))

        # If RGB, set something ffmpegcolorspace can convert.
        if capsString == 'video/x-raw-rgb':
            struct.set_value('red_mask', 0xff00)
        caps = Gst.Caps.from_string(struct.to_string())

        is_live = 'is-live=true'

        overlay = ""
        overlayTimestamps = properties.get('overlay-timestamps', False)
        if overlayTimestamps:
            overlay = " timeoverlay ! "

        return "videotestsrc %s name=source ! " % is_live + overlay + \
            "identity name=identity silent=TRUE ! %s" % caps