SplitNALu bugfix

This commit is contained in:
nareix 2016-04-30 09:22:33 +08:00
parent b4831df775
commit 2412e77d72
2 changed files with 21 additions and 18 deletions

View File

@ -216,55 +216,58 @@ func SplitNALUs(b []byte) (nalus [][]byte, ok bool) {
// maybe AVCC // maybe AVCC
if val4 <= uint(len(b)) { if val4 <= uint(len(b)) {
b = b[4:] _val4 := val4
_b := b[4:]
nalus := [][]byte{} nalus := [][]byte{}
for { for {
nalus = append(nalus, b[:val4]) nalus = append(nalus, _b[:_val4])
b = b[val4:] _b = _b[_val4:]
if len(b) < 4 { if len(_b) < 4 {
break break
} }
val4 = bits.GetUIntBE(b, 32) _val4 = bits.GetUIntBE(_b, 32)
b = b[4:] _b = _b[4:]
if val4 > uint(len(b)) { if _val4 > uint(len(_b)) {
break break
} }
} }
if len(b) == 0 { if len(_b) == 0 {
return nalus, true return nalus, true
} }
} }
// is Annex B // is Annex B
if val3 == 1 || val4 == 1 { if val3 == 1 || val4 == 1 {
_val3 := val3
_val4 := val4
start := 0 start := 0
pos := 0 pos := 0
for { for {
if start != pos { if start != pos {
nalus = append(nalus, b[start:pos]) nalus = append(nalus, b[start:pos])
} }
if val3 == 1 { if _val3 == 1 {
pos += 3 pos += 3
} else if val4 == 1 { } else if _val4 == 1 {
pos += 4 pos += 4
} }
start = pos start = pos
if start == len(b) { if start == len(b) {
break break
} }
val3 = 0 _val3 = 0
val4 = 0 _val4 = 0
for pos < len(b) { for pos < len(b) {
if pos+2 < len(b) && b[pos] == 0 { if pos+2 < len(b) && b[pos] == 0 {
val3 = bits.GetUIntBE(b[pos:], 24) _val3 = bits.GetUIntBE(b[pos:], 24)
if val3 == 0 { if _val3 == 0 {
if pos+3 < len(b) { if pos+3 < len(b) {
val4 = uint(b[pos+3]) _val4 = uint(b[pos+3])
if val4 == 1 { if _val4 == 1 {
break break
} }
} }
} else if val3 == 1 { } else if _val3 == 1 {
break break
} }
pos++ pos++

View File

@ -10,7 +10,7 @@ func TestParser(t *testing.T) {
var ok bool var ok bool
var nalus [][]byte var nalus [][]byte
annexbFrame, _ := hex.DecodeString("000001223322330000000122332233223300000133000001000001") annexbFrame, _ := hex.DecodeString("00000001223322330000000122332233223300000133000001000001")
nalus, ok = SplitNALUs(annexbFrame) nalus, ok = SplitNALUs(annexbFrame)
t.Log(ok, len(nalus)) t.Log(ok, len(nalus))