*参照元 [#re08fef6]
#backlinks

*説明 [#k331db1b]
-パス: [[linux-4.4.1/drivers/media/v4l2-core/videobuf2-v4l2.c]]

-FIXME: これは何?
--説明


**引数 [#m44f1440]
-struct vb2_buffer *vb
--
--[[linux-4.4.1/vb2_buffer]]
-void *pb
--


**返り値 [#l61ea636]
-int
--


**参考 [#s2571a1f]


*実装 [#r6dd5bec]
 /**
  * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
  * returned to userspace
  */
 static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
 {
         struct v4l2_buffer *b = pb;
         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
         struct vb2_queue *q = vb->vb2_queue;
         unsigned int plane;
 
-
--[[linux-4.4.1/v4l2_buffer]]
--[[linux-4.4.1/vb2_v4l2_buffer]]
--[[linux-4.4.1/to_vb2_v4l2_buffer()]]
--[[linux-4.4.1/vb2_queue]]

         /* Copy back data such as timestamp, flags, etc. */
         b->index = vb->index;
         b->type = vb->type;
         b->memory = vb->memory;
         b->bytesused = 0;
 
         b->flags = vbuf->flags;
         b->field = vbuf->field;
         b->timestamp = vbuf->timestamp;
         b->timecode = vbuf->timecode;
         b->sequence = vbuf->sequence;
         b->reserved2 = 0;
         b->reserved = 0;
 
         if (q->is_multiplanar) {
                 /*
                  * Fill in plane-related data if userspace provided an array
                  * for it. The caller has already verified memory and size.
                  */
                 b->length = vb->num_planes;
                 for (plane = 0; plane < vb->num_planes; ++plane) {
                         struct v4l2_plane *pdst = &b->m.planes[plane];
                         struct vb2_plane *psrc = &vb->planes[plane];
 
-
--[[linux-4.4.1/v4l2_plane]]
--[[linux-4.4.1/vb2_plane]]

                         pdst->bytesused = psrc->bytesused;
                         pdst->length = psrc->length;
                         if (q->memory == VB2_MEMORY_MMAP)
                                 pdst->m.mem_offset = psrc->m.offset;
                         else if (q->memory == VB2_MEMORY_USERPTR)
                                 pdst->m.userptr = psrc->m.userptr;
                         else if (q->memory == VB2_MEMORY_DMABUF)
                                 pdst->m.fd = psrc->m.fd;
                         pdst->data_offset = psrc->data_offset;
                         memset(pdst->reserved, 0, sizeof(pdst->reserved));
                 }
         } else {
                 /*
                  * We use length and offset in v4l2_planes array even for
                  * single-planar buffers, but userspace does not.
                  */
                 b->length = vb->planes[0].length;
                 b->bytesused = vb->planes[0].bytesused;
                 if (q->memory == VB2_MEMORY_MMAP)
                         b->m.offset = vb->planes[0].m.offset;
                 else if (q->memory == VB2_MEMORY_USERPTR)
                         b->m.userptr = vb->planes[0].m.userptr;
                 else if (q->memory == VB2_MEMORY_DMABUF)
                         b->m.fd = vb->planes[0].m.fd;
         }
 
         /*
          * Clear any buffer state related flags.
          */
         b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
         b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK;
         if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) !=
             V4L2_BUF_FLAG_TIMESTAMP_COPY) {
                 /*
                  * For non-COPY timestamps, drop timestamp source bits
                  * and obtain the timestamp source from the queue.
                  */
                 b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                 b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
         }
 
         switch (vb->state) {
         case VB2_BUF_STATE_QUEUED:
         case VB2_BUF_STATE_ACTIVE:
                 b->flags |= V4L2_BUF_FLAG_QUEUED;
                 break;
         case VB2_BUF_STATE_ERROR:
                 b->flags |= V4L2_BUF_FLAG_ERROR;
                 /* fall through */
         case VB2_BUF_STATE_DONE:
                 b->flags |= V4L2_BUF_FLAG_DONE;
                 break;
         case VB2_BUF_STATE_PREPARED:
                 b->flags |= V4L2_BUF_FLAG_PREPARED;
                 break;
         case VB2_BUF_STATE_PREPARING:
         case VB2_BUF_STATE_DEQUEUED:
         case VB2_BUF_STATE_REQUEUEING:
                 /* nothing */
                 break;
         }
 
         if (vb2_buffer_in_use(q, vb))
                 b->flags |= V4L2_BUF_FLAG_MAPPED;
 
-
--[[linux-4.4.1/vb2_buffer_in_use()]]

         return 0;
 }


*コメント [#m19fc74d]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS