diff --git a/src/gallium/frontends/va/config.c b/src/gallium/frontends/va/config.c index 588b69bfaf2..b82e923dfab 100644 --- a/src/gallium/frontends/va/config.c +++ b/src/gallium/frontends/va/config.c @@ -571,13 +571,20 @@ vlVaGetConfigAttributes(VADriverContextP ctx, VAProfile profile, VAEntrypoint en case VAConfigAttribEncROI: { - int roi_support = pscreen->get_video_param(pscreen, ProfileToPipe(profile), + union pipe_enc_cap_roi roi_pipe_caps = {}; + roi_pipe_caps.value = pscreen->get_video_param(pscreen, ProfileToPipe(profile), PIPE_VIDEO_ENTRYPOINT_ENCODE, PIPE_VIDEO_CAP_ENC_ROI); - if (roi_support <= 0) + if (roi_pipe_caps.value <= 0) value = VA_ATTRIB_NOT_SUPPORTED; else - value = roi_support; + { + VAConfigAttribValEncROI roi_va_caps = {}; + roi_va_caps.bits.num_roi_regions = roi_pipe_caps.bits.num_roi_regions; + roi_va_caps.bits.roi_rc_priority_support = roi_pipe_caps.bits.roi_rc_priority_support; + roi_va_caps.bits.roi_rc_qp_delta_support = roi_pipe_caps.bits.roi_rc_qp_delta_support; + value = roi_va_caps.value; + } } break; default: diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index 0dae7a99e80..55d0b4cd8bb 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -2405,7 +2405,12 @@ union pipe_enc_cap_roi { * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. */ uint32_t roi_rc_qp_delta_support : 1; - uint32_t reserved : 22; + /* + * Indicates the minimum driver granularity to set a ROI region with a specific QP value. + * In other words, the QP delta block granularity pixel size of the hardware encoder. + */ + uint32_t log2_roi_min_block_pixel_size : 4; + uint32_t reserved : 18; } bits; uint32_t value;