VPP: Enable Skin Tone Detection and Enhancement feature in the driver.
authorSirisha Muppavarapu <sirisha.muppavarapu@intel.com>
Tue, 25 Mar 2014 22:04:29 +0000 (15:04 -0700)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 25 Apr 2014 02:45:51 +0000 (10:45 +0800)
The VPP-STDE feature is enabled in the driver code for gen75 and gen8.
In this commit, I added the filter and made appropriate changes to the
hw_codec_info and the supporting methods.
(cherry picked from commit 691b149b7afe578889a423841a29db3ac56aad83)

src/gen75_picture_process.c
src/gen75_vpp_vebox.c
src/i965_drv_video.c

index ad7d463..3c4fc0b 100644 (file)
@@ -192,8 +192,9 @@ gen75_proc_picture(VADriverContextP ctx,
        VAProcFilterParameterBuffer* filter =
            (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
 
-       if (filter->type == VAProcFilterNoiseReduction   ||
-           filter->type == VAProcFilterDeinterlacing    ||
+       if (filter->type == VAProcFilterNoiseReduction         ||
+           filter->type == VAProcFilterDeinterlacing          ||
+           filter->type == VAProcFilterSkinToneEnhancement    ||
            filter->type == VAProcFilterColorBalance){
            gen75_vpp_vebox(ctx, proc_ctx);
        }else if(filter->type == VAProcFilterSharpening){
@@ -220,8 +221,9 @@ gen75_proc_picture(VADriverContextP ctx,
              VAProcFilterParameterBuffer* filter =
                  (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
 
-             if (filter->type != VAProcFilterNoiseReduction &&
-                 filter->type != VAProcFilterDeinterlacing  &&
+             if (filter->type != VAProcFilterNoiseReduction       &&
+                 filter->type != VAProcFilterDeinterlacing        &&
+                 filter->type != VAProcFilterSkinToneEnhancement  &&
                  filter->type != VAProcFilterColorBalance) {
                  printf("Do not support multiply filters outside vebox pipeline \n");
                  assert(0);
index 8acf743..3895641 100644 (file)
@@ -1186,6 +1186,9 @@ VAStatus gen75_vebox_process_picture(VADriverContextP ctx,
              proc_ctx->filters_mask |= VPP_IECP_PRO_AMP;
              proc_ctx->filter_iecp_amp = filter;
              proc_ctx->filter_iecp_amp_num_elements = obj_buf->num_elements;
+         } else if (filter->type == VAProcFilterSkinToneEnhancement) {
+             proc_ctx->filters_mask |= VPP_IECP_STD_STE;
+             proc_ctx->filter_iecp_std = filter;
          }
     }
 
@@ -1483,6 +1486,9 @@ VAStatus gen8_vebox_process_picture(VADriverContextP ctx,
              proc_ctx->filters_mask |= VPP_IECP_PRO_AMP;
              proc_ctx->filter_iecp_amp = filter;
              proc_ctx->filter_iecp_amp_num_elements = obj_buf->num_elements;
+         } else if (filter->type == VAProcFilterSkinToneEnhancement) {
+             proc_ctx->filters_mask |= VPP_IECP_STD_STE;
+             proc_ctx->filter_iecp_std = filter;
          }
     }
 
index 60174b2..efe4777 100755 (executable)
@@ -318,12 +318,13 @@ static struct hw_codec_info gen75_hw_codec_info = {
     .has_di_motion_adptive = 1,
     .has_di_motion_compensated = 1,
 
-    .num_filters = 4,
+    .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
         { VAProcFilterDeinterlacing, I965_RING_VEBOX },
         { VAProcFilterSharpening, I965_RING_NULL },
         { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
     },
 };
 
@@ -349,12 +350,13 @@ static struct hw_codec_info gen8_hw_codec_info = {
     .has_di_motion_compensated = 1,
     .has_vp8_decoding = 1,
 
-    .num_filters = 4,
+    .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
         { VAProcFilterDeinterlacing, I965_RING_VEBOX },
         { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */
         { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
     },
 };
 
@@ -5120,6 +5122,9 @@ VAStatus i965_QueryVideoProcPipelineCaps(
             if (deint->algorithm == VAProcDeinterlacingMotionAdaptive ||
                 deint->algorithm == VAProcDeinterlacingMotionCompensated);
                 pipeline_cap->num_forward_references++;
+        } else if (base->type == VAProcFilterSkinToneEnhancement) {
+                VAProcFilterParameterBuffer *stde = (VAProcFilterParameterBuffer *)base;
+                (void)stde;
         }
     }