RE: Exact behavior of the EOS event?

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

 



Hi Hans,

> -----Original Message-----
> From: Hans Verkuil [mailto:hverkuil@xxxxxxxxx]
> Sent: Thursday, April 11, 2013 11:41 AM
> To: k.debski@xxxxxxxxxxx
> Cc: linux-media@xxxxxxxxxxxxxxx; Tzu-Jung Lee
> Subject: Exact behavior of the EOS event?
> 
> 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.

This would work if we have a single context only. In case of mem2mem
devices, where there is a separate context for each file this would not
work.

> 
> It all feels rather awkward.
> 
> Kamil, Roy, any ideas/suggestions to improve this?
> 
> Regards,
> 
> 	Hans

-- 
Kamil Debski
Linux Platform Group
Samsung Poland R&D Center


--
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