1515package lksdk
1616
1717import (
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.
750751type h265AccessUnitBuilder struct {
751752 rawFirstNAL []byte
752- data [] byte
753+ data bytes. Buffer
753754}
754755
755756func (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
768769func (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
774775func (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
781782func (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
788789func (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
812814func (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