From fbc251923ce8d214f9ee49ed011462d163fae403 Mon Sep 17 00:00:00 2001 From: nareix Date: Tue, 19 Apr 2016 11:40:23 +0800 Subject: [PATCH] add WalkNALUsAVCC() modify SplitNALUs return params order --- h264parser/parser.go | 19 +++++++++++++++---- h264parser/parser_test.go | 4 ++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/h264parser/parser.go b/h264parser/parser.go index 2d2d607..3f44dc2 100644 --- a/h264parser/parser.go +++ b/h264parser/parser.go @@ -195,9 +195,18 @@ func WalkNALUsAnnexb(nalus [][]byte, write func([]byte)) { return } -func SplitNALUs(b []byte) (ok bool, nalus [][]byte) { +func WalkNALUsAVCC(nalus [][]byte, write func([]byte)) { + for _, nalu := range(nalus) { + var b [4]byte + bits.PutUIntBE(b[:], uint(len(nalu)), 32) + write(b[:]) + write(nalu) + } +} + +func SplitNALUs(b []byte) (nalus [][]byte, ok bool) { if len(b) < 4 { - return + return [][]byte{b}, false } val3 := bits.GetUIntBE(b, 24) @@ -262,10 +271,12 @@ func SplitNALUs(b []byte) (ok bool, nalus [][]byte) { } if len(b) == 0 { ok = true + return + } else { + return [][]byte{b}, false } - return } - return + return [][]byte{b}, false } diff --git a/h264parser/parser_test.go b/h264parser/parser_test.go index 8945692..52ac18b 100644 --- a/h264parser/parser_test.go +++ b/h264parser/parser_test.go @@ -11,13 +11,13 @@ func TestParser(t *testing.T) { var nalus [][]byte annexbFrame, _ := hex.DecodeString("000001223322330000000122332233223300000133000001000001") - ok, nalus = SplitNALUs(annexbFrame) + nalus, ok = SplitNALUs(annexbFrame) t.Log(ok, len(nalus)) avccFrame, _ := hex.DecodeString( "00000008aabbccaabbccaabb00000001aa", ) - ok, nalus = SplitNALUs(avccFrame) + nalus, ok = SplitNALUs(avccFrame) t.Log(ok, len(nalus)) }