Message ID | 20220926142505.1827-5-quic_mmitkov@quicinc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: camss: sm8250: Virtual channels support for SM8250 | expand |
On 26/09/2022 15:25, quic_mmitkov@quicinc.com wrote:
> + fmt.stream = 0;
Thanks for updating your series.
I downloaded and applied but the above is generating an error for me on
linux-next..
Its probably because its late/early but I don't see which branch you are
working from here ?
---
bod
Hi Bryan, What is the error you're getting? I am testing on the linux-stable-22-09-09-imx577-camss branch. I wanted to try on the newest one (linux-stable-22-09-14-qrb5165-rb5-vision-mezzanine) but the multistream pathes wouldn't apply cleanly there. On 28/09/2022 05:44, Bryan O'Donoghue wrote: > On 26/09/2022 15:25, quic_mmitkov@quicinc.com wrote: >> + fmt.stream = 0; > > Thanks for updating your series. > > I downloaded and applied but the above is generating an error for me > on linux-next.. > > Its probably because its late/early but I don't see which branch you > are working from here ? > > --- > bod
On 28/09/2022 12:35, Milen Mitkov (Consultant) wrote: > Hi Bryan, > > What is the error you're getting? > > I am testing on the linux-stable-22-09-09-imx577-camss branch. I wanted > to try on the newest one > (linux-stable-22-09-14-qrb5165-rb5-vision-mezzanine) but the multistream > pathes wouldn't apply cleanly there. I tried linux-next as at last night but the compilation exploded, so I went back just a little bit further in time to pick up a reasonable set of linux-media stuff in linux-next and applied yours and my changes on top. To ssh://git.linaro.org/people/bryan.odonoghue/kernel.git * [new branch] HEAD -> linux-next+camss-changes-v4 --- bod
diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c index 81fb3a5bc1d5..b042faf3dcda 100644 --- a/drivers/media/platform/qcom/camss/camss-video.c +++ b/drivers/media/platform/qcom/camss/camss-video.c @@ -353,6 +353,7 @@ static int video_get_subdev_format(struct camss_video *video, fmt.pad = pad; fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; + fmt.stream = 0; ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt); if (ret) @@ -493,9 +494,11 @@ static int video_start_streaming(struct vb2_queue *q, unsigned int count) struct v4l2_subdev *subdev; int ret; - ret = video_device_pipeline_start(vdev, &video->pipe); - if (ret < 0) + ret = video_device_pipeline_alloc_start(vdev); + if (ret < 0) { + dev_err(video->camss->dev, "Failed to start media pipeline: %d\n", ret); return ret; + } ret = video_check_format(video); if (ret < 0) @@ -536,6 +539,7 @@ static void video_stop_streaming(struct vb2_queue *q) struct media_entity *entity; struct media_pad *pad; struct v4l2_subdev *subdev; + int ret; entity = &vdev->entity; while (1) { @@ -550,7 +554,18 @@ static void video_stop_streaming(struct vb2_queue *q) entity = pad->entity; subdev = media_entity_to_v4l2_subdev(entity); - v4l2_subdev_call(subdev, video, s_stream, 0); + ret = v4l2_subdev_call(subdev, video, s_stream, 0); + + if (ret == -EBUSY) { + /* Don't stop if other instances of the pipeline are still running */ + dev_dbg(video->camss->dev, "Video pipeline still used, don't stop streaming.\n"); + return; + } + + if (ret) { + dev_err(video->camss->dev, "Video pipeline stop failed: %d\n", ret); + return; + } } video_device_pipeline_stop(vdev);