[vlc-devel] [vlc-commits] opengl: forward the error code from the resize callback

Rémi Denis-Courmont remi at remlab.net
Thu Jan 17 17:06:31 CET 2019


Le torstaina 17. tammikuuta 2019, 17.46.15 EET Steve Lhomme a écrit :
> On 16/01/2019 12:41, Rémi Denis-Courmont wrote:
> > This is obviously wrong since it ends with an assertion failure at
> > opengl/display.c:228. And thus the commits before it make no sense.
> 
> It asserts there because it's not meant to handle
> VOUT_DISPLAY_RESET_PICTURES. And it receives that because during a
> VOUT_DISPLAY_CHANGE_DISPLAY_SIZE/VOUT_DISPLAY_CHANGE_DISPLAY_FILLED/VOUT_DIS
> PLAY_CHANGE_ZOOM it returned an error from a call to vlc_gl_Resize(). If the
> code is not ready to handle such an error (why it occurs for you is another
> thing to look at) then it will also assert on the call right after:
> 
> if(vlc_gl_MakeCurrent(sys->gl)!=VLC_SUCCESS)
> 
>      returnVLC_EGENERIC;
> 
> So I don't see how the commit is wrong. Either the DISPLAY_CHANGE_*
> events can never return an error from there, or the code needs to be
> ready to handle it.

Returning an error from those controls just means you need to reset the 
display input format, and the pool if the display was not ported yet.

Returning an error does *not* mean that you reject the change. You *cannot* 
reject the change. It simply does not work and cannot that way. Since the 
control is dispatched asynchronously, it is too late to reject the change.

I am planning to address that for other reasons than error handling, but even 
then, most (all except maybe Wayland) windowing systems lack provisions for 
rejecting a window size change.

So if you have a failure at that stage, then you have two options:
- render wrong going forward, or
- stop rendering and discard pictures until further notice.

Either way, you don't need to return an error to the core.

-- 
雷米‧德尼-库尔蒙
http://www.remlab.net/





More information about the vlc-devel mailing list