Files
overlord/Overlord-Client/cmd/agent/h264util/annexb.go
T

46 lines
827 B
Go

package h264util
type AccessUnit struct {
HasSPS bool
HasPPS bool
HasIDR bool
}
func InspectAnnexB(data []byte) AccessUnit {
var out AccessUnit
for i := 0; i+3 < len(data); {
startCodeLen := 0
switch {
case i+3 < len(data) && data[i] == 0 && data[i+1] == 0 && data[i+2] == 1:
startCodeLen = 3
case i+4 < len(data) && data[i] == 0 && data[i+1] == 0 && data[i+2] == 0 && data[i+3] == 1:
startCodeLen = 4
}
if startCodeLen == 0 {
i++
continue
}
nal := i + startCodeLen
if nal >= len(data) {
break
}
switch data[nal] & 0x1f {
case 5:
out.HasIDR = true
case 7:
out.HasSPS = true
case 8:
out.HasPPS = true
}
if out.HasSPS && out.HasPPS && out.HasIDR {
return out
}
i = nal + 1
}
return out
}
func IsIDR(data []byte) bool {
return InspectAnnexB(data).HasIDR
}