将amf0编码器和解码器放到codec/amf.go中,增加MallocSlice函数用于减少内存复制,

对写入avcc音频进行长度判断
This commit is contained in:
dexter
2023-01-16 09:22:16 +08:00
parent 964ac02169
commit 881fe5abd9
9 changed files with 342 additions and 55 deletions

View File

@@ -56,8 +56,13 @@ func (b *Buffer) Write(a []byte) (n int, err error) {
func (b Buffer) Len() int {
return len(b)
}
func (b Buffer) CanRead() bool {
return b.Len() > 0
return b.CanReadN(1)
}
func (b Buffer) CanReadN(n int) bool {
return b.Len() >= n
}
func (b Buffer) Cap() int {
return cap(b)
@@ -87,6 +92,16 @@ func (b *Buffer) Glow(n int) {
*b = b.SubBuf(0, l)
}
// MallocSlice 用来对容量够的slice进行长度扩展+1并返回新的位置的指针用于写入
func MallocSlice[T any](slice *[]T) *T {
oslice := *slice
if rawLen := len(oslice); cap(oslice) > rawLen {
*slice = oslice[:rawLen+1]
return &(*slice)[rawLen]
}
return nil
}
// ConcatBuffers 合并碎片内存为一个完整内存
func ConcatBuffers[T ~[]byte](input []T) (out []byte) {
for _, v := range input {