[Libva] [PATCH] libva-intel-driver: fix i965 encoder wrong bits shift operation
Sean V Kelley
sean.v.kelley at intel.com
Wed Jan 18 17:12:33 UTC 2017
On Tue, Jan 17, 2017 at 6:48 PM, Xiang, Haihao <haihao.xiang at intel.com>
wrote:
> On Tue, 2017-01-17 at 13:15 -0800, Sean V Kelley wrote:
> > From: Kuang-che Wu <kcwu at chromium.org>
> >
> > shift uint32_t by 32 bits is undefined behavior.
> >
> > For this particular case: when invoke avc_bitstream_put_ui() with 32
> > bits value at byte position of multiple of 4, existing 32 bits garbage
> > data in the buffer may be retained instead of cleared. The result is,
> > the position of NALU start code (0x00000001) looks like overwritten by
> > garbage value.
> >
> > Patch has been tested and used upstream:
> > https://chromium-review.googlesource.com/#/c/410541/
> >
> > Signed-off-by: Kuang-che Wu <kcwu at chromium.org>
> > Signed-off-by: Sean V Kelley <seanvk at posteo.de>
> > ---
> > src/i965_encoder_utils.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/i965_encoder_utils.c b/src/i965_encoder_utils.c
> > index ac58cd1a..e061d071 100644
> > --- a/src/i965_encoder_utils.c
> > +++ b/src/i965_encoder_utils.c
> > @@ -134,7 +134,11 @@ avc_bitstream_put_ui(avc_bitstream *bs, unsigned
> int val, int size_in_bits)
> > bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val);
> > } else {
> > size_in_bits -= bit_left;
> > - bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >>
> size_in_bits);
> > + if (bit_left == 32) {
> > + bs->buffer[pos] = (val >> size_in_bits);
>
> The input value of size_in_bits should be less than or equal to 32, so now
> the
> value of size_in_bits is 0 for this case, I think "bs->buffer[pos] = val"
> is
> more clear.
>
That's a reasonable change. Thanks Haihao. I'll update the patch.
Sean
>
> > + } else {
> > + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >>
> size_in_bits);
> > + }
> > bs->buffer[pos] = swap32(bs->buffer[pos]);
> >
> > if (pos + 1 == bs->max_size_in_dword) {
> _______________________________________________
> Libva mailing list
> Libva at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libva
>
--
Sean V. Kelley <sean.v.kelley at intel.com>
Open Source Technology Center / SSG
Intel Corp.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libva/attachments/20170118/ab224014/attachment.html>
More information about the Libva
mailing list