st/va: enable vbr rate control for vaapi encode
authorBoyuan Zhang <boyuan.zhang@amd.com>
Tue, 6 Sep 2016 20:39:45 +0000 (16:39 -0400)
committerLeo Liu <leo.liu@amd.com>
Mon, 12 Sep 2016 14:34:53 +0000 (10:34 -0400)
This patch enables variable bit-rate for vaapi encoding. According to va.h,
target bit-rate equals to maximum bit-rate multiplies by target_percentage.

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
src/gallium/state_trackers/va/config.c
src/gallium/state_trackers/va/picture.c

index 84bf9135288a1990610fffec4b36186917339084..405231685d37fc6f24924a85119c1d3d8588c2fb 100644 (file)
@@ -120,7 +120,7 @@ vlVaGetConfigAttributes(VADriverContextP ctx, VAProfile profile, VAEntrypoint en
          value = VA_RT_FORMAT_YUV420;
          break;
       case VAConfigAttribRateControl:
-         value = VA_RC_CQP | VA_RC_CBR;
+         value = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR;
          break;
       default:
          value = VA_ATTRIB_NOT_SUPPORTED;
index a283e8307bfac437b9588ba0b31fd7ec64663a64..7f3d96d67ab2932c9f69152eb8ace3dded8066d8 100644 (file)
@@ -322,7 +322,7 @@ handleVAEncMiscParameterTypeRateControl(vlVaContext *context, VAEncMiscParameter
        PIPE_H264_ENC_RATE_CONTROL_METHOD_CONSTANT)
       context->desc.h264enc.rate_ctrl.target_bitrate = rc->bits_per_second;
    else
-      context->desc.h264enc.rate_ctrl.target_bitrate = rc->bits_per_second * rc->target_percentage;
+      context->desc.h264enc.rate_ctrl.target_bitrate = rc->bits_per_second * rc->target_percentage / 100;
    context->desc.h264enc.rate_ctrl.peak_bitrate = rc->bits_per_second;
    if (context->desc.h264enc.rate_ctrl.target_bitrate < 2000000)
       context->desc.h264enc.rate_ctrl.vbv_buffer_size = MIN2((context->desc.h264enc.rate_ctrl.target_bitrate * 2.75), 2000000);