示例#1
0
 def _on_vader_stop(self, vader, pos):
     scarlett.log.debug(Fore.YELLOW + "Inside _on_vader_stop")
     """Send stop position as a message on the bus."""
     import gst
     struct = gst.Structure("stop")
     pos = pos / 1000000000  # ns to s
     struct.set_value("stop", pos)
示例#2
0
    def asr_result(self, asr, text, uttid):
        """Forward result signals on the bus to the main thread."""

        struct = gst.Structure('result')
        struct.set_value('hyp', text)
        struct.set_value('uttid', uttid)
        asr.post_message(gst.message_new_application(asr, struct))
示例#3
0
    def setup(self, conference, pipeline, participant, type):
        relays = []
        for r in self._stream.relays:
            relay = gst.Structure("relay")
            relay.set_value("username", r.username)
            relay.set_value("password", r.password)
            relay.set_value("ip", r.ip)
            relay.set_value("port", r.port, "uint")
            relays.append(relay)

        if type in (MediaSessionType.SIP, MediaSessionType.TUNNELED_SIP):
            if type is MediaSessionType.TUNNELED_SIP:
                compatibility_mode = 3
            else:
                compatibility_mode = 2
            params = {
                "stun-ip": "64.14.48.28",
                "stun-port": 3478,
                "compatibility-mode": compatibility_mode,
                "controlling-mode": self._stream.created_locally,
                "relay-info": relays
            }
        else:
            params = {}
        media_type = media_types[self._stream.name]
        self.fssession = conference.new_session(media_type)
        self.fssession.set_codec_preferences(build_codecs(self._stream.name))
        self.fsstream = self.fssession.new_stream(participant,
                                                  self._stream.direction,
                                                  "nice", params)
        self.fsstream.connect("src-pad-added", self.on_src_pad_added, pipeline)
        source = make_source(self._stream.name)
        pipeline.add(source)
        source.get_pad("src").link(self.fssession.get_property("sink-pad"))
        pipeline.set_state(gst.STATE_PLAYING)
示例#4
0
 def __run_cmd__(self, listener, text, uttid):
     """We're inside __run_cmd__"""
     scarlett.log.debug(Fore.YELLOW + "Inside __run_cmd__")
     struct = gst.Structure('result')
     struct.set_value('hyp', text)
     struct.set_value('uttid', uttid)
     listener.post_message(gst.message_new_application(listener, struct))
示例#5
0
 def vader_stop(self, vader, ts):
     """
     Forward VADER stop signals on the bus to the main thread.
     """
     struct = gst.Structure('vader_stop')
     # Ignore the timestamp for now because gst-python is buggy
     vader.post_message(gst.message_new_application(vader, struct))
示例#6
0
 def asr_result(self, asr, text, uttid):
     print "asr result ----------------"
     struct = gst.Structure("result")
     struct.set_value("hyp", text)
     struct.set_value("uttid", uttid)
     self.debugMsg("asr result: " + text, 0)
     asr.post_message(gst.message_new_application(asr, struct))
    def handoff(self, element, buffer):
        self.frame_count += 1
        if (self.frame_count %
            (self.framerate * self.__RESOLUTION_CHANGE_INTERVAL) == 0):
            try:
                tmp = self.tested_resolutions[self.index].split(",")
            except IndexError:
                # no more format changes
                return True

            target_res = tmp[0]
            target_bitrate = int(tmp[1])
            target_fps = int(tmp[2])
            target_format = tmp[3]

            self.index += 1
            enc = self.pipeline.get_by_name("encoder")
            enc.props.bitrate = target_bitrate
            caps = self.pipeline.get_by_name("capsf")
            print "Previous caps: " + str(caps.get_property("caps"))

            width, height = [int(x) for x in target_res.split("x")]
            s = gst.Structure("video/x-raw-yuv")
            s["format"] = gst.Fourcc(target_format)
            s["width"] = width
            s["height"] = height
            s["framerate"] = gst.Fraction(target_fps, 1)
            caps.set_property("caps", gst.Caps(s))
            print "Switched to: " + str(caps.get_property("caps"))

        return True
