avcodec/svq3: perform residual slice copy before xor'ing watermark key
Fixes ticket #5387
This commit is contained in:
parent
12733c0cbd
commit
95386b7b65
@ -1037,15 +1037,16 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
memcpy(s->slice_buf, s->gb.buffer + s->gb.index / 8, slice_bytes);
|
memcpy(s->slice_buf, s->gb.buffer + s->gb.index / 8, slice_bytes);
|
||||||
|
|
||||||
|
if (length > 0) {
|
||||||
|
memmove(s->slice_buf, &s->slice_buf[slice_length], length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
if (s->watermark_key) {
|
if (s->watermark_key) {
|
||||||
uint32_t header = AV_RL32(&s->slice_buf[1]);
|
uint32_t header = AV_RL32(&s->slice_buf[1]);
|
||||||
AV_WL32(&s->slice_buf[1], header ^ s->watermark_key);
|
AV_WL32(&s->slice_buf[1], header ^ s->watermark_key);
|
||||||
}
|
}
|
||||||
init_get_bits(&s->gb_slice, s->slice_buf, slice_bits);
|
init_get_bits(&s->gb_slice, s->slice_buf, slice_bits);
|
||||||
|
|
||||||
if (length > 0) {
|
|
||||||
memmove(s->slice_buf, &s->slice_buf[slice_length], length - 1);
|
|
||||||
}
|
|
||||||
skip_bits_long(&s->gb, slice_bytes * 8);
|
skip_bits_long(&s->gb, slice_bytes * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user