[vlc-devel] [vlc-commits] vout: add restart proxy callback in case the filter's variable is not a command
Rémi Denis-Courmont
remi at remlab.net
Sat Jul 1 19:31:48 CEST 2017
Le 1 juillet 2017 18:24:52 GMT+02:00, Victorien Le Couviour--Tuffet <git at videolan.org> a écrit :
>vlc | branch: master | Victorien Le Couviour--Tuffet
><victorien.lecouviour.tuffet at gmail.com> | Fri Jun 23 15:22:44 2017
>+0200| [4d35bc81ac6dc6acc5fceadb8baa8574b848494f] | committer: Thomas
>Guillem
>
>vout: add restart proxy callback in case the filter's variable is not a
>command
>
>This allows to remove the brute filter restart HACK from macOS and QT
>gui.
>
>The idea actually comes from Thomas Guillem.
>
>>
>http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4d35bc81ac6dc6acc5fceadb8baa8574b848494f
>---
>
> src/video_output/control.c | 2 +-
>src/video_output/video_output.c | 35
>+++++++++++++++++++++++++----------
> 2 files changed, 26 insertions(+), 11 deletions(-)
>
>diff --git a/src/video_output/control.c b/src/video_output/control.c
>index bbdb8948eb..e4cca29d2a 100644
>--- a/src/video_output/control.c
>+++ b/src/video_output/control.c
>@@ -172,7 +172,7 @@ void vout_control_PushString(vout_control_t *ctrl,
>int type, const char *string)
> vout_control_cmd_t cmd;
>
> vout_control_cmd_Init(&cmd, type);
>- cmd.u.string = strdup(string);
>+ cmd.u.string = string ? strdup(string) : NULL;
> vout_control_Push(ctrl, &cmd);
> }
>
>diff --git a/src/video_output/video_output.c
>b/src/video_output/video_output.c
>index e46859ddd1..41c3d892fe 100644
>--- a/src/video_output/video_output.c
>+++ b/src/video_output/video_output.c
>@@ -660,6 +660,15 @@ static int FilterProxyCallback(vlc_object_t
>*p_this, char const *psz_var,
> return 0;
> }
>
>+static int FilterRestartCallback(vlc_object_t *p_this, char const
>*psz_var,
>+ vlc_value_t oldval, vlc_value_t
>newval,
>+ void *p_data)
>+{
>+ (void) p_this; (void) psz_var; (void) oldval; (void) newval;
>+ vout_ControlChangeFilters((vout_thread_t *)p_data, NULL);
>+ return 0;
>+}
>+
>static void ThreadAddFilterCallbacks(vout_thread_t *vout, filter_t
>*filter)
> {
> /* Duplicate every command variables from the filter, and add a proxy
>@@ -673,12 +682,12 @@ static void
>ThreadAddFilterCallbacks(vout_thread_t *vout, filter_t *filter)
> {
> char *name = *pname;
> int var_type = var_Type(filter, name);
>+ assert(var_Type(vout, name) == 0);
>+ var_Create(vout, name, var_type | VLC_VAR_DOINHERIT |
>VLC_VAR_ISCOMMAND);
> if ((var_type & VLC_VAR_ISCOMMAND))
>- {
>- assert(var_Type(vout, name) == 0);
>- var_Create(vout, name, var_type | VLC_VAR_DOINHERIT);
> var_AddCallback(vout, name, FilterProxyCallback, filter);
>- }
>+ else
>+ var_AddCallback(vout, name, FilterRestartCallback, vout);
> free(name);
> }
> free(names);
>@@ -694,12 +703,15 @@ static int ThreadDelFilterCallbacks(filter_t
>*filter, void *opaque)
> for (char **pname = names; *pname != NULL; pname++)
> {
> char *name = *pname;
>- int var_type = var_Type(filter, name);
>- if ((var_type & VLC_VAR_ISCOMMAND))
>- {
>+ int var_type = var_Type(vout, name);
>+ assert(var_type & VLC_VAR_ISCOMMAND);
>+ int filter_var_type = var_Type(filter, name);
>+
>+ if (filter_var_type & VLC_VAR_ISCOMMAND)
> var_DelCallback(vout, name, FilterProxyCallback, filter);
>- var_Destroy(vout, name);
>- }
>+ else if (filter_var_type)
>+ var_DelCallback(vout, name, FilterRestartCallback, vout);
>+ var_Destroy(vout, name);
> free(name);
> }
> free(names);
>@@ -1651,7 +1663,10 @@ static int ThreadControl(vout_thread_t *vout,
>vout_control_cmd_t cmd)
> ThreadDisplayOsdTitle(vout, cmd.u.string);
> break;
> case VOUT_CONTROL_CHANGE_FILTERS:
>- ThreadChangeFilters(vout, NULL, cmd.u.string, -1, false);
>+ ThreadChangeFilters(vout, NULL,
>+ cmd.u.string != NULL ?
>+ cmd.u.string :
>vout->p->filter.configuration,
>+ -1, false);
> break;
> case VOUT_CONTROL_CHANGE_INTERLACE:
> ThreadChangeFilters(vout, NULL, vout->p->filter.configuration,
>
>_______________________________________________
>vlc-commits mailing list
>vlc-commits at videolan.org
>https://mailman.videolan.org/listinfo/vlc-commits
Repeating myselg but this makes no sense whatsoever. The command bit has nothing to do with needing to restart.
--
Rémi Denis-Courmont
Typed on an inconvenient virtual keyboard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20170701/cabb1549/attachment.html>
More information about the vlc-devel
mailing list