[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