-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
sampleSequenceLocation.go
53 lines (44 loc) · 1.1 KB
/
sampleSequenceLocation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
// SPDX-License-Identifier: MIT
// Package samplebuilder provides functionality to reconstruct media frames from RTP packets.
package samplebuilder
type sampleSequenceLocation struct {
// head is the first packet in a sequence
head uint16
// tail is always set to one after the final sequence number,
// so if head == tail then the sequence is empty
tail uint16
}
func (l sampleSequenceLocation) empty() bool {
return l.head == l.tail
}
func (l sampleSequenceLocation) hasData() bool {
return l.head != l.tail
}
func (l sampleSequenceLocation) count() uint16 {
return seqnumDistance(l.head, l.tail)
}
const (
slCompareVoid = iota
slCompareBefore
slCompareInside
slCompareAfter
)
func (l sampleSequenceLocation) compare(pos uint16) int {
if l.head == l.tail {
return slCompareVoid
}
if l.head < l.tail {
if l.head <= pos && pos < l.tail {
return slCompareInside
}
} else {
if l.head <= pos || pos < l.tail {
return slCompareInside
}
}
if l.head-pos <= pos-l.tail {
return slCompareBefore
}
return slCompareAfter
}