瀏覽代碼

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>
tags/13.0-branchpoint
Boyuan Zhang 9 年之前
父節點
當前提交
b0ceb4cc48
共有 1 個檔案被更改,包括 27 行新增0 行删除
  1. 27
    0
      src/gallium/state_trackers/va/picture.c

+ 27
- 0
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);

Loading…
取消
儲存