Hi Junghak,

On 10/16/2015 15:27, Junghak Sung wrote:
> Replace v4l2-stuffs with common things in struct vb2_fileio_data and
> vb2_thread().
> 
> Signed-off-by: Junghak Sung <[email protected]>
> Signed-off-by: Geunyoung Kim <[email protected]>
> Acked-by: Seung-Woo Kim <[email protected]>
> Acked-by: Inki Dae <[email protected]>
> ---
>  drivers/media/v4l2-core/videobuf2-v4l2.c |  113 
> +++++++++++++++---------------
>  1 file changed, 58 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c 
> b/drivers/media/v4l2-core/videobuf2-v4l2.c
> index dabcb6d..ea5ab37 100644
> --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
> +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
> @@ -882,6 +882,15 @@ unsigned int vb2_poll(struct vb2_queue *q, struct file 
> *file, poll_table *wait)
>  }
>  EXPORT_SYMBOL_GPL(vb2_poll);
>  
> +static void vb2_get_timestamp(struct timeval *tv)
> +{
> +     struct timespec ts;
> +
> +     ktime_get_ts(&ts);
> +     tv->tv_sec = ts.tv_sec;
> +     tv->tv_usec = ts.tv_nsec / NSEC_PER_USEC;
> +}

This isn't necessary after we switch to u64 for the timestamp. We can just call 
ktime_get_ns() without
introducing a new function.

Regards,

        Hans

