|
@@ -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);
|