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

View file

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

View file

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

View file

@ -35,10 +35,14 @@ func (p *OggPacket) KeepMode() KeepMode {
return Discard return Discard
} }
func (p *OggPacket) GetSampleNumber() int64 { func (p *OggPacket) GetStartSampleNumber() int64 {
return p.sampleNumber return p.sampleNumber
} }
func (p *OggPacket) GetEndSampleNumber() int64 {
return p.header.AbsoluteGranulePosition
}
func (p *OggPacket) GetData() []byte { 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))) 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) binary.Write(buf, binary.LittleEndian, p.header)

View file

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