示例#8
0
 def _on_vader_start(self, vader, pos):
     scarlett.log.debug(Fore.YELLOW + "Inside _on_vader_start")
     """Send start position as a message on the bus."""
     import gst
     struct = gst.Structure("start")
     pos = pos / 1000000000  # ns to s
     struct.set_value("start", pos)
     vader.post_message(gst.message_new_application(vader, struct))
示例#9
0
 def start_recording(self):
     structure = gst.Structure("shifter-start-recording")
     event = gst.event_new_custom(gst.EVENT_CUSTOM_UPSTREAM, structure)
     res = self.pipeline.send_event(event)
     if res:
         print "start recording"
     else:
         gst.error("start recording failed")
示例#10
0
 def process_handoff(self, fakesink, buffer_, pad):
     # When this function is called the first buffer has reached the end of
     # the pipeline, and we can continue with the next track. Since we're
     # in another thread, we send a message back to the main thread using
     # the bus.
     structure = gst.Structure('handoff')
     message = gst.message_new_application(fakesink, structure)
     bus = self.pipe.get_bus()
     bus.post(message)
示例#11
0
 def blocked(x, is_blocked):
     if not x in self.pads_awaiting_block:
         return
     self.pads_awaiting_block.remove(x)
     if not self.pads_awaiting_block:
         s = gst.Structure('pads-blocked')
         m = gst.message_new_application(pipeline, s)
         # marshal to the main thread
         pipeline.post_message(m)
示例#12
0
def _pad_added(element, pad, pipeline):
    sink = gst.element_factory_make('fakesink')
    sink.set_property('sync', False)

    pipeline.add(sink)
    sink.sync_state_with_parent()
    pad.link(sink.get_pad('sink'))

    if pad.get_caps().is_subset(_RAW_AUDIO):
        struct = gst.Structure('have-audio')
        element.get_bus().post(gst.message_new_application(element, struct))
示例#13
0
 def asr_partial_result(self, asr, text, uttid):
     """
     Forward partial result signals on the bus to the main thread.
     """
     #print text
     #send the hypothesis on the socket connection
     #self.conn.send(text)
     struct = gst.Structure('partial_result')
     struct.set_value('hyp', text)
     struct.set_value('uttid', uttid)
     asr.post_message(gst.message_new_application(asr, struct))
示例#14
0
    def create_pipeline(self):
        p = gst.Pipeline()

        width, height = self.framesize.split("x")
        width, height = int(width), int(height)

        if self.location:
            src = gst.element_factory_make("filesrc")
            src.props.location = self.location
            if self.format == "I420":
                bpp = 1.5
            elif self.format == "UYVY":
                bpp = 2
            src.props.blocksize = int(width * height * bpp)
        else:
            src = gst.element_factory_make("videotestsrc")

        src.props.num_buffers = self.num_buffers
        bitrate = self.bitrate
        enc = gst.element_factory_make(self.element)

        if self.mode is not None:
            enc.props.mode = self.mode

        if bitrate:
            enc.props.bitrate = bitrate

        sink = gst.element_factory_make("fakesink")

        s = gst.Structure("video/x-raw-yuv")
        s["format"] = gst.Fourcc(self.format)
        s["width"] = width
        s["height"] = height
        s["framerate"] = gst.Fraction(self.framerate, 1)

        tee = gst.element_factory_make("tee")
        queue = gst.element_factory_make("multiqueue")
        ssim = gst.element_factory_make("xssim")
        dec = gst.element_factory_make("avvdec")

        p.add(tee, queue, ssim, dec)

        capf = gst.element_factory_make("capsfilter")
        capf.props.caps = gst.Caps(s)

        p.add(src, capf, enc, sink)
        gst.element_link_many(src, capf, tee)
        gst.element_link_many(tee, enc, dec, queue, ssim)

        ssim.connect("got_results", self.got_results)

        gst.element_link_many(tee, queue, ssim)
        ssim.link(sink)
        return p
