util/rbsp: Fill bits twice if reading more than 16 bits

vl_rbsp_fillbits may fill less than 32 bits if it removes emulation
prevention bytes, but will fill at least 16 bits. We need to call it
twice when reading more than 16 bits.

This fixes parsing H264 SPS packed header in va frontend when emulation
prevention bytes are at position where 32 bit values are read.

Cc: mesa-stable

Reviewed-by: Leo Liu <leo.liu@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26276>
(cherry picked from commit 73d69ef1e6)
This commit is contained in:
David Rosca 2023-11-19 11:27:29 +01:00 committed by Eric Engestrom
parent c05aadcf25
commit 142c333748
2 changed files with 3 additions and 1 deletions

View file

@ -374,7 +374,7 @@
"description": "util/rbsp: Fill bits twice if reading more than 16 bits",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -138,6 +138,8 @@ static inline unsigned vl_rbsp_u(struct vl_rbsp *rbsp, unsigned n)
return 0;
vl_rbsp_fillbits(rbsp);
if (n > 16)
vl_rbsp_fillbits(rbsp);
return vl_vlc_get_uimsbf(&rbsp->nal, n);
}