forked from Minki/linux
media: au0828: stop video streaming only when last user stops
If the application was streaming from both videoX and vbiX, and streaming from videoX was stopped, then the vbi streaming also stopped. The cause being that stop_streaming for video stopped the subdevs as well, instead of only doing that if dev->streaming_users reached 0. au0828_stop_vbi_streaming was also wrong since it didn't stop the subdevs at all when dev->streaming_users reached 0. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Tested-by: Shuah Khan <shuah@kernel.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
10cb050459
commit
f604f0f5af
@ -842,9 +842,9 @@ int au0828_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 1);
|
||||||
|
|
||||||
if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
|
if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
|
||||||
v4l2_device_call_all(&dev->v4l2_dev, 0, video,
|
|
||||||
s_stream, 1);
|
|
||||||
dev->vid_timeout_running = 1;
|
dev->vid_timeout_running = 1;
|
||||||
mod_timer(&dev->vid_timeout, jiffies + (HZ / 10));
|
mod_timer(&dev->vid_timeout, jiffies + (HZ / 10));
|
||||||
} else if (vq->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
|
} else if (vq->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
|
||||||
@ -864,10 +864,11 @@ static void au0828_stop_streaming(struct vb2_queue *vq)
|
|||||||
|
|
||||||
dprintk(1, "au0828_stop_streaming called %d\n", dev->streaming_users);
|
dprintk(1, "au0828_stop_streaming called %d\n", dev->streaming_users);
|
||||||
|
|
||||||
if (dev->streaming_users-- == 1)
|
if (dev->streaming_users-- == 1) {
|
||||||
au0828_uninit_isoc(dev);
|
au0828_uninit_isoc(dev);
|
||||||
|
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
|
||||||
|
}
|
||||||
|
|
||||||
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
|
|
||||||
dev->vid_timeout_running = 0;
|
dev->vid_timeout_running = 0;
|
||||||
del_timer_sync(&dev->vid_timeout);
|
del_timer_sync(&dev->vid_timeout);
|
||||||
|
|
||||||
@ -896,8 +897,10 @@ void au0828_stop_vbi_streaming(struct vb2_queue *vq)
|
|||||||
dprintk(1, "au0828_stop_vbi_streaming called %d\n",
|
dprintk(1, "au0828_stop_vbi_streaming called %d\n",
|
||||||
dev->streaming_users);
|
dev->streaming_users);
|
||||||
|
|
||||||
if (dev->streaming_users-- == 1)
|
if (dev->streaming_users-- == 1) {
|
||||||
au0828_uninit_isoc(dev);
|
au0828_uninit_isoc(dev);
|
||||||
|
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&dev->slock, flags);
|
spin_lock_irqsave(&dev->slock, flags);
|
||||||
if (dev->isoc_ctl.vbi_buf != NULL) {
|
if (dev->isoc_ctl.vbi_buf != NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user