int fimc_is_queue_setup(struct fimc_is_queue *queue, void *alloc_ctx, unsigned int *num_planes, unsigned int sizes[], void *allocators[]) { u32 ret = 0; u32 plane; BUG_ON(!queue); BUG_ON(!alloc_ctx); BUG_ON(!num_planes); BUG_ON(!sizes); BUG_ON(!allocators); *num_planes = (unsigned int)(queue->framecfg.format.num_planes); fimc_is_set_plane_size(&queue->framecfg, sizes); for (plane = 0; plane < *num_planes; plane++) { allocators[plane] = alloc_ctx; queue->framecfg.size[plane] = sizes[plane]; mdbgv_vid("queue[%d] size : %d\n", plane, sizes[plane]); } return ret; }
int fimc_is_video_set_format_mplane(struct file *file, struct fimc_is_video_ctx *vctx, struct v4l2_format *format) { int ret = 0; struct fimc_is_queue *queue; BUG_ON(!vctx); BUG_ON(!format); queue = GET_VCTX_QUEUE(vctx, format); ret = fimc_is_queue_set_format_mplane(queue, format); mdbgv_vid("set_format(%d x %d)\n", queue->framecfg.width, queue->framecfg.height); return ret; }
int fimc_is_video_set_format_mplane(struct file *file, struct fimc_is_video_ctx *vctx, struct v4l2_format *format) { int ret = 0; u32 condition; void *device; struct fimc_is_video *video; struct fimc_is_queue *queue; BUG_ON(!vctx); BUG_ON(!GET_DEVICE(vctx)); BUG_ON(!GET_VIDEO(vctx)); BUG_ON(!format); device = GET_DEVICE(vctx); video = GET_VIDEO(vctx); queue = GET_QUEUE(vctx); /* capture video node can skip s_input */ if (video->type == FIMC_IS_VIDEO_TYPE_LEADER) condition = BIT(FIMC_IS_VIDEO_S_INPUT) | BIT(FIMC_IS_VIDEO_S_BUFS); else condition = BIT(FIMC_IS_VIDEO_S_INPUT) | BIT(FIMC_IS_VIDEO_S_BUFS) | BIT(FIMC_IS_VIDEO_OPEN); if (!(vctx->state & condition)) { err("[V%02d] invalid s_format is requested(%lX)", video->id, vctx->state); return -EINVAL; } ret = fimc_is_queue_set_format_mplane(queue, device, format); if (ret) { err("[V%02d] fimc_is_queue_set_format_mplane is fail(%d)", video->id, ret); goto p_err; } vctx->state = BIT(FIMC_IS_VIDEO_S_FORMAT); p_err: mdbgv_vid("set_format(%d x %d)\n", queue->framecfg.width, queue->framecfg.height); return ret; }