Skip to content

Commit 718d7b5

Browse files
committed
use bytes.Buffer for h265 AU builder
1 parent 97e36d6 commit 718d7b5

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

readersampleprovider.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package lksdk
1616

1717
import (
18+
"bytes"
1819
"context"
1920
"encoding/binary"
2021
"fmt"
@@ -749,44 +750,44 @@ func h265FirstSliceInPic(nalData []byte) (bool, bool) {
749750
// owned Annex-B buffer once we need to join multiple NAL units together.
750751
type h265AccessUnitBuilder struct {
751752
rawFirstNAL []byte
752-
data []byte
753+
data bytes.Buffer
753754
}
754755

755756
func (b *h265AccessUnitBuilder) Append(nalData []byte) {
756757
// Preserve the single-NAL fast path without copying until another NAL forces
757758
// us to materialize Annex-B framing.
758-
if b.rawFirstNAL == nil && len(b.data) == 0 {
759+
if b.rawFirstNAL == nil && b.data.Len() == 0 {
759760
b.rawFirstNAL = nalData
760761
return
761762
}
762763

763764
b.materializeAnnexB(len(nalData) + len(annexBStartCode))
764-
b.data = append(b.data, annexBStartCode[:]...)
765-
b.data = append(b.data, nalData...)
765+
_, _ = b.data.Write(annexBStartCode[:])
766+
_, _ = b.data.Write(nalData)
766767
}
767768

768769
func (b *h265AccessUnitBuilder) AppendAnnexB(nalData []byte) {
769770
b.materializeAnnexB(len(nalData) + len(annexBStartCode))
770-
b.data = append(b.data, annexBStartCode[:]...)
771-
b.data = append(b.data, nalData...)
771+
_, _ = b.data.Write(annexBStartCode[:])
772+
_, _ = b.data.Write(nalData)
772773
}
773774

774775
func (b *h265AccessUnitBuilder) Bytes() []byte {
775776
if b.rawFirstNAL != nil {
776777
return b.rawFirstNAL
777778
}
778-
return b.data
779+
return b.data.Bytes()
779780
}
780781

781782
func (b *h265AccessUnitBuilder) Len() int {
782783
if b.rawFirstNAL != nil {
783784
return len(b.rawFirstNAL)
784785
}
785-
return len(b.data)
786+
return b.data.Len()
786787
}
787788

788789
func (b *h265AccessUnitBuilder) materializeAnnexB(extra int) {
789-
if b.rawFirstNAL == nil && b.data != nil {
790+
if b.rawFirstNAL == nil && b.data.Len() != 0 {
790791
if extra > 0 {
791792
b.grow(extra)
792793
}
@@ -800,21 +801,19 @@ func (b *h265AccessUnitBuilder) materializeAnnexB(extra int) {
800801
needed += len(annexBStartCode) + len(b.rawFirstNAL)
801802
}
802803

803-
data := make([]byte, 0, needed)
804+
var data bytes.Buffer
805+
data.Grow(needed)
804806
if b.rawFirstNAL != nil {
805-
data = append(data, annexBStartCode[:]...)
806-
data = append(data, b.rawFirstNAL...)
807+
_, _ = data.Write(annexBStartCode[:])
808+
_, _ = data.Write(b.rawFirstNAL)
807809
b.rawFirstNAL = nil
808810
}
809811
b.data = data
810812
}
811813

812814
func (b *h265AccessUnitBuilder) grow(extra int) {
813-
if cap(b.data)-len(b.data) >= extra {
815+
if b.data.Cap()-b.data.Len() >= extra {
814816
return
815817
}
816-
817-
data := make([]byte, len(b.data), len(b.data)+extra)
818-
copy(data, b.data)
819-
b.data = data
818+
b.data.Grow(extra)
820819
}

0 commit comments

Comments
 (0)