VEBOX: update filters info for every frame processing
authorLi Xiaowei <xiaowei.a.li@intel.com>
Sat, 5 Jan 2013 02:21:49 +0000 (10:21 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Thu, 17 Jan 2013 05:08:40 +0000 (13:08 +0800)
filter parameters may alter when processing a video sequence,
so keep updating filters information before handing each frame.

Signed-off-by: Li Xiaowei <xiaowei.a.li@intel.com>
src/gen75_vpp_vebox.c

index af18023..33c292d 100644 (file)
@@ -1092,43 +1092,34 @@ VAStatus gen75_vebox_process_picture(VADriverContextP ctx,
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
  
-    if(proc_ctx->is_first_frame) {
-       /* prepare the basic pipeline */        
-        VAProcPipelineParameterBuffer *pipe = proc_ctx->pipeline_param;
-        VABufferID *filter_ids = (VABufferID*)proc_ctx->pipeline_param->filters ;
-        VAProcFilterParameterBuffer* filter = NULL;
-        struct object_buffer *obj_buf = NULL;
-        unsigned int i;
-
-        for(i = 0; i < pipe->num_filters; i ++) {
-            obj_buf = BUFFER((*(filter_ids + i)));
-            filter = (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
+    VAProcPipelineParameterBuffer *pipe = proc_ctx->pipeline_param;
+    VABufferID *filter_ids = (VABufferID*)proc_ctx->pipeline_param->filters ;
+    VAProcFilterParameterBuffer* filter = NULL;
+    struct object_buffer *obj_buf = NULL;
+    unsigned int i;
+
+    for (i = 0; i < pipe->num_filters; i ++) {
+         obj_buf = BUFFER((*(filter_ids + i)));
+         filter = (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
             
-            if(filter->type == VAProcFilterNoiseReduction) {
-                proc_ctx->filters_mask |= VPP_DNDI_DN;
-                proc_ctx->filter_dn = filter;
-            } else if (filter->type == VAProcFilterDeinterlacing) {
-                proc_ctx->filters_mask |= VPP_DNDI_DI;
-                proc_ctx->filter_di = filter;
-            } else if (filter->type == VAProcFilterColorBalance) {
-                 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 == VAProcFilterColorStandard){
-                 proc_ctx->filters_mask |= VPP_IECP_CSC;
-                 proc_ctx->filter_iecp_csc = filter;
-          /*} else if (filter->type == VAProcFilterSkinToneDetectAndEnhance){
-                 proc_ctx->filters_mask |= VPP_IECP_STD_STE;
-                 proc_ctx->filter_iecp_std = filter;
-            } else if (filter->type == VAProcFilterTotalColorControl){
-                 proc_ctx->filters_mask |= VPP_IECP_TCC;
-                 proc_ctx->filter_iecp_tcc = filter;
-          */} else {
-                 //not supported filter type
-                 return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED;
-            }
-        }
-   }
+         if (filter->type == VAProcFilterNoiseReduction) {
+             proc_ctx->filters_mask |= VPP_DNDI_DN;
+             proc_ctx->filter_dn = filter;
+         } else if (filter->type == VAProcFilterDeinterlacing) {
+             proc_ctx->filters_mask |= VPP_DNDI_DI;
+             proc_ctx->filter_di = filter;
+         } else if (filter->type == VAProcFilterColorBalance) {
+             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 == VAProcFilterColorStandard){
+             proc_ctx->filters_mask |= VPP_IECP_CSC;
+             proc_ctx->filter_iecp_csc = filter;
+         } else {
+                 /*not supported filter type */
+             return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED;
+         }
+    }
 
     hsw_veb_pre_format_convert(ctx, proc_ctx);
     hsw_veb_surface_reference(ctx, proc_ctx);