[Mesa-dev] [PATCH] st/omx/h264: fix corruption when scaling matrix present flag is set
Christian König
deathsimple at vodafone.de
Mon Feb 1 16:36:30 UTC 2016
Am 01.02.2016 um 17:09 schrieb Leo Liu:
> The scaling lsit should be filling out with zig zag scan
>
> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Leo Liu <leo.liu at amd.com>
> ---
> src/gallium/state_trackers/omx/vid_dec_h264.c | 21 +++++++++++++++++++--
> 1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/state_trackers/omx/vid_dec_h264.c b/src/gallium/state_trackers/omx/vid_dec_h264.c
> index f66ed89..8104e93 100644
> --- a/src/gallium/state_trackers/omx/vid_dec_h264.c
> +++ b/src/gallium/state_trackers/omx/vid_dec_h264.c
> @@ -79,6 +79,22 @@ static const uint8_t Default_8x8_Inter[64] = {
> 30, 30, 32, 32, 32, 33, 33, 35
> };
>
> +static const uint8_t Zigzag_Scan[16] = {
> + 0, 1, 4, 8, 5, 2, 3, 6,
> + 9, 12, 13, 10, 7, 11, 14, 15
> +};
> +
> +static const uint8_t Zigzag_Scan8[64] = {
> + 0, 1, 8, 16, 9, 2, 3, 10,
> + 17, 24, 32, 25, 18, 11, 4, 5,
> + 12, 19, 26, 33, 40, 48, 41, 34,
> + 27, 20, 13, 6, 7, 14, 21, 28,
> + 35, 42, 49, 56, 57, 50, 43, 36,
> + 29, 22, 15, 23, 30, 37, 44, 51,
> + 58, 59, 52, 45, 38, 31, 39, 46,
> + 53, 60, 61, 54, 47, 55, 62, 63
> +};
> +
We already have that defined as vl_zscan_normal in
src/gallium/auxiliary/vl/vl_zscan.h.
Probably a good idea to add the 16 scan there as well and then use both
from there.
Apart from that the patch looks good to me.
Regards,
Christian.
> static void vid_dec_h264_Decode(vid_dec_PrivateType *priv, struct vl_vlc *vlc, unsigned min_bits_left);
> static void vid_dec_h264_EndFrame(vid_dec_PrivateType *priv);
> static struct pipe_video_buffer *vid_dec_h264_Flush(vid_dec_PrivateType *priv);
> @@ -215,6 +231,7 @@ static void scaling_list(struct vl_rbsp *rbsp, uint8_t *scalingList, unsigned si
> }
>
> for (i = 0; i < sizeOfScalingList; ++i ) {
> + unsigned scan = (sizeOfScalingList == 16) ? Zigzag_Scan[i] : Zigzag_Scan8[i];
>
> if (nextScale != 0) {
> signed delta_scale = vl_rbsp_se(rbsp);
> @@ -224,8 +241,8 @@ static void scaling_list(struct vl_rbsp *rbsp, uint8_t *scalingList, unsigned si
> return;
> }
> }
> - scalingList[i] = nextScale == 0 ? lastScale : nextScale;
> - lastScale = scalingList[i];
> + scalingList[scan] = nextScale == 0 ? lastScale : nextScale;
> + lastScale = scalingList[scan];
> }
> }
>
More information about the mesa-dev
mailing list