summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/va
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/va')
-rw-r--r--src/gallium/state_trackers/va/config.c11
-rw-r--r--src/gallium/state_trackers/va/context.c2
-rw-r--r--src/gallium/state_trackers/va/va_private.h2
3 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/va/config.c b/src/gallium/state_trackers/va/config.c
index 7742087..889ce38 100644
--- a/src/gallium/state_trackers/va/config.c
+++ b/src/gallium/state_trackers/va/config.c
@@ -202,6 +202,17 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
config->profile = p;
+ for (int i = 0; i <num_attribs ; i++) {
+ if (attrib_list[i].type == VAConfigAttribRateControl) {
+ if (attrib_list[i].value == VA_RC_CBR)
+ config->rc = PIPE_H264_ENC_RATE_CONTROL_METHOD_CONSTANT;
+ else if (attrib_list[i].value == VA_RC_VBR)
+ config->rc = PIPE_H264_ENC_RATE_CONTROL_METHOD_VARIABLE;
+ else
+ config->rc = PIPE_H264_ENC_RATE_CONTROL_METHOD_DISABLE;
+ }
+ }
+
pipe_mutex_lock(drv->mutex);
*config_id = handle_table_add(drv->htab, config);
pipe_mutex_unlock(drv->mutex);
diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c
index 8882cba..65ba7db 100644
--- a/src/gallium/state_trackers/va/context.c
+++ b/src/gallium/state_trackers/va/context.c
@@ -276,6 +276,8 @@ vlVaCreateContext(VADriverContextP ctx, VAConfigID config_id, int picture_width,
context->desc.base.profile = config->profile;
context->desc.base.entry_point = config->entrypoint;
+ if (config->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE)
+ context->desc.h264enc.rate_ctrl.rate_ctrl_method = config->rc;
pipe_mutex_lock(drv->mutex);
*context_id = handle_table_add(drv->htab, context);
diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h
index 520db46..1addd87 100644
--- a/src/gallium/state_trackers/va/va_private.h
+++ b/src/gallium/state_trackers/va/va_private.h
@@ -229,6 +229,7 @@ typedef struct {
struct pipe_vc1_picture_desc vc1;
struct pipe_h264_picture_desc h264;
struct pipe_h265_picture_desc h265;
+ struct pipe_h264_enc_picture_desc h264enc;
} desc;
struct {
@@ -246,6 +247,7 @@ typedef struct {
typedef struct {
enum pipe_video_profile profile;
enum pipe_video_entrypoint entrypoint;
+ enum pipe_h264_enc_rate_control_method rc;
} vlVaConfig;
typedef struct {