diff --git a/pkg/rtpreorderer/reorderer.go b/pkg/rtpreorderer/reorderer.go index e114ae15..a36bb8c5 100644 --- a/pkg/rtpreorderer/reorderer.go +++ b/pkg/rtpreorderer/reorderer.go @@ -6,8 +6,7 @@ import ( ) const ( - bufferSize = 64 - negativeThreshold = 0xFFFF / 2 + bufferSize = 64 ) // Reorderer filters incoming RTP packets, in order to @@ -37,12 +36,12 @@ func (r *Reorderer) Process(pkt *rtp.Packet) ([]*rtp.Packet, int) { return []*rtp.Packet{pkt}, 0 } - relPos := pkt.SequenceNumber - r.expectedSeqNum + relPos := int16(pkt.SequenceNumber - r.expectedSeqNum) // packet is a duplicate or has been sent // before the first packet processed by Reorderer. // discard. - if relPos > negativeThreshold { + if relPos < 0 { r.negativeCount++ // stream has been resetted, therefore reset reorderer too @@ -94,7 +93,7 @@ func (r *Reorderer) Process(pkt *rtp.Packet) ([]*rtp.Packet, int) { // there's a missing packet if relPos != 0 { - p := (r.absPos + relPos) & (bufferSize - 1) + p := (r.absPos + uint16(relPos)) & (bufferSize - 1) // current packet is a duplicate. discard if r.buffer[p] != nil { diff --git a/pkg/rtptime/decoder.go b/pkg/rtptime/decoder.go index 016c4ed2..1bbe6421 100644 --- a/pkg/rtptime/decoder.go +++ b/pkg/rtptime/decoder.go @@ -5,8 +5,6 @@ import ( "time" ) -const negativeThreshold = 0xFFFFFFFF / 2 - // avoid an int64 overflow and preserve resolution by splitting division into two parts: // first add the integer part, then the decimal part. func multiplyAndDivide(v, m, d time.Duration) time.Duration { @@ -38,17 +36,9 @@ func (d *Decoder) Decode(ts uint32) time.Duration { return 0 } - diff := ts - d.prev - - // negative difference - if diff > negativeThreshold { - diff = d.prev - ts - d.prev = ts - d.overall -= time.Duration(diff) - } else { - d.prev = ts - d.overall += time.Duration(diff) - } + diff := int32(ts - d.prev) + d.prev = ts + d.overall += time.Duration(diff) return multiplyAndDivide(d.overall, time.Second, d.clockRate) }