直播:后台 JWT 推流、前台画中画;WebRTC 服务与 Nginx WebSocket 代理
Made-with: Cursor
This commit is contained in:
65
server/vendor/github.com/pion/rtp/codecs/vp9/bits.go
generated
vendored
Normal file
65
server/vendor/github.com/pion/rtp/codecs/vp9/bits.go
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package vp9
|
||||
|
||||
import "errors"
|
||||
|
||||
var errNotEnoughBits = errors.New("not enough bits")
|
||||
|
||||
func hasSpace(buf []byte, pos int, n int) error {
|
||||
if n > ((len(buf) * 8) - pos) {
|
||||
return errNotEnoughBits
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func readFlag(buf []byte, pos *int) (bool, error) {
|
||||
err := hasSpace(buf, *pos, 1)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return readFlagUnsafe(buf, pos), nil
|
||||
}
|
||||
|
||||
func readFlagUnsafe(buf []byte, pos *int) bool {
|
||||
b := (buf[*pos>>0x03] >> (7 - (*pos & 0x07))) & 0x01
|
||||
*pos++
|
||||
return b == 1
|
||||
}
|
||||
|
||||
func readBits(buf []byte, pos *int, n int) (uint64, error) {
|
||||
err := hasSpace(buf, *pos, n)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return readBitsUnsafe(buf, pos, n), nil
|
||||
}
|
||||
|
||||
func readBitsUnsafe(buf []byte, pos *int, n int) uint64 {
|
||||
res := 8 - (*pos & 0x07)
|
||||
if n < res {
|
||||
v := uint64((buf[*pos>>0x03] >> (res - n)) & (1<<n - 1))
|
||||
*pos += n
|
||||
return v
|
||||
}
|
||||
|
||||
v := uint64(buf[*pos>>0x03] & (1<<res - 1))
|
||||
*pos += res
|
||||
n -= res
|
||||
|
||||
for n >= 8 {
|
||||
v = (v << 8) | uint64(buf[*pos>>0x03])
|
||||
*pos += 8
|
||||
n -= 8
|
||||
}
|
||||
|
||||
if n > 0 {
|
||||
v = (v << n) | uint64(buf[*pos>>0x03]>>(8-n))
|
||||
*pos += n
|
||||
}
|
||||
|
||||
return v
|
||||
}
|
||||
Reference in New Issue
Block a user