linux-4.4.1/__fill_v4l2_buffer()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#re08fef6]
#backlinks
*説明 [#k331db1b]
-パス: [[linux-4.4.1/drivers/media/v4l2-core/videobuf2-v4...
-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 w...
* returned to userspace
*/
static int __fill_v4l2_buffer(struct vb2_buffer *vb, voi...
{
struct v4l2_buffer *b = pb;
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffe...
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 userspa...
* for it. The caller has already verifi...
*/
b->length = vb->num_planes;
for (plane = 0; plane < vb->num_planes; ...
struct v4l2_plane *pdst = &b->m....
struct vb2_plane *psrc = &vb->pl...
-
--[[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 = psr...
else if (q->memory == VB2_MEMORY...
pdst->m.userptr = psrc->...
else if (q->memory == VB2_MEMORY...
pdst->m.fd = psrc->m.fd;
pdst->data_offset = psrc->data_o...
memset(pdst->reserved, 0, sizeof...
}
} else {
/*
* We use length and offset in v4l2_plan...
* single-planar buffers, but userspace ...
*/
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.of...
else if (q->memory == VB2_MEMORY_USERPTR)
b->m.userptr = vb->planes[0].m.u...
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_T...
if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAM...
V4L2_BUF_FLAG_TIMESTAMP_COPY) {
/*
* For non-COPY timestamps, drop timesta...
* and obtain the timestamp source from ...
*/
b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MA...
b->flags |= q->timestamp_flags & V4L2_BU...
}
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]
終了行:
*参照元 [#re08fef6]
#backlinks
*説明 [#k331db1b]
-パス: [[linux-4.4.1/drivers/media/v4l2-core/videobuf2-v4...
-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 w...
* returned to userspace
*/
static int __fill_v4l2_buffer(struct vb2_buffer *vb, voi...
{
struct v4l2_buffer *b = pb;
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffe...
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 userspa...
* for it. The caller has already verifi...
*/
b->length = vb->num_planes;
for (plane = 0; plane < vb->num_planes; ...
struct v4l2_plane *pdst = &b->m....
struct vb2_plane *psrc = &vb->pl...
-
--[[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 = psr...
else if (q->memory == VB2_MEMORY...
pdst->m.userptr = psrc->...
else if (q->memory == VB2_MEMORY...
pdst->m.fd = psrc->m.fd;
pdst->data_offset = psrc->data_o...
memset(pdst->reserved, 0, sizeof...
}
} else {
/*
* We use length and offset in v4l2_plan...
* single-planar buffers, but userspace ...
*/
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.of...
else if (q->memory == VB2_MEMORY_USERPTR)
b->m.userptr = vb->planes[0].m.u...
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_T...
if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAM...
V4L2_BUF_FLAG_TIMESTAMP_COPY) {
/*
* For non-COPY timestamps, drop timesta...
* and obtain the timestamp source from ...
*/
b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MA...
b->flags |= q->timestamp_flags & V4L2_BU...
}
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]
ページ名: