mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 09:36:49 +08:00
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:

committed by
Herman Chen

parent
7554e1c36d
commit
5f522dcaf0
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user