[vlc-devel] [PATCH] vout/opengl: Store and restore last viewport

Marvin Scholz epirat07 at gmail.com
Mon Aug 12 10:22:36 CEST 2019



On 12 Aug 2019, at 9:57, Thomas Guillem wrote:

> On Mon, Aug 12, 2019, at 09:42, Marvin Scholz wrote:
>>
>>
>> On 12 Aug 2019, at 9:37, Thomas Guillem wrote:
>>
>>> On Sat, Aug 10, 2019, at 19:56, Marvin Scholz wrote:
>>>> Between the call to vout_display_opengl_Viewport and the call to
>>>> vout_display_opengl_Display the viewport can be changed by the OS
>>>> causing the picture to render incorrectly.
>>>>
>>>> To prevent that, store the last set viewport and restore it in the
>>>> display function.
>>>>
>>>> Fix #21357
>>>> Fix #22209
>>>> ---
>>>>  modules/video_output/opengl/vout_helper.c | 17 +++++++++++++++++
>>>>  1 file changed, 17 insertions(+)
>>>>
>>>> diff --git a/modules/video_output/opengl/vout_helper.c
>>>> b/modules/video_output/opengl/vout_helper.c
>>>> index b37b653257..2a8ec9cc12 100644
>>>> --- a/modules/video_output/opengl/vout_helper.c
>>>> +++ b/modules/video_output/opengl/vout_helper.c
>>>> @@ -166,6 +166,13 @@ struct vout_display_opengl_t {
>>>>      float f_fovy; /* to avoid recalculating them when needed.
>>>> */
>>>>      float f_z;    /* Position of the camera on the shpere radius
>>>> vector */
>>>>      float f_sar;
>>>> +
>>>> +    struct {
>>>> +        GLint i_x;
>>>> +        GLint i_y;
>>>> +        GLint i_width;
>>>> +        GLint i_height;
>>>> +    } last_viewport;
>>>>  };
>>>>
>>>>  static const vlc_fourcc_t gl_subpicture_chromas[] = {
>>>> @@ -1021,6 +1028,10 @@ void
>>>> vout_display_opengl_SetWindowAspectRatio(vout_display_opengl_t 
>>>> *vgl,
>>>>  void vout_display_opengl_Viewport(vout_display_opengl_t *vgl, int 
>>>> x,
>>>> int y,
>>>>                                    unsigned width, unsigned height)
>>>>  {
>>>> +    vgl->last_viewport.i_x = x;
>>>> +    vgl->last_viewport.i_y = y;
>>>> +    vgl->last_viewport.i_width = width;
>>>> +    vgl->last_viewport.i_height = height;
>>>>      vgl->vt.Viewport(x, y, width, height);
>>>
>>> So, why not removing this vgl->vt.Viewport(x, y, width, height) call 
>>> ?
>>>
>>
>> The reason for this was that I wasn't sure if something would call
>> vout_display_opengl_Viewport with the intention to set the viewport
>> immediately and not call vout_display_opengl_Display later.
>> After checking the uses of vout_display_opengl_Viewport again it 
>> seems
>> thats nowhere the case right now though so I could indeed remove 
>> that.
>
> Maybe it is possible to call Display() with viewport arguments. That 
> is one less call/lock.
>

I just tried it again and it turns out this patch unfortunately does not 
fix all issues.
A debug logging output apparently changed timings in a way that it would 
luckily work…
So disregard this patch for now.

>>
>>>>  }
>>>>
>>>> @@ -1564,6 +1575,12 @@ int
>>>> vout_display_opengl_Display(vout_display_opengl_t *vgl,
>>>>  {
>>>>      GL_ASSERT_NOERROR();
>>>>
>>>> +    // Restore Viewport
>>>> +    vgl->vt.Viewport(vgl->last_viewport.i_x,
>>>> +                     vgl->last_viewport.i_y,
>>>> +                     vgl->last_viewport.i_width,
>>>> +                     vgl->last_viewport.i_height);
>>>
>>>
>>> And set the viewport only here.
>>>
>>>> +
>>>>      /* Why drawing here and not in Render()? Because this way, the
>>>>         OpenGL providers can call vout_display_opengl_Display to
>>>> force redraw.
>>>>         Currently, the OS X provider uses it to get a smooth window
>>>> resizing */
>>>> -- 
>>>> 2.19.1
>>>>
>>>> _______________________________________________
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>> _______________________________________________
>>> vlc-devel mailing list
>>> To unsubscribe or modify your subscription options:
>>> https://mailman.videolan.org/listinfo/vlc-devel
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list