示例#15
0
    def testBusElement(self):
        bag = {'called': False}
        def finish_analysis(reason):
            bag['called'] = True

        self.discoverer._finishAnalysis = finish_analysis
        self.failUnlessEqual(self.discoverer.error, None)
        src = gst.Pad('src', gst.PAD_SRC)
        # we ignore non-redirect messages
        structure = gst.Structure('meh')
        message = gst.message_new_element(src, structure)
        self.discoverer._busMessageElementCb(None, message)
        self.failUnlessEqual(self.discoverer.error, None)
        self.failUnlessEqual(bag['called'], False)

        # error out on redirects
        structure = gst.Structure('redirect')
        message = gst.message_new_element(src, structure)
        self.discoverer._busMessageElementCb(None, message)
        self.failIfEqual(self.discoverer.error, None)
        self.failUnlessEqual(bag['called'], True)
示例#16
0
 def asr_result(self, asr, text, uttid):
     """
     Forward result signals on the bus to the main thread.
     """
     print text
     #send the hypothesis on the socket connection
     self.conn.send(text)
     struct = gst.Structure('result')
     struct.set_value('hyp', text)
     struct.set_value('uttid', uttid)
     #self.dag = pocketsphinx.Lattice(boxed=asr.get_property('lattice'))
     asr.post_message(gst.message_new_application(asr, struct))
示例#17
0
    def handle(self, uris):
        struct = gst.Structure('urilist-played')
        event = gst.event_new_custom(gst.EVENT_CUSTOM_UPSTREAM, struct)
        self.sinkpad.push_event(event)

        # TODO: hookup about to finish and errors to rest of URIs so we
        # round robin, only giving up once all have been tried.
        # TODO: uris could be empty.
        self.add(self.uridecodebin)
        self.uridecodebin.set_state(gst.STATE_READY)
        self.uridecodebin.set_property('uri', uris[0])
        self.uridecodebin.sync_state_with_parent()
        return True  # Make sure we consume the EOS that triggered us.
示例#18
0
 def _send_event(self, timestamp):
     clock = self.get_clock()
     if clock is not None:
         running_time = clock.get_time() - self.get_base_time()
     else:
         running_time = 0
     s = gst.Structure("GstForceKeyUnit")
     s.set_value('timestamp', timestamp, 'uint64')
     s.set_value('stream-time', timestamp, 'uint64')
     s.set_value('running-time', running_time, 'uint64')
     s.set_value('all-headers', True)
     s.set_value('count', self._count)
     return self.srcpad.push_event(
         gst.event_new_custom(gst.EVENT_CUSTOM_DOWNSTREAM, s))
示例#19
0
	def create_pipeline(self):
		p = gst.Pipeline()

		width, height = self.framesize.split("x")
		width, height = int(width), int(height)
		if self.location:
			src = gst.element_factory_make("filesrc")
			src.props.location = self.location
			if self.format == "I420":
				bpp = 1.5
			elif self.format == "UYVY":
				bpp = 2
			src.props.blocksize = int(width * height * bpp)
		else:
			src = gst.element_factory_make("videotestsrc")
		src.props.num_buffers = self.num_buffers

		self.bitrates = self.bitrateseq.split(',')
		bitrate = self.bitrate
		enc = gst.element_factory_make(self.element, "encoder")
		enc.props.bitrate = bitrate
		enc.props.max_bitrate = self.max_bitrate

		if self.mode is not None:
			enc.props.mode = self.mode

		if self.intra_refresh is not None:
			enc.props.intra_refresh = self.intra_refresh

		s = gst.Structure("video/x-raw-yuv")
		s["format"] = gst.Fourcc(self.format)
		s["width"] = width
		s["height"] = height
		s["framerate"] = gst.Fraction(self.framerate, 1)

		capf_raw = gst.element_factory_make("capsfilter")
		capf_raw.props.caps = gst.Caps(s)

		ident = gst.element_factory_make("identity")
		videorate = gst.element_factory_make("videorate")
		sink = gst.element_factory_make("fakesink")

		p.add(src, capf_raw, videorate, enc, ident, sink)
		gst.element_link_many(src, capf_raw, videorate, enc, ident, sink)

		ident.connect("handoff", self.handoff)
		ident.set_property("signal-handoffs", True)

		return p
