OSDN Git Service

genX_mfd: fix intensity compensation for frame-interlaced content
authorcarpalis <jerome.borsboom@carpalis.nl>
Sat, 28 Oct 2017 13:21:39 +0000 (15:21 +0200)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 5 Jan 2018 06:57:31 +0000 (14:57 +0800)
When frame-interlaced pictures are signalled to be intensity
compensated, we need to set the hardware to compensating both the top and
the bottom field.

Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
src/gen75_mfd.c
src/gen7_mfd.c
src/gen8_mfd.c

index bac7904..4d6b1d3 100644 (file)
@@ -2231,7 +2231,7 @@ gen75_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[2].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[2].obj_surface->private_data);
             else
@@ -2263,7 +2263,7 @@ gen75_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[3].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[3].obj_surface->private_data);
             else
index d3f12a9..9d3e208 100644 (file)
@@ -1965,7 +1965,7 @@ gen7_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[2].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[2].obj_surface->private_data);
             else
@@ -1997,7 +1997,7 @@ gen7_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[3].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[3].obj_surface->private_data);
             else
index 3d1c922..a0a6e59 100644 (file)
@@ -2010,7 +2010,7 @@ gen8_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[2].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[2].obj_surface->private_data);
             else
@@ -2042,7 +2042,7 @@ gen8_mfd_vc1_pred_pipe_state(VADriverContextP ctx,
         }
 
         if (pic_param->sequence_fields.bits.interlace &&
-            pic_param->picture_fields.bits.frame_coding_mode == 2) { /* Field-Interlace */
+            pic_param->picture_fields.bits.frame_coding_mode > 0) { /* Frame-Interlace or Field-Interlace */
             if (gen7_mfd_context->reference_surface[3].surface_id != VA_INVALID_ID)
                 gen7_vc1_bottom_surface = (struct gen7_vc1_surface *)(gen7_mfd_context->reference_surface[3].obj_surface->private_data);
             else