v4l2src regression in git master
Nicolas Dufresne
nicolas.dufresne at collabora.com
Sun Feb 15 13:27:16 PST 2015
First step of the fix:
https://bugzilla.gnome.org/show_bug.cgi?id=744573
Le 2015-02-14 14:34, Nicolas Dufresne a écrit :
> Hi Everyone,
>
> Sebastien mention to me last week that the state of v4l2src was not
> good in git master. I did some investigation while on a plane
> yesterday. What I notice have changed is the following (note that I'll
> file bugs about each of these soon, I just wanted to group all these
> issues together as the link might not be evident) :
>
> Decodebin systematically cause a reconfigure after first frame. This
> cause GstBaseSrc to re-run allocation query. This is not really a bug,
> but in fact the effect of having another bug fixed. During the second
> pool configuration, the pool is already active. This would fail in the
> past (but we were ignoring return value, making it work by accident
> most of the time). In recent pool, we are a bit more tolerant, in the
> sense that succeed the configuration if the pool is active and the
> configuration have not changed. We do this using equality on the
> structure, which is too strict since adjustment are made by the pool.
> The pool also do one more step in trying to succeed setting the new
> configuration, which is to stop the pool. Note that at this point, the
> allocation query has already run, hence the pipeline should have been
> drained. Though, because the check is too strict, this lead to an
> unfortunate reallocation of the buffers. On V4L2 side, this also mean
> we restart streaming, which cause additional delay between the first
> and second frame.
>
> The equality check is obviously too strict. I have two proposition to
> solve this issue. The first solution is that when the pool is active,
> and configuration does not match, I would simply return FALSE. The
> caller will then get new configuration and validate it. If it's still
> compatible (which is most likely), it will simply call again
> set_config() with the configuration which is equal and succeed. In
> that scenario, the pool will never try to stop itself in set_config(),
> which removes the unwanted side effect and the set_config()
> documentation is perfectly respected. This would also mean that
> renegotiation of allocation does not happen unless the element support
> it. Surprisingly, this is the old behaviour, since the new
> configuration was never taken into account unless a new pool was
> selected.
>
> The second solution would be to relax this check, checking for
> compatible configuration. Though this check remains a grey zone. The
> generic method that we added for that was not meant to be a perfect
> compatibility, but just a convenience function that cover the most
> common case. I'm starting to think it's not an ideal approach, but it
> is something that could work too. This would allow somehow implicit
> reconfiguration when the pool didn't changed.
>
> Now, this isn't the only thing that have changed. For reason I still
> don't understand, the GstAdapter used in the jpegdec internal parser
> started to randomly copy GstBuffers, which lead to calling
> v4l2mem_share(). I found that the implementation in GstV4l2Allocator
> is currently broken and lead to the memory to being unmmap() too early
> hence lead to crash. This does not happen with raw format as they are
> expected to be framed. This I'll fix in both master and 1.4, I have
> prepared a patch already. There might be something we could add to the
> caps to get this parsing step optimized, as we know v4l2 buffer are
> framed (maybe jpegdec has no such optimization, I didn't check).
>
> I also notice new issues with camerabin but my flight was not long
> enough, so this isn't investigated yet. We patched it for 1.4 to stop
> trying to reconfigure v4l2src (which is still not supported). But it
> seems that behaviour just came back. It is possibly related to the
> reconfigure event going through now. I think the right solution here
> would be to implement re-negotiation. I can't guaranty when this will
> happen, neither if it will happen for 1.6. So we should probably patch
> camerabin again if fixing the previous issues does not also fix this one.
>
> If you are noticing other regression in this element, please let me
> know. We have enabled many kernel features that we found are badly
> proxied by libv4l2. We also don't have (yet) any automated test for
> this element. For that, kernel 3.19 now ship with vivid test drivers.
> I am looking forward using this within gst-validate scenario in a near
> future.
>
> cheers,
> Nicolas
>
> p.s. I'll reply to this when bugs URI are available (some bugs already
> exist)
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
More information about the gstreamer-devel
mailing list