[vlc-devel] [PATCH 1/2] vout: add a resize acknowledgement callback
Steve Lhomme
robux4 at ycbcr.xyz
Thu Feb 11 07:43:06 UTC 2021
-1
On 2021-02-11 8:38, Rémi Denis-Courmont wrote:
> No and no.
>
> Le 11 février 2021 09:31:33 GMT+02:00, Steve Lhomme <robux4 at ycbcr.xyz> a
> écrit :
>
> On 2021-02-10 16:53, Rémi Denis-Courmont wrote:
>
> Le keskiviikkona 10. helmikuuta 2021, 8.38.11 EET Steve Lhomme a
> écrit :
>
> @@ -543,7 +546,7 @@ void
> vout_window_Disable(vout_window_t *window);
>
> static inline void vout_window_ReportSize(vout_window_t
> *window,
>
> unsigned width, unsigned
> height)
>
> {
>
> - window->owner.cbs->resized(window, width, height);
> + window->owner.cbs->resized(window, width, height,
> NULL, NULL);
>
> }
>
> IMO this function should always expose the new parameter or
> have a new
> variant with the extra params. Just calling the callback
> manually (as
> done in 2/2) defeats the purpose of having a helper in the
> first place.
>
> The purpose of the helper is to help, which is what it does,
> including filling
> default parameters.
>
> Providing default values for rarely used parameters is possible,
> but it's
> really ugly in pure C (as opposed to C++).
>
> /**
>
> diff --git a/src/video_output/video_output.c
> b/src/video_output/video_output.c index
> d04d3f4d11..fb7f54e385 100644
> --- a/src/video_output/video_output.c
> +++ b/src/video_output/video_output.c
> @@ -543,7 +543,8 @@ void
> vout_ChangeWindowState(vout_thread_t *vout,
> unsigned st)>
> }
>
> void vout_ChangeDisplaySize(vout_thread_t *vout,
>
> - unsigned width, unsigned height)
> + unsigned width, unsigned height,
> + void (*cb)(void *), void *opaque)
>
> There's no guarantee this callback signature will match
> vout_window_ack_cb if it changes.
>
> It does not match in the first place.
>
> There should be a cast to that type.
>
> What? You can't cast function types. That is UB in theory, and
> breaks CFI in
> practice.
>
>
> Similar to what we do with some module callback:
> vlc_decoder_device_Open open__ = activate;
> (void) open__;
> set_callback(activate)
>
>
> {
>
> vout_thread_sys_t *sys = VOUT_THREAD_TO_SYS(vout);
>
> diff --git a/src/video_output/window.c
> b/src/video_output/window.c
> index 9c2df5c1e6..c866fe7af4 100644
> --- a/src/video_output/window.c
> +++ b/src/video_output/window.c
> @@ -214,13 +228,16 @@ typedef struct vout_display_window
>
> } vout_display_window_t;
>
> static void
> vout_display_window_ResizeNotify(vout_window_t *window,
>
> - unsigned width, unsigned
> height) + unsigned width,
> unsigned height, +
> vout_window_ack_cb cb, + void
> *opaque)
>
> {
>
> vout_display_window_t *state = window->owner.sys;
> vout_thread_t *vout = state->vout;
>
> + struct vout_window_ack_data data = { window, cb, opaque };
>
> msg_Dbg(window, "resized to %ux%u", width, height);
>
> - vout_ChangeDisplaySize(vout, width, height);
> + vout_ChangeDisplaySize(vout, width, height,
> vout_window_Ack, &data);
>
> Using a local stack structure forces
> vout_ChangeDisplaySize() to be
> synchronous.
>
> The whole point of the callback is that it's synchronous.
>
> Which is kind of contradictory to using a callback that
> look asynchronous (but is not).
>
> No, you're contradictory. The callback *is* synchronous
> therefore it *can* use
> stack objects. (Like many here) I prefer not to call xmalloc()
> if I don't have
> to.
>
>
> My point is that reading this code there is zero indication that it's
> synchronous. Not in the type, not in the name, not in the documentation.
> Passing a callback to a function is usually a hint that it's
> asynchronous. Otherwise you'd just get a return value.
> ------------------------------------------------------------------------
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel <https://mailman.videolan.org/listinfo/vlc-devel>
>
>
> --
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
> ma brièveté.
>
> _______________________________________________
> 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