summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/va
diff options
context:
space:
mode:
authorBoyuan Zhang <boyuan.zhang@amd.com>2016-07-21 19:40:19 -0400
committerChristian König <christian.koenig@amd.com>2016-07-25 13:39:52 +0200
commitb0ceb4cc4862f3d751973e230569c97e0119aa19 (patch)
tree6c9ebede234a194b3c4be3b97234660164e53fa5 /src/gallium/state_trackers/va
parent85d807f2e04eb4f096fa619bc61c65cdcef446c8 (diff)
downloadexternal_mesa3d-b0ceb4cc4862f3d751973e230569c97e0119aa19.zip
external_mesa3d-b0ceb4cc4862f3d751973e230569c97e0119aa19.tar.gz
external_mesa3d-b0ceb4cc4862f3d751973e230569c97e0119aa19.tar.bz2
st/va: add preset values for VAAPI encode
Add some hardcoded values hardware needs mainly for rate control purpose. With previously hardcoded values for OMX, the rate control result is not correct. This change fixed the rate control result by setting correct values for Vaapi. Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Diffstat (limited to 'src/gallium/state_trackers/va')
-rw-r--r--src/gallium/state_trackers/va/picture.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/va/picture.c b/src/gallium/state_trackers/va/picture.c
index 4bb60f2..4abf155 100644
--- a/src/gallium/state_trackers/va/picture.c
+++ b/src/gallium/state_trackers/va/picture.c
@@ -95,6 +95,32 @@ vlVaGetReferenceFrame(vlVaDriver *drv, VASurfaceID surface_id,
*ref_frame = NULL;
}
+static void
+getEncParamPreset(vlVaContext *context)
+{
+ //motion estimation preset
+ context->desc.h264enc.motion_est.motion_est_quarter_pixel = 0x00000001;
+ context->desc.h264enc.motion_est.lsmvert = 0x00000002;
+ context->desc.h264enc.motion_est.enc_disable_sub_mode = 0x00000078;
+ context->desc.h264enc.motion_est.enc_en_ime_overw_dis_subm = 0x00000001;
+ context->desc.h264enc.motion_est.enc_ime_overw_dis_subm_no = 0x00000001;
+ context->desc.h264enc.motion_est.enc_ime2_search_range_x = 0x00000004;
+ context->desc.h264enc.motion_est.enc_ime2_search_range_y = 0x00000004;
+
+ //pic control preset
+ context->desc.h264enc.pic_ctrl.enc_cabac_enable = 0x00000001;
+ context->desc.h264enc.pic_ctrl.enc_constraint_set_flags = 0x00000040;
+
+ //rate control
+ context->desc.h264enc.rate_ctrl.vbv_buffer_size = 20000000;
+ context->desc.h264enc.rate_ctrl.vbv_buf_lv = 48;
+ context->desc.h264enc.rate_ctrl.fill_data_enable = 1;
+ context->desc.h264enc.rate_ctrl.enforce_hrd = 1;
+ context->desc.h264enc.enable_vui = false;
+
+ context->desc.h264enc.ref_pic_mode = 0x00000201;
+}
+
static VAStatus
handlePictureParameterBuffer(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf)
{
@@ -524,6 +550,7 @@ vlVaEndPicture(VADriverContextP ctx, VAContextID context_id)
if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
coded_buf = context->coded_buf;
+ getEncParamPreset(context);
context->decoder->begin_frame(context->decoder, context->target, &context->desc.base);
context->decoder->encode_bitstream(context->decoder, context->target,
coded_buf->derived_surface.resource, &feedback);