Guest User

Untitled

a guest
Apr 16th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import pygst
  3. pygst.require('0.10')
  4. import gst, sys
  5. import gobject
  6. import errno
  7. from struct import pack, unpack
  8. gobject.threads_init ()
  9.  
  10. class SomaAudioEventFilter(gst.Element):
  11.  
  12. _sinkpadtemplate = gst.PadTemplate ("sinkpadtemplate",
  13. gst.PAD_SINK,
  14. gst.PAD_ALWAYS,
  15. gst.caps_new_any())
  16.  
  17. _srcpadtemplate = gst.PadTemplate ("srcpadtemplate",
  18. gst.PAD_SRC,
  19. gst.PAD_ALWAYS,
  20. gst.caps_new_any())
  21.  
  22. def __init__(self):
  23. gst.Element.__init__(self)
  24.  
  25. gst.info('creating srcpadpad')
  26. self.srcpad = gst.Pad(self._srcpadtemplate, "src")
  27. gst.info('adding srcpad to self')
  28. self.add_pad(self.srcpad)
  29. self.srcpad.set_getcaps_function(self.src_getcaps_function)
  30. self.srcpad.set_setcaps_function(self.src_setcaps_function)
  31.  
  32. gst.info('creating sinkpad')
  33. self.sinkpad = gst.Pad(self._sinkpadtemplate, "sink")
  34. gst.info('adding sinkpad to self')
  35. self.add_pad(self.sinkpad)
  36. self.sinkpad.set_getcaps_function(self.sink_getcaps_function)
  37. self.sinkpad.set_setcaps_function(self.sink_setcaps_function)
  38.  
  39. gst.info('setting chain/event functions')
  40. self.sinkpad.set_chain_function(self.chainfunc)
  41. self.sinkpad.set_event_function(self.eventfunc)
  42. self.srccaps = gst.caps_from_string('audio/x-raw-int,rate=8000,channels=1,endianness=1234,width=16,depth=16,signed=true')
  43. self.audioCMD = 0x30;
  44. self.lastvalue = 0
  45.  
  46. def set_audio_src(self, newSrc):
  47. self.audioSRC = newSrc
  48.  
  49. def src_getcaps_function(self, *foo):
  50. print "src getcaps"
  51. gst.info('src getcaps')
  52. return self.srccaps
  53.  
  54. def src_setcaps_function(self, pad, caps):
  55. print "src setcaps"
  56. gst.info("attempting to src setcaps:%s" % caps.to_string())
  57. self.srccaps = caps
  58. return True
  59.  
  60. def sink_getcaps_function(self, *foo):
  61.  
  62. gst.info('sink getcaps')
  63. capsString = "soma/event,src=%s" % (self.audioSRC)
  64.  
  65. caps = gst.caps_from_string(capsString)
  66. return caps
  67.  
  68. def sink_setcaps_function(self, *foo):
  69. print "SomaAudioFilter setcaps"
  70. gst.info('sink setcaps')
  71. return True
  72.  
  73. def chainfunc(self, pad, buffer):
  74. #self.info("%s timestamp(buffer):%d" % (pad, buffer.timestamp))
  75. buffer_out = ""
  76. nEvents = len(buffer)/12;
  77. #gst.info("somaEventFilter.chainfunc length of Buffer IN:" + str(len(buffer)) + ' with nEvents:' + str(nEvents))
  78.  
  79. ## if len(buffer) % 12 != 0:
  80. ## gst.warn( "Error: nEvents%12 !=0")
  81. ## return ""
  82.  
  83. for i in range(nEvents):
  84. buffer_out = buffer_out + (self.parseEvent( buffer[ (i*12) : (i*12)+12 ] ))
  85.  
  86. buf = gst.Buffer(buffer_out)
  87. caps = self.srccaps
  88. buf.set_caps(caps)
  89. #buf.stamp(buffer)
  90. #gst.info("somaEventFilter.chainfunc() returning buffer of len: " + str(len(buffer_out)))
  91.  
  92. return self.srcpad.push(buf)
  93.  
  94. def eventfunc(self, pad, event):
  95. print "FILTER ELEMENT GOT EVENT", event.type
  96. self.info("%s event:%r" % (pad, event.type))
  97.  
  98. return self.srcpad.push_event(event)
  99.  
  100. def parseEvent(self, buffer):
  101. ## if len(buffer)<12:
  102. ## gst.info("ParsingEvents, buffer len <12")
  103. ## return ''
  104.  
  105. CMD = 'B'
  106. SRC = 'B'
  107. DATA_IN = '>h'
  108. DATA_OUT = '<h'
  109.  
  110. data = ''
  111.  
  112. cmd = unpack(CMD, buffer[0:1])[0]
  113. ## if cmd != self.audioCMD:
  114. ## gst.info("Parsing Events, CMD IS NOT :" + str(self.audioCMD) + ' CMD IS:' + str(cmd))
  115. ## return ""
  116.  
  117.  
  118. buffer_out = buffer[4:]
  119. #print unpack(">hhhh", buffer[4:])
  120.  
  121. ## buffer_out = ""
  122. ## for i in range(4):
  123. ## buffer_out += pack(">h", self.lastvalue)
  124.  
  125. ## if self.lastvalue == 2**15 -1:
  126. ## self.lastvalue = -2**15
  127. ## else:
  128. ## self.lastvalue += 1
  129.  
  130. return buffer_out
Add Comment
Please, Sign In to add comment