xref: /linux/drivers/media/platform/qcom/iris/iris_venc.c (revision 5ad964ad5656668399f00c76707f0d063b64a4b1)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
4  */
5 
6 #include "iris_buffer.h"
7 #include "iris_instance.h"
8 #include "iris_venc.h"
9 #include "iris_vpu_buffer.h"
10 
11 int iris_venc_inst_init(struct iris_inst *inst)
12 {
13 	struct v4l2_format *f;
14 
15 	inst->fmt_src = kzalloc(sizeof(*inst->fmt_src), GFP_KERNEL);
16 	inst->fmt_dst  = kzalloc(sizeof(*inst->fmt_dst), GFP_KERNEL);
17 	if (!inst->fmt_src || !inst->fmt_dst)
18 		return -ENOMEM;
19 
20 	f = inst->fmt_dst;
21 	f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
22 	f->fmt.pix_mp.width = DEFAULT_WIDTH;
23 	f->fmt.pix_mp.height = DEFAULT_HEIGHT;
24 	f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H264;
25 	inst->codec = f->fmt.pix_mp.pixelformat;
26 	f->fmt.pix_mp.num_planes = 1;
27 	f->fmt.pix_mp.plane_fmt[0].bytesperline = 0;
28 	f->fmt.pix_mp.plane_fmt[0].sizeimage = iris_get_buffer_size(inst, BUF_OUTPUT);
29 	f->fmt.pix_mp.field = V4L2_FIELD_NONE;
30 	f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_DEFAULT;
31 	f->fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_DEFAULT;
32 	f->fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
33 	f->fmt.pix_mp.quantization = V4L2_QUANTIZATION_DEFAULT;
34 	inst->buffers[BUF_OUTPUT].min_count = iris_vpu_buf_count(inst, BUF_OUTPUT);
35 	inst->buffers[BUF_OUTPUT].size = f->fmt.pix_mp.plane_fmt[0].sizeimage;
36 
37 	f = inst->fmt_src;
38 	f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
39 	f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_NV12;
40 	f->fmt.pix_mp.width = ALIGN(DEFAULT_WIDTH, 128);
41 	f->fmt.pix_mp.height = ALIGN(DEFAULT_HEIGHT, 32);
42 	f->fmt.pix_mp.num_planes = 1;
43 	f->fmt.pix_mp.plane_fmt[0].bytesperline = ALIGN(DEFAULT_WIDTH, 128);
44 	f->fmt.pix_mp.plane_fmt[0].sizeimage = iris_get_buffer_size(inst, BUF_INPUT);
45 	f->fmt.pix_mp.field = V4L2_FIELD_NONE;
46 	f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_DEFAULT;
47 	f->fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_DEFAULT;
48 	f->fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
49 	f->fmt.pix_mp.quantization = V4L2_QUANTIZATION_DEFAULT;
50 	inst->buffers[BUF_INPUT].min_count = iris_vpu_buf_count(inst, BUF_INPUT);
51 	inst->buffers[BUF_INPUT].size = f->fmt.pix_mp.plane_fmt[0].sizeimage;
52 
53 	inst->crop.left = 0;
54 	inst->crop.top = 0;
55 	inst->crop.width = f->fmt.pix_mp.width;
56 	inst->crop.height = f->fmt.pix_mp.height;
57 
58 	return 0;
59 }
60 
61 void iris_venc_inst_deinit(struct iris_inst *inst)
62 {
63 	kfree(inst->fmt_dst);
64 	kfree(inst->fmt_src);
65 }
66