[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
@@ -653,16 +653,18 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
return cx8802_buf_prepare(vb->vb2_queue, dev, buf);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -672,8 +674,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
cx8802_buf_queue(dev, buf);
|
||||
}
|
||||
@@ -721,7 +724,7 @@ fail:
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
return err;
|
||||
@@ -749,7 +752,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
@@ -518,11 +518,11 @@ void cx88_wakeup(struct cx88_core *core,
|
||||
|
||||
buf = list_entry(q->active.next,
|
||||
struct cx88_buffer, list);
|
||||
v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
|
||||
buf->vb.v4l2_buf.field = core->field;
|
||||
buf->vb.v4l2_buf.sequence = q->count++;
|
||||
v4l2_get_timestamp(&buf->vb.timestamp);
|
||||
buf->vb.field = core->field;
|
||||
buf->vb.sequence = q->count++;
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
}
|
||||
|
||||
void cx88_shutdown(struct cx88_core *core)
|
||||
|
@@ -99,16 +99,18 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
return cx8802_buf_prepare(vb->vb2_queue, dev, buf);
|
||||
}
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -118,8 +120,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8802_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
|
||||
cx8802_buf_queue(dev, buf);
|
||||
}
|
||||
@@ -149,7 +152,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
@@ -214,7 +214,7 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
|
||||
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
cx8802_start_dma(dev, q, buf);
|
||||
return 0;
|
||||
}
|
||||
@@ -225,13 +225,13 @@ int cx8802_buf_prepare(struct vb2_queue *q, struct cx8802_dev *dev,
|
||||
struct cx88_buffer *buf)
|
||||
{
|
||||
int size = dev->ts_packet_size * dev->ts_packet_count;
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb, 0);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb.vb2_buf, 0);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
int rc;
|
||||
|
||||
if (vb2_plane_size(&buf->vb, 0) < size)
|
||||
if (vb2_plane_size(&buf->vb.vb2_buf, 0) < size)
|
||||
return -EINVAL;
|
||||
vb2_set_plane_payload(&buf->vb, 0, size);
|
||||
vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
|
||||
|
||||
rc = cx88_risc_databuffer(dev->pci, risc, sgt->sgl,
|
||||
dev->ts_packet_size, dev->ts_packet_count, 0);
|
||||
@@ -259,7 +259,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
|
||||
dprintk( 1, "queue is empty - first active\n" );
|
||||
list_add_tail(&buf->list, &cx88q->active);
|
||||
dprintk(1,"[%p/%d] %s - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -268,7 +268,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
|
||||
list_add_tail(&buf->list, &cx88q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk( 1, "[%p/%d] %s - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index, __func__);
|
||||
buf, buf->vb.vb2_buf.index, __func__);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ static void do_cancel_buffers(struct cx8802_dev *dev)
|
||||
while (!list_empty(&q->active)) {
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock,flags);
|
||||
}
|
||||
|
@@ -100,7 +100,7 @@ int cx8800_restart_vbi_queue(struct cx8800_dev *dev,
|
||||
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
cx8800_start_vbi_dma(dev, q, buf);
|
||||
return 0;
|
||||
}
|
||||
@@ -125,8 +125,9 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
unsigned int lines;
|
||||
unsigned int size;
|
||||
@@ -149,8 +150,9 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -160,8 +162,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *prev;
|
||||
struct cx88_dmaqueue *q = &dev->vbiq;
|
||||
|
||||
@@ -174,7 +177,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
cx8800_start_vbi_dma(dev, q, buf);
|
||||
dprintk(2,"[%p/%d] vbi_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -182,7 +185,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2,"[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +216,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
@@ -420,7 +420,7 @@ static int restart_video_queue(struct cx8800_dev *dev,
|
||||
if (!list_empty(&q->active)) {
|
||||
buf = list_entry(q->active.next, struct cx88_buffer, list);
|
||||
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
start_video_dma(dev, q, buf);
|
||||
}
|
||||
return 0;
|
||||
@@ -444,9 +444,10 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt,
|
||||
|
||||
static int buffer_prepare(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_core *core = dev->core;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
|
||||
|
||||
buf->bpl = core->width * dev->fmt->depth >> 3;
|
||||
@@ -489,7 +490,7 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
break;
|
||||
}
|
||||
dprintk(2,"[%p/%d] buffer_prepare - %dx%d %dbpp \"%s\" - dma=0x%08lx\n",
|
||||
buf, buf->vb.v4l2_buf.index,
|
||||
buf, buf->vb.vb2_buf.index,
|
||||
core->width, core->height, dev->fmt->depth, dev->fmt->name,
|
||||
(unsigned long)buf->risc.dma);
|
||||
return 0;
|
||||
@@ -497,8 +498,9 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_finish(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_riscmem *risc = &buf->risc;
|
||||
|
||||
if (risc->cpu)
|
||||
@@ -508,8 +510,9 @@ static void buffer_finish(struct vb2_buffer *vb)
|
||||
|
||||
static void buffer_queue(struct vb2_buffer *vb)
|
||||
{
|
||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||
struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *buf = container_of(vbuf, struct cx88_buffer, vb);
|
||||
struct cx88_buffer *prev;
|
||||
struct cx88_core *core = dev->core;
|
||||
struct cx88_dmaqueue *q = &dev->vidq;
|
||||
@@ -522,7 +525,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
if (list_empty(&q->active)) {
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
dprintk(2,"[%p/%d] buffer_queue - first active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
|
||||
} else {
|
||||
buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
|
||||
@@ -530,7 +533,7 @@ static void buffer_queue(struct vb2_buffer *vb)
|
||||
list_add_tail(&buf->list, &q->active);
|
||||
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
|
||||
dprintk(2, "[%p/%d] buffer_queue - append to active\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
buf, buf->vb.vb2_buf.index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -560,7 +563,7 @@ static void stop_streaming(struct vb2_queue *q)
|
||||
struct cx88_buffer, list);
|
||||
|
||||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
}
|
||||
|
@@ -321,7 +321,7 @@ struct cx88_riscmem {
|
||||
/* buffer for one video frame */
|
||||
struct cx88_buffer {
|
||||
/* common v4l buffer stuff -- must be first */
|
||||
struct vb2_buffer vb;
|
||||
struct vb2_v4l2_buffer vb;
|
||||
struct list_head list;
|
||||
|
||||
/* cx88 specific */
|
||||
|
Reference in New Issue
Block a user