Added start/end sample numbers
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-03-04 12:20:58 +01:00
parent d0976eac62
commit f7530d7109
5 changed files with 37 additions and 15 deletions

View file

@ -6,6 +6,8 @@ import (
"io"
)
const adtsFrameSamples = 1024
type AdtsPacketizer struct {
reader io.Reader
samples int64
@ -21,10 +23,14 @@ func (p *AdtsPacket) KeepMode() KeepMode {
return Discard
}
func (p *AdtsPacket) GetSampleNumber() int64 {
func (p *AdtsPacket) GetStartSampleNumber() int64 {
return p.sampleNumber
}
func (p *AdtsPacket) GetEndSampleNumber() int64 {
return p.sampleNumber + adtsFrameSamples
}
func (p *AdtsPacket) GetData() []byte {
return append(p.header.Encode(), p.data...)
}
@ -48,7 +54,7 @@ func (o *AdtsPacketizer) GetPacket() Packet {
return nil
}
packet.sampleNumber = o.samples
o.samples += 1024 //always this fixed size per frame
o.samples += adtsFrameSamples //always this fixed size per frame
return packet
}

View file

@ -16,19 +16,24 @@ type FLACPacketizer struct {
}
type FLACPacket struct {
mode KeepMode
sampleNumber int64
data []byte
mode KeepMode
sampleNumber int64
endSampleNumber int64
data []byte
}
func (p *FLACPacket) KeepMode() KeepMode {
return p.mode
}
func (p *FLACPacket) GetSampleNumber() int64 {
func (p *FLACPacket) GetStartSampleNumber() int64 {
return p.sampleNumber
}
func (p *FLACPacket) GetEndSampleNumber() int64 {
return p.endSampleNumber
}
func (p *FLACPacket) GetData() []byte {
return p.data
}
@ -68,9 +73,10 @@ func (o *FLACPacketizer) GetPacket() (packet Packet) {
return nil
}
packet = &FLACPacket{
mode: Keep,
sampleNumber: 0,
data: o.getBuffer(),
mode: Keep,
sampleNumber: 0,
endSampleNumber: 0,
data: o.getBuffer(),
}
return
}
@ -86,9 +92,10 @@ func (o *FLACPacketizer) GetPacket() (packet Packet) {
sampleNumber *= int64(frame.BlockSize)
}
packet = &FLACPacket{
mode: Discard,
sampleNumber: sampleNumber,
data: o.getBuffer(),
mode: Discard,
sampleNumber: sampleNumber,
endSampleNumber: sampleNumber + int64(frame.Subframes[0].NSamples),
data: o.getBuffer(),
}
return

View file

@ -20,10 +20,14 @@ func (p *Mp3Packet) KeepMode() KeepMode {
return Discard
}
func (p *Mp3Packet) GetSampleNumber() int64 {
func (p *Mp3Packet) GetStartSampleNumber() int64 {
return p.sampleNumber
}
func (p *Mp3Packet) GetEndSampleNumber() int64 {
return p.sampleNumber + int64(p.frame.Samples())
}
func (p *Mp3Packet) GetData() []byte {
return p.frame.Bytes()
}

View file

@ -35,10 +35,14 @@ func (p *OggPacket) KeepMode() KeepMode {
return Discard
}
func (p *OggPacket) GetSampleNumber() int64 {
func (p *OggPacket) GetStartSampleNumber() int64 {
return p.sampleNumber
}
func (p *OggPacket) GetEndSampleNumber() int64 {
return p.header.AbsoluteGranulePosition
}
func (p *OggPacket) GetData() []byte {
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.header.PageSegments)*(255+1)))
binary.Write(buf, binary.LittleEndian, p.header)

View file

@ -12,7 +12,8 @@ const (
type Packet interface {
KeepMode() KeepMode
GetSampleNumber() int64
GetStartSampleNumber() int64
GetEndSampleNumber() int64
GetData() []byte
}