static int vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, enum v4l2_field field) { struct cx8800_fh *fh = q->priv_data; struct cx8800_dev *dev = fh->dev; struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb); unsigned int size; int rc; size = VBI_LINE_COUNT * VBI_LINE_LENGTH * 2; if (0 != buf->vb.baddr && buf->vb.bsize < size) return -EINVAL; if (VIDEOBUF_NEEDS_INIT == buf->vb.state) { struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb); buf->vb.width = VBI_LINE_LENGTH; buf->vb.height = VBI_LINE_COUNT; buf->vb.size = size; buf->vb.field = V4L2_FIELD_SEQ_TB; if (0 != (rc = videobuf_iolock(q,&buf->vb,NULL))) goto fail; cx88_risc_buffer(dev->pci, &buf->risc, dma->sglist, 0, buf->vb.width * buf->vb.height, buf->vb.width, 0, buf->vb.height); } buf->vb.state = VIDEOBUF_PREPARED; return 0; fail: cx88_free_buffer(q,buf); return rc; }
static void vbi_release(struct videobuf_queue *q, struct videobuf_buffer *vb) { struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb); cx88_free_buffer(q,buf); }
static void dvb_buf_release(struct videobuf_queue *q, struct videobuf_buffer *vb) { struct cx8802_dev *dev = q->priv_data; cx88_free_buffer(dev->pci, (struct cx88_buffer*)vb); }
static void dvb_buf_release(struct videobuf_queue *q, struct videobuf_buffer *vb) { cx88_free_buffer(q, (struct cx88_buffer*)vb); }