[Libva] [PATCH 2/3] JPEG Encode: Bypass VME for JPEG Encode

Sirisha Muppavarapu sirisha.muppavarapu at intel.com
Mon Nov 10 23:03:35 PST 2014


---
 src/gen8_vme.c | 51 +++++++++++++++++++++++++++++++--------------------
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/src/gen8_vme.c b/src/gen8_vme.c
index 8cae2a0..29d4b5a 100644
--- a/src/gen8_vme.c
+++ b/src/gen8_vme.c
@@ -1155,7 +1155,7 @@ gen8_vme_context_destroy(void *context)
 
 Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context)
 {
-    struct gen6_vme_context *vme_context = calloc(1, sizeof(struct gen6_vme_context));
+    struct gen6_vme_context *vme_context = NULL;
     struct i965_kernel *vme_kernel_list = NULL;
     int i965_kernel_num;
 
@@ -1171,7 +1171,13 @@ Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
         vme_kernel_list = gen8_vme_mpeg2_kernels;
         encoder_context->vme_pipeline = gen8_vme_mpeg2_pipeline;
        	i965_kernel_num = sizeof(gen8_vme_mpeg2_kernels) / sizeof(struct i965_kernel); 
+        break;
 
+   case CODEC_JPEG:
+        //JPEG encode doesnt have vme. So, set the corresponding fields to NULL.
+        encoder_context->vme_context = NULL;
+        encoder_context->vme_pipeline = NULL;
+        encoder_context->vme_context_destroy = NULL;
         break;
 
     default:
@@ -1180,35 +1186,40 @@ Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
 
         break;
     }
-    vme_context->vme_kernel_sum = i965_kernel_num;
-    vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
 
-    vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
-    vme_context->gpe_context.curbe_size = CURBE_TOTAL_DATA_LENGTH;
-    vme_context->gpe_context.sampler_size = 0;
+    //If the codec is JPEG, bypass VME
+    if(encoder_context->codec != CODEC_JPEG) {
+        vme_context = calloc(1, sizeof(struct gen6_vme_context));
+        vme_context->vme_kernel_sum = i965_kernel_num;
+        vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
+
+        vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
+        vme_context->gpe_context.curbe_size = CURBE_TOTAL_DATA_LENGTH;
+        vme_context->gpe_context.sampler_size = 0;
 
 
-    vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1;
-    vme_context->gpe_context.vfe_state.num_urb_entries = 64;
-    vme_context->gpe_context.vfe_state.gpgpu_mode = 0;
-    vme_context->gpe_context.vfe_state.urb_entry_size = 16;
-    vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
+        vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1;
+        vme_context->gpe_context.vfe_state.num_urb_entries = 64;
+        vme_context->gpe_context.vfe_state.gpgpu_mode = 0;
+        vme_context->gpe_context.vfe_state.urb_entry_size = 16;
+        vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
 
-    gen7_vme_scoreboard_init(ctx, vme_context);
+        gen7_vme_scoreboard_init(ctx, vme_context);
 
-    gen8_gpe_load_kernels(ctx,
+        gen8_gpe_load_kernels(ctx,
                           &vme_context->gpe_context,
                           vme_kernel_list,
                           i965_kernel_num);
-    vme_context->vme_surface2_setup = gen8_gpe_surface2_setup;
-    vme_context->vme_media_rw_surface_setup = gen8_gpe_media_rw_surface_setup;
-    vme_context->vme_buffer_suface_setup = gen8_gpe_buffer_suface_setup;
-    vme_context->vme_media_chroma_surface_setup = gen8_gpe_media_chroma_surface_setup;
+        vme_context->vme_surface2_setup = gen8_gpe_surface2_setup;
+        vme_context->vme_media_rw_surface_setup = gen8_gpe_media_rw_surface_setup;
+        vme_context->vme_buffer_suface_setup = gen8_gpe_buffer_suface_setup;
+        vme_context->vme_media_chroma_surface_setup = gen8_gpe_media_chroma_surface_setup;
 
-    encoder_context->vme_context = vme_context;
-    encoder_context->vme_context_destroy = gen8_vme_context_destroy;
+        encoder_context->vme_context = vme_context;
+        encoder_context->vme_context_destroy = gen8_vme_context_destroy;
 
-    vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int));
+        vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int));
+    }
 
     return True;
 }
-- 
2.1.0



More information about the Libva mailing list