From 2412e77d722194be99b3a6345a7b0bd971f09175 Mon Sep 17 00:00:00 2001 From: nareix Date: Sat, 30 Apr 2016 09:22:33 +0800 Subject: [PATCH] SplitNALu bugfix --- h264parser/parser.go | 37 ++++++++++++++++++++----------------- h264parser/parser_test.go | 2 +- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/h264parser/parser.go b/h264parser/parser.go index 16b73ba..5b3b9a2 100644 --- a/h264parser/parser.go +++ b/h264parser/parser.go @@ -216,55 +216,58 @@ func SplitNALUs(b []byte) (nalus [][]byte, ok bool) { // maybe AVCC if val4 <= uint(len(b)) { - b = b[4:] + _val4 := val4 + _b := b[4:] nalus := [][]byte{} for { - nalus = append(nalus, b[:val4]) - b = b[val4:] - if len(b) < 4 { + nalus = append(nalus, _b[:_val4]) + _b = _b[_val4:] + if len(_b) < 4 { break } - val4 = bits.GetUIntBE(b, 32) - b = b[4:] - if val4 > uint(len(b)) { + _val4 = bits.GetUIntBE(_b, 32) + _b = _b[4:] + if _val4 > uint(len(_b)) { break } } - if len(b) == 0 { + if len(_b) == 0 { return nalus, true } } // is Annex B if val3 == 1 || val4 == 1 { + _val3 := val3 + _val4 := val4 start := 0 pos := 0 for { if start != pos { nalus = append(nalus, b[start:pos]) } - if val3 == 1 { + if _val3 == 1 { pos += 3 - } else if val4 == 1 { + } else if _val4 == 1 { pos += 4 } start = pos if start == len(b) { break } - val3 = 0 - val4 = 0 + _val3 = 0 + _val4 = 0 for pos < len(b) { if pos+2 < len(b) && b[pos] == 0 { - val3 = bits.GetUIntBE(b[pos:], 24) - if val3 == 0 { + _val3 = bits.GetUIntBE(b[pos:], 24) + if _val3 == 0 { if pos+3 < len(b) { - val4 = uint(b[pos+3]) - if val4 == 1 { + _val4 = uint(b[pos+3]) + if _val4 == 1 { break } } - } else if val3 == 1 { + } else if _val3 == 1 { break } pos++ diff --git a/h264parser/parser_test.go b/h264parser/parser_test.go index 52ac18b..83f3b9c 100644 --- a/h264parser/parser_test.go +++ b/h264parser/parser_test.go @@ -10,7 +10,7 @@ func TestParser(t *testing.T) { var ok bool var nalus [][]byte - annexbFrame, _ := hex.DecodeString("000001223322330000000122332233223300000133000001000001") + annexbFrame, _ := hex.DecodeString("00000001223322330000000122332233223300000133000001000001") nalus, ok = SplitNALUs(annexbFrame) t.Log(ok, len(nalus))