GNOME Bugzilla – Bug 613346
[dshowvideosink] Add support for updating video caps
Last modified: 2010-08-14 13:12:55 UTC
Created attachment 156569 [details] [review] Fix updating video caps This patch fixes updating video caps when dshowvideosink is in playing state.
Thanks again for fixing this. It works most of time, but sometimes i get: dshowvideosink dshowvideosink.cpp:1352:gst_dshowvideosink_set_caps:<VideoSink> ChangeMediaType failed: 80040210 basesrc gstbasesrc.c:2447:gst_base_src_loop:<Source> pausing after gst_pad_push() = not-negotiated basesrc gstbasesrc.c:2507:gst_base_src_loop:<Source> error: Internal data flow error. basesrc gstbasesrc.c:2507:gst_base_src_loop:<Source> error: streaming task paused, reason not-negotiated (-4)
Error 80040210 is VFW_E_BUFFERS_OUTSTANDING, i.e. "One or more buffers are still active". I never get this error, but maybe the old buffers need to be flushed before changing media type. Can you try adding this before the call to StartUsingOutputPin: pin->Flush();
Unfortunately this doesn't solve the problem here. Xvimagesink and directdrawsink works fine, so i guess there's nothing wrong with my code.
Created attachment 156730 [details] [review] Fix updating video caps The only solution I could find to the VFW_E_BUFFERS_OUTSTANDING error is to try again if ChangeMediaType fails. I'm not able to reproduce the error, so if this patch doesn't work, it would be nice to get some more information about how you create and set the fullscreen window.
After removing the videobox plugin from my pipeline i can't reproduce the error (without the latest patch) anymore. Maybe that helps to locate the problem (if you like to further investigate). Thank you very much for spending your time.
This should by fixed upstream in: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=a51d318759b07eca60811e3d47d8e81b6d12cb8c