[FFmpeg-devel] [PATCH] lavc/vaapi_hevc: fix scaling list duplicate transfer issue.

Jun Zhao mypopydev at gmail.com
Tue Nov 22 10:16:01 EET 2016


From 4059bc56cba30b26bc194673968c3a51014e315f Mon Sep 17 00:00:00 2001
From: Jun Zhao <mypopydev at gmail.com>
Date: Tue, 22 Nov 2016 15:58:50 +0800
Subject: [PATCH] lavc/vaapi_hevc: fix scaling list duplicate transfer issue.

scaling list is already transfered to raster scan during head parsing,
so no need to transfer it again.

And after this fix, FATE test SLIST_A_Sony_4/SLIST_B_Sony_8/
SLIST_C_Sony_3/SLIST_D_Sony_9 will pass in i965/Skylake.

used the comand:
make HWACCEL='vaapi -vaapi_device /dev/dri/renderD128 \
-hwaccel_output_format yuv420p' fate-hevc -i | \
grep "recipe for target" | wc -l test and verify.

Signed-off-by: Wang, Yi A <yi.a.wamg at intel.com>
Signed-off-by: Jun Zhao <jun.zhao at intel.com>
---
 libavcodec/vaapi_hevc.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/libavcodec/vaapi_hevc.c b/libavcodec/vaapi_hevc.c
index 62f783e..dd43463 100644
--- a/libavcodec/vaapi_hevc.c
+++ b/libavcodec/vaapi_hevc.c
@@ -265,7 +265,7 @@ static int vaapi_hevc_start_frame(AVCodecContext          *avctx,
     VAPictureParameterBufferHEVC *pic_param;
     VAIQMatrixBufferHEVC *iq_matrix;
     ScalingList const * scaling_list;
-    int i, j, pos;
+    int i, j;
 
     ff_dlog(avctx, "vaapi_hevc_start_frame()\n");
 
@@ -293,15 +293,13 @@ static int vaapi_hevc_start_frame(AVCodecContext          *avctx,
 
     for (i = 0; i < 6; ++i) {
         for (j = 0; j < 16; ++j) {
-            pos = 4 * ff_hevc_diag_scan4x4_y[j] + ff_hevc_diag_scan4x4_x[j];
-            iq_matrix->ScalingList4x4[i][j] = scaling_list->sl[0][i][pos];
+            iq_matrix->ScalingList4x4[i][j] = scaling_list->sl[0][i][j];
         }
         for (j = 0; j < 64; ++j) {
-            pos = 8 * ff_hevc_diag_scan8x8_y[j] + ff_hevc_diag_scan8x8_x[j];
-            iq_matrix->ScalingList8x8[i][j] = scaling_list->sl[1][i][pos];
-            iq_matrix->ScalingList16x16[i][j] = scaling_list->sl[2][i][pos];
+            iq_matrix->ScalingList8x8[i][j] = scaling_list->sl[1][i][j];
+            iq_matrix->ScalingList16x16[i][j] = scaling_list->sl[2][i][j];
             if (i < 2) {
-                iq_matrix->ScalingList32x32[i][j] = scaling_list->sl[3][i * 3][pos];
+                iq_matrix->ScalingList32x32[i][j] = scaling_list->sl[3][i * 3][j];
             }
         }
         iq_matrix->ScalingListDC16x16[i] = scaling_list->sl_dc[0][i];
-- 
2.9.3



More information about the ffmpeg-devel mailing list