SplitNALu bugfix
This commit is contained in:
parent
b4831df775
commit
2412e77d72
@ -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++
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user