av/parser/MJPEGParser.go

54 lines
1.1 KiB
Go

package parser
type mjpegParser struct {
inputBuffer []byte
isParsing bool
parserOutputChanRef chan []byte
userOutputChanRef chan []byte
inputChan chan byte
}
func NewMJPEGParser(inputChanLen int) (p *mjpegParser){
p = new(mjpegParser)
p.isParsing = true
p.inputChan = make(chan byte, inputChanLen )
return
}
func (p *mjpegParser)Stop(){
p.isParsing = false
}
func (p *mjpegParser)Start(){
go p.parse()
}
func (p *mjpegParser)GetInputChan() chan byte {
return p.inputChan
}
func (p *mjpegParser)GetOutputChan() chan []byte {
return p.userOutputChanRef
}
func (p *mjpegParser)SetOutputChan(aChan chan []byte){
p.parserOutputChanRef = aChan
p.userOutputChanRef = aChan
}
func (p *mjpegParser)parse() {
var outputBuffer []byte
for p.isParsing {
aByte := <-p.inputChan
outputBuffer = append(outputBuffer, aByte)
if aByte == 0xFF && len(outputBuffer) != 0 {
aByte := <-p.inputChan
outputBuffer = append(outputBuffer, aByte)
if aByte == 0xD8 {
p.parserOutputChanRef<-outputBuffer[:len(outputBuffer)-2]
outputBuffer = outputBuffer[len(outputBuffer)-2:]
}
}
}
}