> +
>  /**
>   * struct vb2_fileio_buf - buffer context used by file io emulator
>   *
> @@ -921,9 +930,10 @@ struct vb2_fileio_buf {
>   * or write function.
>   */
>  struct vb2_fileio_data {
> -     struct v4l2_requestbuffers req;
> -     struct v4l2_plane p;
> -     struct v4l2_buffer b;
> +     unsigned int count;
> +     unsigned int type;
> +     unsigned int memory;
> +     struct vb2_buffer *b;
>       struct vb2_fileio_buf bufs[VB2_MAX_FRAME];
>       unsigned int cur_index;
>       unsigned int initial_index;
> @@ -976,6 +986,10 @@ static int __vb2_init_fileio(struct vb2_queue *q, int 
> read)
>       if (fileio == NULL)
>               return -ENOMEM;
>  
> +     fileio->b = kzalloc(q->buf_struct_size, GFP_KERNEL);
> +     if (fileio->b == NULL)
> +             return -ENOMEM;
> +
>       fileio->read_once = q->fileio_read_once;
>       fileio->write_immediately = q->fileio_write_immediately;
>  
> @@ -983,11 +997,11 @@ static int __vb2_init_fileio(struct vb2_queue *q, int 
> read)
>        * Request buffers and use MMAP type to force driver
>        * to allocate buffers by itself.
>        */
> -     fileio->req.count = count;
> -     fileio->req.memory = VB2_MEMORY_MMAP;
> -     fileio->req.type = q->type;
> +     fileio->count = count;
> +     fileio->memory = VB2_MEMORY_MMAP;
> +     fileio->type = q->type;
>       q->fileio = fileio;
> -     ret = vb2_core_reqbufs(q, fileio->req.memory, &fileio->req.count);
> +     ret = vb2_core_reqbufs(q, fileio->memory, &fileio->count);
>       if (ret)
>               goto err_kfree;
>  
> @@ -1016,24 +1030,17 @@ static int __vb2_init_fileio(struct vb2_queue *q, int 
> read)
>        * Read mode requires pre queuing of all buffers.
>        */
>       if (read) {
> -             bool is_multiplanar = q->is_multiplanar;
> -
>               /*
>                * Queue all buffers.
>                */
>               for (i = 0; i < q->num_buffers; i++) {
> -                     struct v4l2_buffer *b = &fileio->b;
> +                     struct vb2_buffer *b = fileio->b;
>  
> -                     memset(b, 0, sizeof(*b));
> +                     memset(b, 0, q->buf_struct_size);
>                       b->type = q->type;
> -                     if (is_multiplanar) {
> -                             memset(&fileio->p, 0, sizeof(fileio->p));
> -                             b->m.planes = &fileio->p;
> -                             b->length = 1;
> -                     }
>                       b->memory = q->memory;
>                       b->index = i;
> -                     ret = vb2_internal_qbuf(q, b);
> +                     ret = vb2_core_qbuf(q, i, b);
>                       if (ret)
>                               goto err_reqbufs;
>                       fileio->bufs[i].queued = 1;
> @@ -1056,8 +1063,8 @@ static int __vb2_init_fileio(struct vb2_queue *q, int 
> read)
>       return ret;
>  
>  err_reqbufs:
> -     fileio->req.count = 0;
> -     vb2_core_reqbufs(q, fileio->req.memory, &fileio->req.count);
> +     fileio->count = 0;
> +     vb2_core_reqbufs(q, fileio->memory, &fileio->count);
>  
>  err_kfree:
>       q->fileio = NULL;
> @@ -1076,8 +1083,9 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q)
>       if (fileio) {
>               vb2_core_streamoff(q, q->type);
>               q->fileio = NULL;
> -             fileio->req.count = 0;
> -             vb2_reqbufs(q, &fileio->req);
> +             fileio->count = 0;
> +             vb2_core_reqbufs(q, fileio->memory, &fileio->count);
> +             kfree(fileio->b);
>               kfree(fileio);
>               dprintk(3, "file io emulator closed\n");
>       }
> @@ -1130,24 +1138,21 @@ static size_t __vb2_perform_fileio(struct vb2_queue 
> *q, char __user *data, size_
>        */
>       index = fileio->cur_index;
>       if (index >= q->num_buffers) {
> +             struct vb2_buffer *b = fileio->b;
> +
>               /*
>                * Call vb2_dqbuf to get buffer back.
>                */
> -             memset(&fileio->b, 0, sizeof(fileio->b));
> -             fileio->b.type = q->type;
> -             fileio->b.memory = q->memory;
> -             if (is_multiplanar) {
> -                     memset(&fileio->p, 0, sizeof(fileio->p));
> -                     fileio->b.m.planes = &fileio->p;
> -                     fileio->b.length = 1;
> -             }
> -             ret = vb2_internal_dqbuf(q, &fileio->b, nonblock);
> +             memset(b, 0, q->buf_struct_size);
> +             b->type = q->type;
> +             b->memory = q->memory;
> +             ret = vb2_core_dqbuf(q, b, nonblock);
>               dprintk(5, "vb2_dqbuf result: %d\n", ret);
>               if (ret)
>                       return ret;
>               fileio->dq_count += 1;
>  
> -             fileio->cur_index = index = fileio->b.index;
> +             fileio->cur_index = index = b->index;
>               buf = &fileio->bufs[index];
>  
>               /*
> @@ -1159,8 +1164,8 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, 
> char __user *data, size_
>                                : vb2_plane_size(q->bufs[index], 0);
>               /* Compensate for data_offset on read in the multiplanar case. 
> */
>               if (is_multiplanar && read &&
> -                 fileio->b.m.planes[0].data_offset < buf->size) {
> -                     buf->pos = fileio->b.m.planes[0].data_offset;
> +                             b->planes[0].data_offset < buf->size) {
> +                     buf->pos = b->planes[0].data_offset;
>                       buf->size -= buf->pos;
>               }
>       } else {
> @@ -1199,6 +1204,8 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, 
> char __user *data, size_
>        * Queue next buffer if required.
>        */
>       if (buf->pos == buf->size || (!read && fileio->write_immediately)) {
> +             struct vb2_buffer *b = fileio->b;
> +
>               /*
>                * Check if this is the last buffer to read.
>                */
> @@ -1210,20 +1217,15 @@ static size_t __vb2_perform_fileio(struct vb2_queue 
> *q, char __user *data, size_
>               /*
>                * Call vb2_qbuf and give buffer to the driver.
>                */
> -             memset(&fileio->b, 0, sizeof(fileio->b));
> -             fileio->b.type = q->type;
> -             fileio->b.memory = q->memory;
> -             fileio->b.index = index;
> -             fileio->b.bytesused = buf->pos;
> -             if (is_multiplanar) {
> -                     memset(&fileio->p, 0, sizeof(fileio->p));
> -                     fileio->p.bytesused = buf->pos;
> -                     fileio->b.m.planes = &fileio->p;
> -                     fileio->b.length = 1;
> -             }
> +             memset(b, 0, q->buf_struct_size);
> +             b->type = q->type;
> +             b->memory = q->memory;
> +             b->index = index;
> +             b->planes[0].bytesused = buf->pos;
> +
>               if (set_timestamp)
> -                     v4l2_get_timestamp(&fileio->b.timestamp);
> -             ret = vb2_internal_qbuf(q, &fileio->b);
> +                     vb2_get_timestamp(&b->timestamp);
> +             ret = vb2_core_qbuf(q, index, b);
>               dprintk(5, "vb2_dbuf result: %d\n", ret);
>               if (ret)
>                       return ret;
> @@ -1300,20 +1302,21 @@ static int vb2_thread(void *data)
>  
>       for (;;) {
>               struct vb2_buffer *vb;
> +             struct vb2_buffer *b = fileio->b;
>  
>               /*
>                * Call vb2_dqbuf to get buffer back.
>                */
> -             memset(&fileio->b, 0, sizeof(fileio->b));
> -             fileio->b.type = q->type;
> -             fileio->b.memory = q->memory;
> +             memset(b, 0, q->buf_struct_size);
> +             b->type = q->type;
> +             b->memory = q->memory;
>               if (prequeue) {
> -                     fileio->b.index = index++;
> +                     b->index = index++;
>                       prequeue--;
>               } else {
>                       call_void_qop(q, wait_finish, q);
>                       if (!threadio->stop)
> -                             ret = vb2_internal_dqbuf(q, &fileio->b, 0);
> +                             ret = vb2_core_dqbuf(q, b, 0);
>                       call_void_qop(q, wait_prepare, q);
>                       dprintk(5, "file io: vb2_dqbuf result: %d\n", ret);
>               }
> @@ -1321,15 +1324,15 @@ static int vb2_thread(void *data)
>                       break;
>               try_to_freeze();
>  
> -             vb = q->bufs[fileio->b.index];
> -             if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR))
> +             vb = q->bufs[b->index];
> +             if (b->state == VB2_BUF_STATE_DONE)
>                       if (threadio->fnc(vb, threadio->priv))
>                               break;
>               call_void_qop(q, wait_finish, q);
>               if (set_timestamp)
> -                     v4l2_get_timestamp(&fileio->b.timestamp);
> +                     vb2_get_timestamp(&b->timestamp);
>               if (!threadio->stop)
> -                     ret = vb2_internal_qbuf(q, &fileio->b);
> +                     ret = vb2_core_qbuf(q, b->index, b);
>               call_void_qop(q, wait_prepare, q);
>               if (ret || threadio->stop)
>                       break;
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to