- memcpy(vb2_plane_vaddr(vb, 0), frame, frame_size);
- vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
+ struct buffer *buf = (struct buffer*)((char*)vb - offsetof(struct buffer, vb));
+
+ spin_lock(&blist_lock);
+ if(buflist) {
+ buflist_tail->next = buf;
+ buflist_tail = buf;
+ } else {
+ buflist = buflist_tail = buf;
+ }
+ buf->next = 0;
+ spin_unlock(&blist_lock);
+}
+
+static void clear_queue(enum vb2_buffer_state st)
+{
+ spin_lock(&blist_lock);
+ while(buflist) {
+ struct buffer *buf = buflist;
+ buflist = buflist->next;
+ vb2_buffer_done(&buf->vb, st);
+ }
+ buflist = buflist_tail = 0;
+ spin_unlock(&blist_lock);