summaryrefslogtreecommitdiff
path: root/drivers/mxc
diff options
context:
space:
mode:
authorMing Qian <ming.qian@nxp.com>2020-03-04 15:34:50 +0800
committerMing Qian <ming.qian@nxp.com>2020-03-24 15:41:25 +0800
commitfa9960189405f3fb7a71b315e8a0aa5a55abfd16 (patch)
treee68c07a176c41644ef1a7fd02f87970a936a1d96 /drivers/mxc
parent0cd3c661b95ecb273da5ee76fe7353ab7abd38c9 (diff)
LF-1077:[8QM_MEK/8QXP_MEK]mxc:vpu_malone:compatible with ffmpeg h264_v4l2m2m decoder
supply a default sizeimage for output Signed-off-by: Ming Qian <ming.qian@nxp.com>
Diffstat (limited to 'drivers/mxc')
-rw-r--r--drivers/mxc/vpu_malone/vpu_b0.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/mxc/vpu_malone/vpu_b0.c b/drivers/mxc/vpu_malone/vpu_b0.c
index 927503cadb2c..f56335242ebd 100644
--- a/drivers/mxc/vpu_malone/vpu_b0.c
+++ b/drivers/mxc/vpu_malone/vpu_b0.c
@@ -888,11 +888,24 @@ static bool set_video_standard(struct vpu_ctx *ctx,
if (!check_fmt_is_support(ctx, &pformat_table[i]))
return false;
q_data->vdec_std = pformat_table[i].vdec_std;
+ q_data->num_planes = pformat_table[i].num_planes;
+ q_data->fourcc = f->fmt.pix_mp.pixelformat;
}
}
return true;
}
+static void set_output_default_sizeimage(struct queue_data *q_data)
+{
+ u32 i;
+
+ for (i = 0; i < q_data->num_planes; i++) {
+ if (q_data->sizeimage[i])
+ continue;
+ q_data->sizeimage[i] = q_data->width * q_data->height;
+ }
+}
+
static int v4l2_ioctl_s_fmt(struct file *file,
void *fh,
struct v4l2_format *f
@@ -917,7 +930,6 @@ static int v4l2_ioctl_s_fmt(struct file *file,
q_data = &ctx->q_data[V4L2_DST];
if (!set_video_standard(ctx, q_data, f, formats_yuv_dec, ARRAY_SIZE(formats_yuv_dec)))
return -EINVAL;
- pix_mp->num_planes = 2;
pix_mp->colorspace = V4L2_COLORSPACE_REC709;
} else if (f->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
q_data = &ctx->q_data[V4L2_SRC];
@@ -926,8 +938,7 @@ static int v4l2_ioctl_s_fmt(struct file *file,
} else
return -EINVAL;
- q_data->num_planes = pix_mp->num_planes;
- q_data->fourcc = pix_mp->pixelformat;
+ pix_mp->num_planes = q_data->num_planes;
down(&q_data->drv_q_lock);
if (V4L2_TYPE_IS_OUTPUT(f->type) || ctx->b_firstseq) {
@@ -945,6 +956,8 @@ static int v4l2_ioctl_s_fmt(struct file *file,
pix_mp->width = q_data->width;
pix_mp->height = q_data->height;
}
+ if (V4L2_TYPE_IS_OUTPUT(f->type))
+ set_output_default_sizeimage(q_data);
up(&q_data->drv_q_lock);
if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)