|
@@ -844,6 +844,7 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
|
|
|
{
|
|
|
struct vb2_queue *q = vb->vb2_queue;
|
|
|
unsigned long flags;
|
|
|
+ unsigned int plane;
|
|
|
|
|
|
if (vb->state != VB2_BUF_STATE_ACTIVE)
|
|
|
return;
|
|
@@ -854,6 +855,10 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
|
|
|
dprintk(4, "Done processing on buffer %d, state: %d\n",
|
|
|
vb->v4l2_buf.index, vb->state);
|
|
|
|
|
|
+ /* sync buffers */
|
|
|
+ for (plane = 0; plane < vb->num_planes; ++plane)
|
|
|
+ call_memop(q, finish, vb->planes[plane].mem_priv);
|
|
|
+
|
|
|
/* Add the buffer to the done buffers list */
|
|
|
spin_lock_irqsave(&q->done_lock, flags);
|
|
|
vb->state = state;
|
|
@@ -1136,9 +1141,15 @@ err:
|
|
|
static void __enqueue_in_driver(struct vb2_buffer *vb)
|
|
|
{
|
|
|
struct vb2_queue *q = vb->vb2_queue;
|
|
|
+ unsigned int plane;
|
|
|
|
|
|
vb->state = VB2_BUF_STATE_ACTIVE;
|
|
|
atomic_inc(&q->queued_count);
|
|
|
+
|
|
|
+ /* sync buffers */
|
|
|
+ for (plane = 0; plane < vb->num_planes; ++plane)
|
|
|
+ call_memop(q, prepare, vb->planes[plane].mem_priv);
|
|
|
+
|
|
|
q->ops->buf_queue(vb);
|
|
|
}
|
|
|
|