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:
@@ -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;
|
||||
|
@@ -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,
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele