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
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++

View File

@ -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))