The scaling lsit should be filling out with zig zag scan Cc: "11.0 11.1" <mesa-sta...@lists.freedesktop.org> Signed-off-by: Leo Liu <leo....@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 +}; + 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]; } } -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev