Re: Exact behavior of the EOS event?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On Thu, Apr 11, 2013 at 5:40 PM, Hans Verkuil <hverkuil@xxxxxxxxx> wrote:
> Hi Kamil, Roy,
>
> When implementing eos support in v4l2-ctl I started wondering about the
> exact timings of that.
>
> There are two cases, polling and non-polling, and I'll explain how I do it
> now in v4l2-ctl.
>
> Polling case:
>
> I select for both read and exceptions. When the select returns I check
> for exceptions and call DQEVENT, which may return EOS.
>
> If there is something to read then I call DQBUF to get the frame, process
> it and afterwards exit the capture loop if the EOS event was seen.
>
> This procedure assumes that setting the event and making the last frame
> available to userspace happen atomically, otherwise you can get a race
> condition.
>
> Non-polling case:
>
> I select for an exception with a timeout of 0 (i.e. returns immediately),
> then I call DQBUF (which may block), process the frame and exit if EOS was
> seen.
>
> I suspect this is wrong, since when I call select the EOS may not be set
> yet, but it is after the DQBUF. So in the next run through the capture loop
> I capture one frame too many.
>
>
> What I think is the correct sequence is to first select for a read(), but not
> exceptions, then do the DQBUF, and finally do a select for exceptions with
> a timeout of 0. If EOS was seen, then that was the last frame.
>
> A potential problem with that might be when you want to select on other
> events as well. Then you would select on both read and exceptions, and we
> end up with a potential race condition again. The only solution I see is to
> open a second filehandle to the video node and subscribe to the EOS event
> only for that filehandle and use that to do the EOS polling.
>
> It all feels rather awkward.
>
> Kamil, Roy, any ideas/suggestions to improve this?

I was thinking to serialize this within the driver, which means no buffers
on capture side will be DQBUF once the EOS is generated.

I'm not sure is this generic enough, but it should make life easier
for applications

Regards,
Roy
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux