video: driver: propagate i/p port color info to o/p port

Client may do g_fmt on output port to fetch output port
color info. Hence, update output port color info with
client set input port color info.

Change-Id: Ifa3b16763d7389cd063493e25ce8b266ce1cb8c6
Signed-off-by: Akshata Sahukar <quic_asahukar@quicinc.com>
Tento commit je obsažen v:
Akshata Sahukar
2022-02-04 10:33:43 -08:00
rodič dc71b3eaf1
revize 9df792a982
2 změnil soubory, kde provedl 35 přidání a 2 odebrání

Zobrazit soubor

@@ -1493,6 +1493,16 @@ static int msm_vdec_read_input_subcr_params(struct msm_vidc_inst *inst)
__func__);
}
/* align input port color info with output port */
inst->fmts[INPUT_PORT].fmt.pix_mp.colorspace =
inst->fmts[OUTPUT_PORT].fmt.pix_mp.colorspace;
inst->fmts[INPUT_PORT].fmt.pix_mp.xfer_func =
inst->fmts[OUTPUT_PORT].fmt.pix_mp.xfer_func;
inst->fmts[INPUT_PORT].fmt.pix_mp.ycbcr_enc =
inst->fmts[OUTPUT_PORT].fmt.pix_mp.ycbcr_enc;
inst->fmts[INPUT_PORT].fmt.pix_mp.quantization =
inst->fmts[OUTPUT_PORT].fmt.pix_mp.quantization;
inst->buffers.output.min_count = subsc_params.fw_min_count;
inst->buffers.output.extra_count = call_session_op(core,
extra_count, inst, MSM_VIDC_BUF_OUTPUT);
@@ -2488,7 +2498,7 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
{
int rc = 0;
struct msm_vidc_core *core;
struct v4l2_format *fmt;
struct v4l2_format *fmt, *output_fmt;
u32 codec_align, pix_fmt;
if (!inst || !inst->core) {
@@ -2539,6 +2549,17 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
}
inst->buffers.input.size =
fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
/* update input port color info */
fmt->fmt.pix_mp.colorspace = f->fmt.pix_mp.colorspace;
fmt->fmt.pix_mp.xfer_func = f->fmt.pix_mp.xfer_func;
fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc;
fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization;
/* update output port color info */
output_fmt = &inst->fmts[OUTPUT_PORT];
output_fmt->fmt.pix_mp.colorspace = f->fmt.pix_mp.colorspace;
output_fmt->fmt.pix_mp.xfer_func = f->fmt.pix_mp.xfer_func;
output_fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc;
output_fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization;
/* update crop dimensions */
inst->crop.left = inst->crop.top = 0;

Zobrazit soubor

@@ -1212,7 +1212,7 @@ static int msm_venc_s_fmt_output_meta(struct msm_vidc_inst *inst, struct v4l2_fo
static int msm_venc_s_fmt_input(struct msm_vidc_inst *inst, struct v4l2_format *f)
{
int rc = 0;
struct v4l2_format *fmt;
struct v4l2_format *fmt, *output_fmt;
struct msm_vidc_core *core;
u32 pix_fmt, width, height, size, bytesperline,
crop_width, crop_height;
@@ -1258,10 +1258,22 @@ static int msm_venc_s_fmt_input(struct msm_vidc_inst *inst, struct v4l2_format *
else
size = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_INPUT);
fmt->fmt.pix_mp.plane_fmt[0].sizeimage = size;
/* update input port colorspace info */
fmt->fmt.pix_mp.colorspace = f->fmt.pix_mp.colorspace;
fmt->fmt.pix_mp.xfer_func = f->fmt.pix_mp.xfer_func;
fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc;
fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization;
/*
* Update output port colorspace info.
* NOTE: If client needs CSC, then client needs to ensure setting
* output port color after setting input color info.
*/
output_fmt = &inst->fmts[OUTPUT_PORT];
output_fmt->fmt.pix_mp.colorspace = fmt->fmt.pix_mp.colorspace;
output_fmt->fmt.pix_mp.xfer_func = fmt->fmt.pix_mp.xfer_func;
output_fmt->fmt.pix_mp.ycbcr_enc = fmt->fmt.pix_mp.ycbcr_enc;
output_fmt->fmt.pix_mp.quantization = fmt->fmt.pix_mp.quantization;
inst->buffers.input.min_count = call_session_op(core,
min_count, inst, MSM_VIDC_BUF_INPUT);
inst->buffers.input.extra_count = call_session_op(core,