fix(h265parser): AVCDecoderConfRecord Unmarshal read order should same as Marshal
This commit is contained in:
parent
61aa8e4f72
commit
bb7e1606bd
@ -537,51 +537,12 @@ func (self *AVCDecoderConfRecord) Unmarshal(b []byte) (n int, err error) {
|
|||||||
self.ProfileCompatibility = b[2]
|
self.ProfileCompatibility = b[2]
|
||||||
self.AVCLevelIndication = b[3]
|
self.AVCLevelIndication = b[3]
|
||||||
self.LengthSizeMinusOne = b[4] & 0x03
|
self.LengthSizeMinusOne = b[4] & 0x03
|
||||||
spscount := int(b[5] & 0x1f)
|
|
||||||
n += 6
|
|
||||||
for i := 0; i < spscount; i++ {
|
|
||||||
if len(b) < n+2 {
|
|
||||||
err = ErrDecconfInvalid
|
|
||||||
return
|
|
||||||
}
|
|
||||||
spslen := int(pio.U16BE(b[n:]))
|
|
||||||
n += 2
|
|
||||||
|
|
||||||
if len(b) < n+spslen {
|
n = 23
|
||||||
err = ErrDecconfInvalid
|
|
||||||
return
|
|
||||||
}
|
|
||||||
self.SPS = append(self.SPS, b[n:n+spslen])
|
|
||||||
n += spslen
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(b) < n+1 {
|
n += 2
|
||||||
err = ErrDecconfInvalid
|
vpscount := int(b[n] & 0x1f)
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ppscount := int(b[n])
|
|
||||||
n++
|
n++
|
||||||
|
|
||||||
for i := 0; i < ppscount; i++ {
|
|
||||||
if len(b) < n+2 {
|
|
||||||
err = ErrDecconfInvalid
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ppslen := int(pio.U16BE(b[n:]))
|
|
||||||
n += 2
|
|
||||||
|
|
||||||
if len(b) < n+ppslen {
|
|
||||||
err = ErrDecconfInvalid
|
|
||||||
return
|
|
||||||
}
|
|
||||||
self.PPS = append(self.PPS, b[n:n+ppslen])
|
|
||||||
n += ppslen
|
|
||||||
}
|
|
||||||
|
|
||||||
vpscount := int(b[n])
|
|
||||||
n++
|
|
||||||
|
|
||||||
for i := 0; i < vpscount; i++ {
|
for i := 0; i < vpscount; i++ {
|
||||||
if len(b) < n+2 {
|
if len(b) < n+2 {
|
||||||
err = ErrDecconfInvalid
|
err = ErrDecconfInvalid
|
||||||
@ -597,6 +558,48 @@ func (self *AVCDecoderConfRecord) Unmarshal(b []byte) (n int, err error) {
|
|||||||
self.VPS = append(self.VPS, b[n:n+vpslen])
|
self.VPS = append(self.VPS, b[n:n+vpslen])
|
||||||
n += vpslen
|
n += vpslen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n += 2
|
||||||
|
spscount := int(b[n] & 0x1f)
|
||||||
|
n++
|
||||||
|
for i := 0; i < spscount; i++ {
|
||||||
|
if len(b) < n+2 {
|
||||||
|
err = ErrDecconfInvalid
|
||||||
|
return
|
||||||
|
}
|
||||||
|
spslen := int(pio.U16BE(b[n:]))
|
||||||
|
n += 2
|
||||||
|
|
||||||
|
if len(b) < n+spslen {
|
||||||
|
err = ErrDecconfInvalid
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.SPS = append(self.SPS, b[n:n+spslen])
|
||||||
|
n += spslen
|
||||||
|
}
|
||||||
|
if len(b) < n+1 {
|
||||||
|
err = ErrDecconfInvalid
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
n += 2
|
||||||
|
ppscount := int(b[n] & 0x1f)
|
||||||
|
n++
|
||||||
|
for i := 0; i < ppscount; i++ {
|
||||||
|
if len(b) < n+2 {
|
||||||
|
err = ErrDecconfInvalid
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ppslen := int(pio.U16BE(b[n:]))
|
||||||
|
n += 2
|
||||||
|
if len(b) < n+ppslen {
|
||||||
|
err = ErrDecconfInvalid
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.PPS = append(self.PPS, b[n:n+ppslen])
|
||||||
|
n += ppslen
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user