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