diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-04-17 18:38:38 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-04-17 18:38:38 -0300 |
commit | a4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef (patch) | |
tree | 43c0511310fb78f033b1d4075f50b2056026e768 | |
parent | f4d4e4a1e89e3364277050ebd6092a87a101f130 (diff) | |
download | mediapointer-dvb-s2-a4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef.tar.gz mediapointer-dvb-s2-a4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef.tar.bz2 |
em28xx-dvb: videobuf callbacks are waiting for em28xx_fh
From: Mauro Carvalho Chehab <mchehab@infradead.org>
Thanks to Devin Heitmueller <devin.heitmueller@gmail.com> for pointing
this issue.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | linux/drivers/media/video/em28xx/em28xx-dvb.c | 8 | ||||
-rw-r--r-- | linux/drivers/media/video/em28xx/em28xx.h | 23 |
2 files changed, 20 insertions, 11 deletions
diff --git a/linux/drivers/media/video/em28xx/em28xx-dvb.c b/linux/drivers/media/video/em28xx/em28xx-dvb.c index af76ebbb1..33e83ea06 100644 --- a/linux/drivers/media/video/em28xx/em28xx-dvb.c +++ b/linux/drivers/media/video/em28xx/em28xx-dvb.c @@ -46,6 +46,7 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size) struct em28xx_fh *fh = vq->priv_data; struct em28xx *dev = fh->dev; + /* FIXME: The better would be to allocate a smaller buffer */ *size = 16 * fh->dev->width * fh->dev->height >> 3; if (0 == *count) *count = EM28XX_DEF_BUF; @@ -110,11 +111,16 @@ static int dvb_init(struct em28xx *dev) dev->qops->buf_setup = buffer_setup; + /* FIXME: Do we need more initialization here? */ + memset(&dev->dvb_fh, 0, sizeof (dev->dvb_fh)); + dev->dvb_fh.dev = dev; + dev->dvb_fh.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + videobuf_queue_vmalloc_init(&dev->dvb.dvbq, dev->qops, &dev->udev->dev, &dev->slock, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_ALTERNATE, - sizeof(struct em28xx_buffer), dev); + sizeof(struct em28xx_buffer), &dev->dvb_fh); /* init frontend */ switch (dev->model) { diff --git a/linux/drivers/media/video/em28xx/em28xx.h b/linux/drivers/media/video/em28xx/em28xx.h index 046fe249c..67565a481 100644 --- a/linux/drivers/media/video/em28xx/em28xx.h +++ b/linux/drivers/media/video/em28xx/em28xx.h @@ -315,6 +315,18 @@ struct em28xx_audio { spinlock_t slock; }; +struct em28xx; + +struct em28xx_fh { + struct em28xx *dev; + unsigned int stream_on:1; /* Locks streams */ + int radio; + + struct videobuf_queue vb_vidq; + + enum v4l2_buf_type type; +}; + /* main device struct */ struct em28xx { /* generic device properties */ @@ -416,19 +428,10 @@ struct em28xx { #if defined(CONFIG_VIDEO_EM28XX_DVB) || defined(CONFIG_VIDEO_EM28XX_DVB_MODULE) struct videobuf_dvb dvb; struct videobuf_queue_ops *qops; + struct em28xx_fh dvb_fh; #endif }; -struct em28xx_fh { - struct em28xx *dev; - unsigned int stream_on:1; /* Locks streams */ - int radio; - - struct videobuf_queue vb_vidq; - - enum v4l2_buf_type type; -}; - struct em28xx_ops { struct list_head next; char *name; |