[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