Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271765
b: refs/heads/master
c: 25a27d9
h: refs/heads/master
i:
  271763: 971bedc
v: v3
  • Loading branch information
Marek Szyprowski authored and Mauro Carvalho Chehab committed Sep 6, 2011
1 parent d2d35f2 commit dfec1db
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c1426bc727b78808fb956f7402b689144c1506ee
refs/heads/master: 25a27d91006091e28532053c95fa36b70b79d3ad
67 changes: 36 additions & 31 deletions trunk/drivers/media/video/videobuf2-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,41 @@ static int __verify_planes_array(struct vb2_buffer *vb, struct v4l2_buffer *b)
return 0;
}

/**
* __buffer_in_use() - return true if the buffer is in use and
* the queue cannot be freed (by the means of REQBUFS(0)) call
*/
static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb)
{
unsigned int plane;
for (plane = 0; plane < vb->num_planes; ++plane) {
/*
* If num_users() has not been provided, call_memop
* will return 0, apparently nobody cares about this
* case anyway. If num_users() returns more than 1,
* we are not the only user of the plane's memory.
*/
if (call_memop(q, plane, num_users,
vb->planes[plane].mem_priv) > 1)
return true;
}
return false;
}

/**
* __buffers_in_use() - return true if any buffers on the queue are in use and
* the queue cannot be freed (by the means of REQBUFS(0)) call
*/
static bool __buffers_in_use(struct vb2_queue *q)
{
unsigned int buffer;
for (buffer = 0; buffer < q->num_buffers; ++buffer) {
if (__buffer_in_use(q, q->bufs[buffer]))
return true;
}
return false;
}

/**
* __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
* returned to userspace
Expand Down Expand Up @@ -335,7 +370,7 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b)
break;
}

if (vb->num_planes_mapped == vb->num_planes)
if (__buffer_in_use(q, vb))
b->flags |= V4L2_BUF_FLAG_MAPPED;

return ret;
Expand Down Expand Up @@ -399,33 +434,6 @@ static int __verify_mmap_ops(struct vb2_queue *q)
return 0;
}

/**
* __buffers_in_use() - return true if any buffers on the queue are in use and
* the queue cannot be freed (by the means of REQBUFS(0)) call
*/
static bool __buffers_in_use(struct vb2_queue *q)
{
unsigned int buffer, plane;
struct vb2_buffer *vb;

for (buffer = 0; buffer < q->num_buffers; ++buffer) {
vb = q->bufs[buffer];
for (plane = 0; plane < vb->num_planes; ++plane) {
/*
* If num_users() has not been provided, call_memop
* will return 0, apparently nobody cares about this
* case anyway. If num_users() returns more than 1,
* we are not the only user of the plane's memory.
*/
if (call_memop(q, plane, num_users,
vb->planes[plane].mem_priv) > 1)
return true;
}
}

return false;
}

/**
* vb2_reqbufs() - Initiate streaming
* @q: videobuf2 queue
Expand Down Expand Up @@ -1343,9 +1351,6 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
if (ret)
return ret;

vb_plane->mapped = 1;
vb->num_planes_mapped++;

dprintk(3, "Buffer %d, plane %d successfully mapped\n", buffer, plane);
return 0;
}
Expand Down
3 changes: 0 additions & 3 deletions trunk/include/media/videobuf2-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ struct vb2_mem_ops {

struct vb2_plane {
void *mem_priv;
int mapped:1;
};

/**
Expand Down Expand Up @@ -147,7 +146,6 @@ struct vb2_queue;
* @done_entry: entry on the list that stores all buffers ready to
* be dequeued to userspace
* @planes: private per-plane information; do not change
* @num_planes_mapped: number of mapped planes; do not change
*/
struct vb2_buffer {
struct v4l2_buffer v4l2_buf;
Expand All @@ -164,7 +162,6 @@ struct vb2_buffer {
struct list_head done_entry;

struct vb2_plane planes[VIDEO_MAX_PLANES];
unsigned int num_planes_mapped;
};

/**
Expand Down

0 comments on commit dfec1db

Please sign in to comment.