add resetFragments() to all fragment-based decoders (#637)

This commit is contained in:
Alessandro Ros
2024-10-23 20:42:21 +02:00
committed by GitHub
parent 2899668c47
commit f41b196241
13 changed files with 128 additions and 100 deletions

View File

@@ -163,8 +163,8 @@ func joinFragments(fragments [][]byte, size int) []byte {
// Specification: https://datatracker.ietf.org/doc/html/rfc2435
type Decoder struct {
firstPacketReceived bool
fragmentsSize int
fragments [][]byte
fragmentsSize int
firstJpegHeader *headerJPEG
quantizationTables [][]byte
}
@@ -174,6 +174,11 @@ func (d *Decoder) Init() error {
return nil
}
func (d *Decoder) resetFragments() {
d.fragments = d.fragments[:0]
d.fragmentsSize = 0
}
// Decode decodes an image from a RTP packet.
func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, error) {
byts := pkt.Payload
@@ -194,8 +199,7 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, error) {
}
if jh.FragmentOffset == 0 {
d.fragments = d.fragments[:0] // discard pending fragments
d.fragmentsSize = 0
d.resetFragments()
d.firstPacketReceived = true
if jh.Quantization >= 128 {
@@ -219,8 +223,7 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, error) {
return nil, ErrNonStartingPacketAndNoPrevious
}
d.fragments = d.fragments[:0] // discard pending fragments
d.fragmentsSize = 0
d.resetFragments()
return nil, fmt.Errorf("received wrong fragment")
}
@@ -237,8 +240,7 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, error) {
}
data := joinFragments(d.fragments, d.fragmentsSize)
d.fragments = d.fragments[:0]
d.fragmentsSize = 0
d.resetFragments()
var buf []byte