diff options
author | Stanimir Varbanov <stanimir.varbanov@linaro.org> | 2021-06-22 14:39:58 +0300 |
---|---|---|
committer | Stanimir Varbanov <stanimir.varbanov@linaro.org> | 2021-07-29 16:19:51 +0300 |
commit | 09ad60102d40673b78710614635b8aed21ae9489 (patch) | |
tree | 0732b8c70ec9fc14be077cb32da2e88b0e3da660 /drivers/media/platform/qcom/venus/venc.c | |
parent | ec9149b19f9b469d7d9493d4486477e6e8f74501 (diff) |
venus: venc: Add support for intra-refresh period
Add support for intra-refresh period v4l2 control and drop
cyclic intra-refresh macroblock control in the same time.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Diffstat (limited to 'drivers/media/platform/qcom/venus/venc.c')
-rw-r--r-- | drivers/media/platform/qcom/venus/venc.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c index 1d62e38065d6..a027495398ed 100644 --- a/drivers/media/platform/qcom/venus/venc.c +++ b/drivers/media/platform/qcom/venus/venc.c @@ -549,6 +549,7 @@ static int venc_set_properties(struct venus_inst *inst) struct hfi_quantization_range quant_range; struct hfi_enable en; struct hfi_ltr_mode ltr_mode; + struct hfi_intra_refresh intra_refresh = {}; u32 ptype, rate_control, bitrate; u32 profile, level; int ret; @@ -804,6 +805,31 @@ static int venc_set_properties(struct venus_inst *inst) en.enable = 1; ret = hfi_session_set_property(inst, ptype, &en); + } + + if ((inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264 || + inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) && + (rate_control == HFI_RATE_CONTROL_CBR_VFR || + rate_control == HFI_RATE_CONTROL_CBR_CFR)) { + intra_refresh.mode = HFI_INTRA_REFRESH_NONE; + intra_refresh.cir_mbs = 0; + + if (ctr->intra_refresh_period) { + u32 mbs; + + mbs = ALIGN(inst->width, 16) * ALIGN(inst->height, 16); + mbs /= 16 * 16; + if (mbs % ctr->intra_refresh_period) + mbs++; + mbs /= ctr->intra_refresh_period; + + intra_refresh.mode = HFI_INTRA_REFRESH_RANDOM; + intra_refresh.cir_mbs = mbs; + } + + ptype = HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH; + + ret = hfi_session_set_property(inst, ptype, &intra_refresh); if (ret) return ret; } |