Check object for VA buffer
authorXiang, Haihao <haihao.xiang@intel.com>
Fri, 15 Mar 2013 05:44:23 +0000 (13:44 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 15 Mar 2013 07:45:28 +0000 (15:45 +0800)
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
src/gen75_picture_process.c
src/gen75_picture_process.h
src/gen75_vpp_gpe.c

index 7ed1528..fd437f5 100644 (file)
@@ -140,6 +140,9 @@ gen75_proc_picture(VADriverContextP ctx,
     if (!obj_src_surf)
         goto error;
 
+    if (pipeline_param->num_filters && !pipeline_param->filters)
+        goto error;
+
     if (!obj_dst_surf->bo) {
         unsigned int is_tiled = 0;
         unsigned int fourcc = VA_FOURCC('N','V','1','2');
@@ -159,9 +162,11 @@ gen75_proc_picture(VADriverContextP ctx,
     }else if(pipeline_param->num_filters == 1) {
        struct object_buffer * obj_buf = BUFFER((*filter_id) + 0);
 
-       assert(obj_buf && obj_buf->buffer_store);
+       assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer);
        
-       if (!obj_buf || !obj_buf->buffer_store)
+       if (!obj_buf ||
+           !obj_buf->buffer_store ||
+           !obj_buf->buffer_store->buffer)
            goto error;
 
        VAProcFilterParameterBuffer* filter =
@@ -186,17 +191,25 @@ gen75_proc_picture(VADriverContextP ctx,
     }else if (pipeline_param->num_filters >= 2) {
          unsigned int i = 0;
          for (i = 0; i < pipeline_param->num_filters; i++){
-            struct object_buffer * obj_buf = BUFFER(pipeline_param->filters[i]);
-            VAProcFilterParameterBuffer* filter =
-               (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
-
-            if (filter->type != VAProcFilterNoiseReduction &&
-                filter->type != VAProcFilterDeinterlacing  &&
-                filter->type != VAProcFilterColorBalance   && 
-                filter->type != VAProcFilterNone ){ 
-                printf("Do not support multiply filters outside vebox pipeline \n");
-                assert(0);
-            }
+             struct object_buffer * obj_buf = BUFFER(pipeline_param->filters[i]);
+
+             assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer);
+       
+             if (!obj_buf ||
+                 !obj_buf->buffer_store ||
+                 !obj_buf->buffer_store->buffer)
+                 goto error;
+
+             VAProcFilterParameterBuffer* filter =
+                 (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
+
+             if (filter->type != VAProcFilterNoiseReduction &&
+                 filter->type != VAProcFilterDeinterlacing  &&
+                 filter->type != VAProcFilterColorBalance   && 
+                 filter->type != VAProcFilterNone ){ 
+                 printf("Do not support multiply filters outside vebox pipeline \n");
+                 assert(0);
+             }
          }
          gen75_vpp_vebox(ctx, proc_ctx);
     }     
index a7b04f7..b0f9750 100644 (file)
@@ -43,7 +43,6 @@ struct intel_video_process_context
     struct vpp_gpe_context     *vpp_gpe_ctx;
 
     VAProcPipelineParameterBuffer* pipeline_param;
-    VAProcFilterType filter_type;
 
     struct object_surface *surface_render_output_object;
     struct object_surface *surface_pipeline_input_object;
index db6a82a..fb7eba6 100644 (file)
@@ -344,9 +344,11 @@ gen75_gpe_process_sharpening(VADriverContextP ctx,
      VABufferID *filter_ids = (VABufferID*)pipe->filters ;
      struct object_buffer *obj_buf = BUFFER((*(filter_ids + 0)));
 
-     assert(obj_buf && obj_buf->buffer_store);
+     assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer);
        
-     if (!obj_buf || !obj_buf->buffer_store)
+     if (!obj_buf ||
+         !obj_buf->buffer_store ||
+         !obj_buf->buffer_store->buffer)
          goto error;
 
      VAProcFilterParameterBuffer* filter =
@@ -473,12 +475,17 @@ VAStatus gen75_gpe_process_picture(VADriverContextP ctx,
     unsigned int i;
     struct object_surface *obj_surface = NULL;
 
+    if (pipe->num_filters && !pipe->filters)
+        goto error;
+
     for(i = 0; i < pipe->num_filters; i++){
         struct object_buffer *obj_buf = BUFFER(pipe->filters[i]);
 
-        assert(obj_buf && obj_buf->buffer_store);
+        assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer);
 
-        if (!obj_buf || !obj_buf->buffer_store)
+        if (!obj_buf ||
+            !obj_buf->buffer_store ||
+            !obj_buf->buffer_store->buffer)
             goto error;
 
         filter = (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer;
@@ -515,7 +522,7 @@ VAStatus gen75_gpe_process_picture(VADriverContextP ctx,
     vpp_gpe_ctx->in_frame_w = obj_surface->orig_width;
     vpp_gpe_ctx->in_frame_h = obj_surface->orig_height;
 
-    if(filter->type == VAProcFilterSharpening) {
+    if(filter && filter->type == VAProcFilterSharpening) {
        va_status = gen75_gpe_process_sharpening(ctx, vpp_gpe_ctx); 
     } else {
        va_status = VA_STATUS_ERROR_ATTR_NOT_SUPPORTED;