Added ability to offset sample numbers on packetizers
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
DataHoarder 2022-05-15 19:43:45 +02:00
parent 08d1c52b47
commit 3f03c0182c
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
5 changed files with 34 additions and 0 deletions

View file

@ -41,6 +41,10 @@ func (p *AdtsPacket) GetData() (result []byte) {
return
}
func (p *AdtsPacket) GetDataOffset(offset int64) []byte {
return p.GetData()
}
func NewAdtsPacketizer(reader io.Reader) *AdtsPacketizer {
return &AdtsPacketizer{reader: bufio.NewReader(reader)}
}

View file

@ -38,6 +38,10 @@ func (p *FLACPacket) GetData() []byte {
return p.data
}
func (p *FLACPacket) GetDataOffset(offset int64) []byte {
return p.GetData()
}
func (p *FLACPacket) Category() int64 {
return 0
}

View file

@ -36,6 +36,10 @@ func (p *Mp3Packet) GetData() []byte {
return p.frame.Bytes()
}
func (p *Mp3Packet) GetDataOffset(offset int64) []byte {
return p.GetData()
}
func NewMp3Packetizer(reader io.Reader) *Mp3Packetizer {
return &Mp3Packetizer{decoder: mp3parser.NewDecoder(bufio.NewReader(reader))}
}

View file

@ -60,6 +60,23 @@ func (p *OggPacket) GetData() []byte {
return buf.Bytes()
}
func (p *OggPacket) GetDataOffset(offset int64) []byte {
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.header.PageSegments)*(255+1)))
headerClone := p.header
headerClone.AbsoluteGranulePosition -= offset
binary.Write(buf, binary.LittleEndian, headerClone)
binary.Write(buf, binary.LittleEndian, p.pageSegmentTable)
for _, segment := range p.segments {
if len(segment) > 0 {
binary.Write(buf, binary.LittleEndian, segment)
}
}
return buf.Bytes()
}
func NewOggPacketizer(reader io.Reader) *OggPacketizer {
return &OggPacketizer{reader: bufio.NewReader(reader)}
}

View file

@ -18,6 +18,11 @@ type Packet interface {
GetData() []byte
}
type OffsetablePacket interface {
Packet
GetDataOffset(offset int64) []byte
}
type Packetizer interface {
GetPacket() Packet
}