[Libva] [PATCH Libva-intel-driver 10/18] Encoding: Dynamically select one mechanism to construct encoding command buffer for each frame on Haswell

Zhao, Yakui yakui.zhao at intel.com
Mon Jan 12 05:01:33 PST 2015


From: Zhao Yakui <yakui.zhao at intel.com>

Currently it uses the fixed policy to construct encoding command buffer.
(Use CPU or GPU). And it is statically compiled.
But sometimes it needs to choose the different mechanism on the fly instead
of statically compiled mode.

Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
 src/gen75_mfc.c    |   15 +++++----------
 src/i965_encoder.h |    1 +
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/src/gen75_mfc.c b/src/gen75_mfc.c
index 905ceaf..4434f5a 100644
--- a/src/gen75_mfc.c
+++ b/src/gen75_mfc.c
@@ -49,8 +49,6 @@
 #define	AVC_INTER_MV_OFFSET	48
 #define	AVC_RDO_MASK		0xFFFF
 
-#define	MFC_SOFTWARE_HASWELL	0
-
 #define SURFACE_STATE_PADDED_SIZE               MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7)
 #define SURFACE_STATE_OFFSET(index)             (SURFACE_STATE_PADDED_SIZE * index)
 #define BINDING_TABLE_OFFSET(index)             (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index)
@@ -995,7 +993,6 @@ gen75_mfc_avc_slice_state(VADriverContextP ctx,
 }
 
 
-#if MFC_SOFTWARE_HASWELL
 
 static int
 gen75_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y, int end_mb,
@@ -1278,7 +1275,6 @@ gen75_mfc_avc_software_batchbuffer(VADriverContextP ctx,
     return batch_bo;
 }
 
-#else
 
 static void
 gen75_mfc_batchbuffer_surfaces_input(VADriverContextP ctx,
@@ -1640,7 +1636,6 @@ gen75_mfc_avc_hardware_batchbuffer(VADriverContextP ctx,
     return mfc_context->aux_batchbuffer_surface.bo;
 }
 
-#endif
 
 static void
 gen75_mfc_avc_pipeline_programing(VADriverContextP ctx,
@@ -1656,11 +1651,11 @@ gen75_mfc_avc_pipeline_programing(VADriverContextP ctx,
         return; 
     }
 
-#if MFC_SOFTWARE_HASWELL
-    slice_batch_bo = gen75_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context);
-#else
-    slice_batch_bo = gen75_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context);
-#endif
+
+    if (encoder_context->soft_batch_force)
+        slice_batch_bo = gen75_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context);
+    else
+        slice_batch_bo = gen75_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context);
 
     // begin programing
     intel_batchbuffer_start_atomic_bcs(batch, 0x4000); 
diff --git a/src/i965_encoder.h b/src/i965_encoder.h
index 13a9ad1..721031f 100644
--- a/src/i965_encoder.h
+++ b/src/i965_encoder.h
@@ -45,6 +45,7 @@ struct intel_encoder_context
     unsigned int rate_control_mode;
     unsigned int quality_level;
     unsigned int quality_range;
+    unsigned int soft_batch_force:1;
     void *vme_context;
     void *mfc_context;
     void (*vme_context_destroy)(void *vme_context);
-- 
1.7.10.1



More information about the Libva mailing list