SplitNALUs check AVCC first

This commit is contained in:
nareix 2016-04-21 15:58:46 +08:00
parent b959f0d973
commit b4831df775

View File

@ -214,6 +214,27 @@ func SplitNALUs(b []byte) (nalus [][]byte, ok bool) {
val3 := bits.GetUIntBE(b, 24)
val4 := bits.GetUIntBE(b, 32)
// maybe AVCC
if val4 <= uint(len(b)) {
b = b[4:]
nalus := [][]byte{}
for {
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)) {
break
}
}
if len(b) == 0 {
return nalus, true
}
}
// is Annex B
if val3 == 1 || val4 == 1 {
start := 0
@ -256,29 +277,6 @@ func SplitNALUs(b []byte) (nalus [][]byte, ok bool) {
return
}
// maybe AVCC
if val4 <= uint(len(b)) {
b = b[4:]
for {
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)) {
break
}
}
if len(b) == 0 {
ok = true
return
} else {
return [][]byte{b}, false
}
}
return [][]byte{b}, false
}