[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer. Add new member variables - bytesused, length, offset, userptr, fd, data_offset - to struct vb2_plane in order to cover all information of v4l2_plane. struct vb2_plane { <snip> unsigned int bytesused; unsigned int length; union { unsigned int offset; unsigned long userptr; int fd; } m; unsigned int data_offset; } Replace v4l2_buf with new member variables - index, type, memory - which are common fields for buffer management. struct vb2_buffer { <snip> unsigned int index; unsigned int type; unsigned int memory; unsigned int num_planes; struct vb2_plane planes[VIDEO_MAX_PLANES]; <snip> }; v4l2 specific fields - flags, field, timestamp, timecode, sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c struct vb2_v4l2_buffer { struct vb2_buffer vb2_buf; __u32 flags; __u32 field; struct timeval timestamp; struct v4l2_timecode timecode; __u32 sequence; }; Signed-off-by: Junghak Sung <jh1009.sung@samsung.com> Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com> Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com> Acked-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
c139990e84
commit
2d7007153f
@@ -216,13 +216,14 @@ int saa7134_buffer_count(unsigned int size, unsigned int count)
|
||||
|
||||
int saa7134_buffer_startpage(struct saa7134_buf *buf)
|
||||
{
|
||||
return saa7134_buffer_pages(vb2_plane_size(&buf->vb2, 0)) * buf->vb2.v4l2_buf.index;
|
||||
return saa7134_buffer_pages(vb2_plane_size(&buf->vb2.vb2_buf, 0))
|
||||
* buf->vb2.vb2_buf.index;
|
||||
}
|
||||
|
||||
unsigned long saa7134_buffer_base(struct saa7134_buf *buf)
|
||||
{
|
||||
unsigned long base;
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(&buf->vb2, 0);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(&buf->vb2.vb2_buf, 0);
|
||||
|
||||
base = saa7134_buffer_startpage(buf) * 4096;
|
||||
base += dma->sgl[0].offset;
|
||||
@@ -308,9 +309,9 @@ void saa7134_buffer_finish(struct saa7134_dev *dev,
|
||||
core_dbg("buffer_finish %p\n", q->curr);
|
||||
|
||||
/* finish current buffer */
|
||||
v4l2_get_timestamp(&q->curr->vb2.v4l2_buf.timestamp);
|
||||
q->curr->vb2.v4l2_buf.sequence = q->seq_nr++;
|
||||
vb2_buffer_done(&q->curr->vb2, state);
|
||||
v4l2_get_timestamp(&q->curr->vb2.timestamp);
|
||||
q->curr->vb2.sequence = q->seq_nr++;
|
||||
vb2_buffer_done(&q->curr->vb2.vb2_buf, state);
|
||||
q->curr = NULL;
|
||||
}
|
||||
|
||||
@@ -375,7 +376,8 @@ void saa7134_stop_streaming(struct saa7134_dev *dev, struct saa7134_dmaqueue *q)
|
||||
if (!list_empty(&q->queue)) {
|
||||
list_for_each_safe(pos, n, &q->queue) {
|
||||
tmp = list_entry(pos, struct saa7134_buf, entry);
|
||||
vb2_buffer_done(&tmp->vb2, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&tmp->vb2.vb2_buf,
|
||||
VB2_BUF_STATE_ERROR);
|
||||
list_del(pos);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
@@ -79,8 +79,9 @@ static int buffer_activate(struct saa7134_dev *dev,
|
||||
|
||||
int saa7134_ts_buffer_init(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
|
||||
dmaq->curr = NULL;
|
||||
buf->activate = buffer_activate;
|
||||
@@ -91,9 +92,10 @@ EXPORT_SYMBOL_GPL(saa7134_ts_buffer_init);
|
||||
|
||||
int saa7134_ts_buffer_prepare(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_dev *dev = dmaq->dev;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(vb2, 0);
|
||||
unsigned int lines, llength, size;
|
||||
|
||||
@@ -107,7 +109,7 @@ int saa7134_ts_buffer_prepare(struct vb2_buffer *vb2)
|
||||
return -EINVAL;
|
||||
|
||||
vb2_set_plane_payload(vb2, 0, size);
|
||||
vb2->v4l2_buf.field = dev->field;
|
||||
vbuf->field = dev->field;
|
||||
|
||||
return saa7134_pgtable_build(dev->pci, &dmaq->pt, dma->sgl, dma->nents,
|
||||
saa7134_buffer_startpage(buf));
|
||||
@@ -148,10 +150,12 @@ int saa7134_ts_start_streaming(struct vb2_queue *vq, unsigned int count)
|
||||
|
||||
list_for_each_entry_safe(buf, tmp, &dmaq->queue, entry) {
|
||||
list_del(&buf->entry);
|
||||
vb2_buffer_done(&buf->vb2, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&buf->vb2.vb2_buf,
|
||||
VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
if (dmaq->curr) {
|
||||
vb2_buffer_done(&dmaq->curr->vb2, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&dmaq->curr->vb2.vb2_buf,
|
||||
VB2_BUF_STATE_QUEUED);
|
||||
dmaq->curr = NULL;
|
||||
}
|
||||
return -EBUSY;
|
||||
|
@@ -83,7 +83,7 @@ static int buffer_activate(struct saa7134_dev *dev,
|
||||
struct saa7134_buf *buf,
|
||||
struct saa7134_buf *next)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = buf->vb2.vb2_queue->drv_priv;
|
||||
struct saa7134_dmaqueue *dmaq = buf->vb2.vb2_buf.vb2_queue->drv_priv;
|
||||
unsigned long control, base;
|
||||
|
||||
vbi_dbg("buffer_activate [%p]\n", buf);
|
||||
@@ -119,8 +119,9 @@ static int buffer_prepare(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_dev *dev = dmaq->dev;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(&buf->vb2, 0);
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(vb2, 0);
|
||||
unsigned int size;
|
||||
|
||||
if (dma->sgl->offset) {
|
||||
@@ -161,7 +162,8 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
static int buffer_init(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
|
||||
dmaq->curr = NULL;
|
||||
buf->activate = buffer_activate;
|
||||
|
@@ -791,7 +791,7 @@ static int buffer_activate(struct saa7134_dev *dev,
|
||||
struct saa7134_buf *buf,
|
||||
struct saa7134_buf *next)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = buf->vb2.vb2_queue->drv_priv;
|
||||
struct saa7134_dmaqueue *dmaq = buf->vb2.vb2_buf.vb2_queue->drv_priv;
|
||||
unsigned long base,control,bpl;
|
||||
unsigned long bpl_uv,lines_uv,base2,base3,tmp; /* planar */
|
||||
|
||||
@@ -872,7 +872,8 @@ static int buffer_activate(struct saa7134_dev *dev,
|
||||
static int buffer_init(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
|
||||
dmaq->curr = NULL;
|
||||
buf->activate = buffer_activate;
|
||||
@@ -883,8 +884,9 @@ static int buffer_prepare(struct vb2_buffer *vb2)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = vb2->vb2_queue->drv_priv;
|
||||
struct saa7134_dev *dev = dmaq->dev;
|
||||
struct saa7134_buf *buf = container_of(vb2, struct saa7134_buf, vb2);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(&buf->vb2, 0);
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb2);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
struct sg_table *dma = vb2_dma_sg_plane_desc(vb2, 0);
|
||||
unsigned int size;
|
||||
|
||||
if (dma->sgl->offset) {
|
||||
@@ -896,7 +898,7 @@ static int buffer_prepare(struct vb2_buffer *vb2)
|
||||
return -EINVAL;
|
||||
|
||||
vb2_set_plane_payload(vb2, 0, size);
|
||||
vb2->v4l2_buf.field = dev->field;
|
||||
vbuf->field = dev->field;
|
||||
|
||||
return saa7134_pgtable_build(dev->pci, &dmaq->pt, dma->sgl, dma->nents,
|
||||
saa7134_buffer_startpage(buf));
|
||||
@@ -932,7 +934,8 @@ void saa7134_vb2_buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct saa7134_dmaqueue *dmaq = vb->vb2_queue->drv_priv;
|
||||
struct saa7134_dev *dev = dmaq->dev;
|
||||
struct saa7134_buf *buf = container_of(vb, struct saa7134_buf, vb2);
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct saa7134_buf *buf = container_of(vbuf, struct saa7134_buf, vb2);
|
||||
|
||||
saa7134_buffer_queue(dev, dmaq, buf);
|
||||
}
|
||||
@@ -953,10 +956,12 @@ int saa7134_vb2_start_streaming(struct vb2_queue *vq, unsigned int count)
|
||||
|
||||
list_for_each_entry_safe(buf, tmp, &dmaq->queue, entry) {
|
||||
list_del(&buf->entry);
|
||||
vb2_buffer_done(&buf->vb2, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&buf->vb2.vb2_buf,
|
||||
VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
if (dmaq->curr) {
|
||||
vb2_buffer_done(&dmaq->curr->vb2, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&dmaq->curr->vb2.vb2_buf,
|
||||
VB2_BUF_STATE_QUEUED);
|
||||
dmaq->curr = NULL;
|
||||
}
|
||||
return -EBUSY;
|
||||
|
@@ -460,7 +460,7 @@ struct saa7134_thread {
|
||||
/* buffer for one video/vbi/ts frame */
|
||||
struct saa7134_buf {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_buffer vb2;
|
||||
struct vb2_v4l2_buffer vb2;
|
||||
|
||||
/* saa7134 specific */
|
||||
unsigned int top_seen;
|
||||
|
Reference in New Issue
Block a user