Пример #1
0
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;
}
Пример #3
0
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;
}