Commit f604f0f5 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

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: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Tested-by: default avatarShuah Khan <shuah@kernel.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 10cb0504
...@@ -842,9 +842,9 @@ int au0828_start_analog_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -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) ...@@ -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) ...@@ -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) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment