diff options
Diffstat (limited to 'drivers/media/video/mem2mem_testdev.c')
| -rw-r--r-- | drivers/media/video/mem2mem_testdev.c | 50 | 
1 files changed, 26 insertions, 24 deletions
diff --git a/drivers/media/video/mem2mem_testdev.c b/drivers/media/video/mem2mem_testdev.c index d2dec585e61..3945556f573 100644 --- a/drivers/media/video/mem2mem_testdev.c +++ b/drivers/media/video/mem2mem_testdev.c @@ -110,22 +110,6 @@ enum {  	V4L2_M2M_DST = 1,  }; -/* Source and destination queue data */ -static struct m2mtest_q_data q_data[2]; - -static struct m2mtest_q_data *get_q_data(enum v4l2_buf_type type) -{ -	switch (type) { -	case V4L2_BUF_TYPE_VIDEO_OUTPUT: -		return &q_data[V4L2_M2M_SRC]; -	case V4L2_BUF_TYPE_VIDEO_CAPTURE: -		return &q_data[V4L2_M2M_DST]; -	default: -		BUG(); -	} -	return NULL; -} -  #define V4L2_CID_TRANS_TIME_MSEC	V4L2_CID_PRIVATE_BASE  #define V4L2_CID_TRANS_NUM_BUFS		(V4L2_CID_PRIVATE_BASE + 1) @@ -198,8 +182,26 @@ struct m2mtest_ctx {  	int			aborting;  	struct v4l2_m2m_ctx	*m2m_ctx; + +	/* Source and destination queue data */ +	struct m2mtest_q_data   q_data[2];  }; +static struct m2mtest_q_data *get_q_data(struct m2mtest_ctx *ctx, +					 enum v4l2_buf_type type) +{ +	switch (type) { +	case V4L2_BUF_TYPE_VIDEO_OUTPUT: +		return &ctx->q_data[V4L2_M2M_SRC]; +	case V4L2_BUF_TYPE_VIDEO_CAPTURE: +		return &ctx->q_data[V4L2_M2M_DST]; +	default: +		BUG(); +	} +	return NULL; +} + +  static struct v4l2_queryctrl *get_ctrl(int id)  {  	int i; @@ -223,7 +225,7 @@ static int device_process(struct m2mtest_ctx *ctx,  	int tile_w, bytes_left;  	int width, height, bytesperline; -	q_data = get_q_data(V4L2_BUF_TYPE_VIDEO_OUTPUT); +	q_data = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);  	width	= q_data->width;  	height	= q_data->height; @@ -436,7 +438,7 @@ static int vidioc_g_fmt(struct m2mtest_ctx *ctx, struct v4l2_format *f)  	if (!vq)  		return -EINVAL; -	q_data = get_q_data(f->type); +	q_data = get_q_data(ctx, f->type);  	f->fmt.pix.width	= q_data->width;  	f->fmt.pix.height	= q_data->height; @@ -535,7 +537,7 @@ static int vidioc_s_fmt(struct m2mtest_ctx *ctx, struct v4l2_format *f)  	if (!vq)  		return -EINVAL; -	q_data = get_q_data(f->type); +	q_data = get_q_data(ctx, f->type);  	if (!q_data)  		return -EINVAL; @@ -747,7 +749,7 @@ static int m2mtest_queue_setup(struct vb2_queue *vq,  	struct m2mtest_q_data *q_data;  	unsigned int size, count = *nbuffers; -	q_data = get_q_data(vq->type); +	q_data = get_q_data(ctx, vq->type);  	size = q_data->width * q_data->height * q_data->fmt->depth >> 3; @@ -775,7 +777,7 @@ static int m2mtest_buf_prepare(struct vb2_buffer *vb)  	dprintk(ctx->dev, "type: %d\n", vb->vb2_queue->type); -	q_data = get_q_data(vb->vb2_queue->type); +	q_data = get_q_data(ctx, vb->vb2_queue->type);  	if (vb2_plane_size(vb, 0) < q_data->sizeimage) {  		dprintk(ctx->dev, "%s data will not fit into plane (%lu < %lu)\n", @@ -860,6 +862,9 @@ static int m2mtest_open(struct file *file)  	ctx->transtime = MEM2MEM_DEF_TRANSTIME;  	ctx->num_processed = 0; +	ctx->q_data[V4L2_M2M_SRC].fmt = &formats[0]; +	ctx->q_data[V4L2_M2M_DST].fmt = &formats[0]; +  	ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, &queue_init);  	if (IS_ERR(ctx->m2m_ctx)) { @@ -986,9 +991,6 @@ static int m2mtest_probe(struct platform_device *pdev)  		goto err_m2m;  	} -	q_data[V4L2_M2M_SRC].fmt = &formats[0]; -	q_data[V4L2_M2M_DST].fmt = &formats[0]; -  	return 0;  	v4l2_m2m_release(dev->m2m_dev);  |