major remote desktop improvements
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user