示例#20
0
    def setup(self, conference, pipeline, participant, type):
        relays = []
        for r in self._stream.relays:
            relay = gst.Structure("relay")
            relay.set_value("username", r.username)
            relay.set_value("password", r.password)
            relay.set_value("ip", r.ip)
            relay.set_value("port", r.port, "uint")
            relays.append(relay)

        if type in (MediaSessionType.SIP, MediaSessionType.TUNNELED_SIP):
            if type is MediaSessionType.TUNNELED_SIP:
                compatibility_mode = 3
            else:
                compatibility_mode = 2
            params = {
                "stun-ip": "64.14.48.28",
                "stun-port": 3478,
                "compatibility-mode": compatibility_mode,
                "controlling-mode": self._stream.created_locally,
                "relay-info": relays
            }
        else:
            params = {}
        media_type = media_types[self._stream.name]
        self.fssession = conference.new_session(media_type)
        self.fssession.set_codec_preferences(build_codecs(self._stream.name))
        self.fsstream = self.fssession.new_stream(participant,
                                                  self._stream.direction,
                                                  "nice", params)
        self.fsstream.connect("src-pad-added", self.on_src_pad_added, pipeline)
        source = make_source(self._stream.name)
        pipeline.add(source)

        def on_src_message(bus, msg):
            if msg.structure is None:
                return
            if msg.structure.get_name() == "prepare-xwindow-id":
                msg.src.set_xwindow_id(self.surface_self)
                print "XID222222"

        #bus = pipeline.get_bus()
        #bus.add_signal_watch()
        #bus.enable_sync_message_emission()
        #bus.connect("sync-message::element", on_src_message)

        source.get_pad("src").link(self.fssession.get_property("sink-pad"))
        pipeline.set_state(gst.STATE_PLAYING)
示例#21
0
    def __init__(self,
                 filename,
                 outTemplate,
                 width=None,
                 height=None,
                 framerate=None):
        self.framerate = None
        self.width = None
        self.height = None
        self.outfileTemplate = outTemplate

        # TODO: What's a reasonable windowSize to use?
        windowSize = 20
        self.window = SlidingWindow(windowSize)
        self.samples = 0
        self.data = ([], [], [])

        self.pipeline = pipeline = gst.Pipeline()

        self.bus = pipeline.get_bus()

        filesrc = gst.element_factory_make("filesrc")
        decodebin = gst.element_factory_make("decodebin")
        self.ffmpegcolorspace = gst.element_factory_make("ffmpegcolorspace")
        videorate = gst.element_factory_make("videorate")
        videoscale = gst.element_factory_make("videoscale")
        self.theoraenc = gst.element_factory_make("theoraenc")
        fakesink = gst.element_factory_make("fakesink")

        filesrc.set_property("location", filename)

        pipeline.add(filesrc, decodebin, self.ffmpegcolorspace, videorate,
                     videoscale, self.theoraenc, fakesink)

        filesrc.link(decodebin)
        gst.element_link_many(self.ffmpegcolorspace, videorate, videoscale)
        structure = gst.Structure("video/x-raw-yuv")
        if height:
            structure['height'] = height
        if width:
            structure['width'] = width
        if framerate:
            structure['framerate'] = framerate
        caps = gst.Caps(structure)
        videoscale.link(self.theoraenc, caps)
        self.theoraenc.link(fakesink)

        decodebin.connect("new-decoded-pad", self._pad_added_cb)
    def create_pipeline(self):
        p = gst.Pipeline()

        width, height = self.framesize.split("x")
        width, height = int(width), int(height)

        src = gst.element_factory_make("videotestsrc")
        src.props.num_buffers = self.num_buffers
        bitrate = self.bitrate
        scaler = gst.element_factory_make("videoscale")

        enc = gst.element_factory_make(self.element, "encoder")

        if self.mode is not None:
            enc.props.mode = self.mode

        if self.intra_refresh is not None:
            enc.props.intra_refresh = self.intra_refresh

        enc.props.bitrate = bitrate
        ident = gst.element_factory_make("identity")

        sink = gst.element_factory_make("fakesink")

        s = gst.Structure("video/x-raw-yuv")
        s["format"] = gst.Fourcc(self.format)
        s["width"] = width
        s["height"] = height
        s["framerate"] = gst.Fraction(self.framerate, 1)

        caps = gst.element_factory_make("capsfilter", "capsf")
        caps.props.caps = gst.Caps(s)

        p.add(src, scaler, caps, enc, ident, sink)
        gst.element_link_many(src, scaler, caps, enc, ident, sink)

        ident.connect("handoff", self.handoff)
        ident.set_property("signal-handoffs", True)
        return p
    def testReceivingTagEvent(self):
        d = self._initComp()
        d.addCallback(lambda _: comptest.delayed_d(0.1, _))

        def assertTitleSet(title):
            self.assertEqual(title, \
                      self.comp.muxer.get_property('iradio-title'))

        # check if we respond currectly for title events
        d.addCallback(lambda _: self._sendTitleEvent('some title'))
        d.addCallback(lambda _: comptest.delayed_d(0.8, 'some title'))
        d.addCallback(assertTitleSet)

        d.addCallback(lambda _: self._sendTitleEvent('some other title'))
        d.addCallback(lambda _: comptest.delayed_d(0.8, 'some other title'))
        d.addCallback(assertTitleSet)

        # now check if the events setting response headers work
        mapping = {
            'icy-name': 'organization',
            'icy-genre': 'genre',
            'icy-url': 'location'
        }
        struc = gst.Structure(name='taglist')
        for key in mapping:
            struc.set_value(mapping[key], mapping[key])
        d.addCallback(lambda _: self._sendEvent(struc))

        def assertValuesInResponseHeadersSet(_):
            for key in mapping:
                self.assertTrue(key in self.comp.icyHeaders, key)
                self.assertEqual(mapping[key], self.comp.icyHeaders[key])

        d.addCallback(lambda _: comptest.delayed_d(0.5, _))
        d.addCallback(assertValuesInResponseHeadersSet)

        d.addCallback(lambda _: self.tp.stop_flow())
        return d
