fix[vepu580]: fix incorrect color range problem

For H.264 and H.265 encoder on RK3588, when input source is YUV, keep
input source. For RGB, transalting according range setting from API.

Change-Id: Icf0ffdb80d7fcc4027b8bd7b9b7fd673fc6e3b0b
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:
Johnson Ding
2024-11-20 15:58:58 +08:00
committed by Herman Chen
parent 7554e1c36d
commit 5f522dcaf0
2 changed files with 10 additions and 2 deletions

View File

@@ -725,9 +725,13 @@ static MPP_RET setup_vepu580_prep(HalVepu580RegSet *regs, MppEncPrepCfg *prep,
regs->reg_base.src_fmt.src_cfmt = hw_fmt; regs->reg_base.src_fmt.src_cfmt = hw_fmt;
regs->reg_base.src_fmt.alpha_swap = cfg.alpha_swap; regs->reg_base.src_fmt.alpha_swap = cfg.alpha_swap;
regs->reg_base.src_fmt.rbuv_swap = cfg.rbuv_swap; regs->reg_base.src_fmt.rbuv_swap = cfg.rbuv_swap;
regs->reg_base.src_fmt.src_range = (prep->range == MPP_FRAME_RANGE_JPEG) ? 1 : 0;
regs->reg_base.src_fmt.out_fmt = (fmt == MPP_FMT_YUV400) ? 0 : 1; regs->reg_base.src_fmt.out_fmt = (fmt == MPP_FMT_YUV400) ? 0 : 1;
if (MPP_FRAME_FMT_IS_YUV(fmt))
regs->reg_base.src_fmt.src_range = 1;
else
regs->reg_base.src_fmt.src_range = (prep->range == MPP_FRAME_RANGE_JPEG) ? 1 : 0;
if (MPP_FRAME_FMT_IS_FBC(fmt)) { if (MPP_FRAME_FMT_IS_FBC(fmt)) {
y_stride = mpp_frame_get_fbc_hdr_stride(task->frame); y_stride = mpp_frame_get_fbc_hdr_stride(task->frame);
if (!y_stride) if (!y_stride)

View File

@@ -1996,11 +1996,15 @@ static MPP_RET vepu580_h265_set_pp_regs(H265eV580RegSet *regs, VepuFmtCfg *fmt,
reg_base->reg0198_src_fmt.src_cfmt = fmt->format; reg_base->reg0198_src_fmt.src_cfmt = fmt->format;
reg_base->reg0198_src_fmt.alpha_swap = fmt->alpha_swap; reg_base->reg0198_src_fmt.alpha_swap = fmt->alpha_swap;
reg_base->reg0198_src_fmt.rbuv_swap = fmt->rbuv_swap; reg_base->reg0198_src_fmt.rbuv_swap = fmt->rbuv_swap;
reg_base->reg0198_src_fmt.src_range = (prep_cfg->range == MPP_FRAME_RANGE_JPEG) ? 1 : 0;
reg_base->reg0198_src_fmt.out_fmt = (prep_cfg->format == MPP_FMT_YUV400) ? 0 : 1; reg_base->reg0198_src_fmt.out_fmt = (prep_cfg->format == MPP_FMT_YUV400) ? 0 : 1;
reg_base->reg0203_src_proc.src_mirr = prep_cfg->mirroring > 0; reg_base->reg0203_src_proc.src_mirr = prep_cfg->mirroring > 0;
reg_base->reg0203_src_proc.src_rot = prep_cfg->rotation; reg_base->reg0203_src_proc.src_rot = prep_cfg->rotation;
if (MPP_FRAME_FMT_IS_FBC(prep_cfg->format))
reg_base->reg0198_src_fmt.src_range = 1;
else
reg_base->reg0198_src_fmt.src_range = (prep_cfg->range == MPP_FRAME_RANGE_JPEG) ? 1 : 0;
if (MPP_FRAME_FMT_IS_FBC(prep_cfg->format)) { if (MPP_FRAME_FMT_IS_FBC(prep_cfg->format)) {
stridey = mpp_frame_get_fbc_hdr_stride(task->frame); stridey = mpp_frame_get_fbc_hdr_stride(task->frame);
if (!stridey) if (!stridey)