示例#24
0
    def create_pipeline(self):
        p = gst.Pipeline()

        width, height = self.framesize.split("x")
        width, height = int(width), int(height)

        if self.location:
            src = gst.element_factory_make("filesrc")
            src.props.location = self.location
            if self.format == "I420":
                bpp = 1.5
            elif self.format == "UYVY":
                bpp = 2
            src.props.blocksize = int(width * height * bpp)
        else:
            src = gst.element_factory_make("videotestsrc")
            src.props.num_buffers = self.num_buffers

        enc = gst.element_factory_make(self.element)
        enc.props.bitrate = self.bitrate

        sink = gst.element_factory_make("filesink")
        sink.props.location = self.tmp_filename

        s = gst.Structure("video/x-raw-yuv")
        s["format"] = gst.Fourcc(self.format)
        s["width"] = width
        s["height"] = height
        s["framerate"] = gst.Fraction(self.framerate, 1)

        capf = gst.element_factory_make("capsfilter")
        capf.props.caps = gst.Caps(s)
        p.add(src, capf, enc, sink)

        if not gst.element_link_many(src, capf, enc, sink):
            print " pipeline creation error !!"

        return p
 def jump_key(self, direction):
     event = gst.event_new_custom(gst.EVENT_CUSTOM_UPSTREAM,
                                  gst.Structure(direction))
     self.audiosink.send_event(event)
示例#26
0
def flumotion_reset_event():
    ''' Helper method to create a 'flumotion-reset' event '''
    return gst.event_new_custom(gst.EVENT_CUSTOM_DOWNSTREAM,
                                gst.Structure('flumotion-reset'))
 def asr_partial_result(self, asr, text, uttid):
     struct = gst.Structure("partial_result")
     struct.set_value("hyp", text)
     struct.set_value("uttid", uttid)
     self.debugMsg("asr partial: " + text, 0)
     asr.post_message(gst.message_new_application(asr, struct))
示例#28
0
	def on_sphinx_result(self, sphinx, text, uttid, score=None):
		msg = gst.Structure('sphinx_result')
		msg['text'] = text

		self.bus.post(gst.message_new_application(sphinx, msg))
示例#29
0
def _have_type(element, probability, caps, decodebin):
    decodebin.set_property('sink-caps', caps)
    struct = gst.Structure('have-type')
    struct['caps'] = caps.get_structure(0)
    element.get_bus().post(gst.message_new_application(element, struct))
 def _sendTitleEvent(self, title):
     struc = gst.Structure(name='taglist')
     struc.set_value('title', title.encode("utf-8", "replace"))
     self._sendEvent(struc)