<html><head></head><body>I don't know what MODULES_LIST is for, really. It looks like a write-only document.<br><br>This is an edge case, so I don't know and I don't really care.<br><br><div class="gmail_quote">Le 14 janvier 2019 09:55:53 GMT+02:00, Steve Lhomme <robux4@ycbcr.xyz> a écrit :<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">Does this need a new entry in MODULES_LIST ?<br><br>On 12/01/2019 15:09, Rémi Denis-Courmont wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"> vlc | branch: master | Rémi Denis-Courmont <remi@remlab.net> | Fri Dec 28 20:48:38 2018 +0200| [5c18cff8d8cdba5784ca4bdb641fb483499117ed] | committer: Rémi Denis-Courmont<br><br> splitter: add a display plugin for splitter functionality<br><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><a href="http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5c18cff8d8cdba5784ca4bdb641fb483499117ed">http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5c18cff8d8cdba5784ca4bdb641fb483499117ed</a><br></blockquote><hr>   modules/video_output/Makefile.am |   2 +<br>   modules/video_output/splitter.c  | 235 +++++++++++++++++++++++++++++++++++++++<br>   src/libvlc-module.c              |   4 -<br>   3 files changed, 237 insertions(+), 4 deletions(-)<br><br> diff --git a/modules/video_output/Makefile.am b/modules/video_output/Makefile.am<br> index bd3363954e..6c95e621ca 100644<br> --- a/modules/video_output/Makefile.am<br> +++ b/modules/video_output/Makefile.am<br> @@ -513,6 +513,7 @@ libflaschen_plugin_la_SOURCES = video_output/flaschen.c<br>   libflaschen_plugin_la_LIBADD = $(SOCKET_LIBS)<br>   <br>   libvdummy_plugin_la_SOURCES = video_output/vdummy.c<br> +libvideo_splitter_plugin_la_SOURCES = video_output/splitter.c<br>   libvmem_plugin_la_SOURCES = video_output/vmem.c<br>   libwdummy_plugin_la_SOURCES = video_output/wdummy.c<br>   libyuv_plugin_la_SOURCES = video_output/yuv.c<br> @@ -521,6 +522,7 @@ libvgl_plugin_la_SOURCES = video_output/vgl.c<br>   vout_LTLIBRARIES += \<br>        libflaschen_plugin.la \<br>       libvdummy_plugin.la \<br> +       libvideo_splitter_plugin.la \<br>         libvmem_plugin.la \<br>           libwdummy_plugin.la \<br>         libvgl_plugin.la \<br> diff --git a/modules/video_output/splitter.c b/modules/video_output/splitter.c<br> new file mode 100644<br> index 0000000000..24b0e98ba8<br> --- /dev/null<br> +++ b/modules/video_output/splitter.c<br> @@ -0,0 +1,235 @@<br> +/**<br> + * @file splitter.c<br> + * @brief Video splitter video output module for VLC media player<br> + */<br> +/*****************************************************************************<br> + * Copyright © 2009 Laurent Aimar<br> + * Copyright © 2009-2018 Rémi Denis-Courmont<br> + *<br> + * This program is free software; you can redistribute it and/or modify it<br> + * under the terms of the GNU Lesser General Public License as published by<br> + * the Free Software Foundation; either version 2.1 of the License, or<br> + * (at your option) any later version.<br> + *<br> + * This program is distributed in the hope that it will be useful,<br> + * but WITHOUT ANY WARRANTY; without even the implied warranty of<br> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br> + * GNU Lesser General Public License for more details.<br> + *<br> + * You should have received a copy of the GNU Lesser General Public License<br> + * along with this program; if not, write to the Free Software Foundation,<br> + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.<br> + *****************************************************************************/<br> +<br> +#ifdef HAVE_CONFIG_H<br> +# include <config.h><br> +#endif<br> +<br> +#include <assert.h><br> +#include <stdlib.h><br> +<br> +#include <vlc_common.h><br> +#include <vlc_modules.h><br> +#include <vlc_plugin.h><br> +#include <vlc_vout_display.h><br> +#include <vlc_video_splitter.h><br> +<br> +struct vout_display_sys_t {<br> +    video_splitter_t splitter;<br> +<br> +    picture_t **pictures;<br> +    vout_display_t **displays;<br> +};<br> +<br> +static void vlc_vidsplit_Prepare(vout_display_t *vd, picture_t *pic,<br> +                                 subpicture_t *subpic, vlc_tick_t date)<br> +{<br> +    vout_display_sys_t *sys = vd->sys;<br> +<br> +    picture_Hold(pic);<br> +    (void) subpic;<br> +<br> +    if (video_splitter_Filter(&sys->splitter, sys->pictures, pic)) {<br> +        for (int i = 0; i < sys->splitter.i_output; i++)<br> +            sys->pictures[i] = NULL;<br> +        return;<br> +    }<br> +<br> +    for (int i = 0; i < sys->splitter.i_output; i++)<br> +        sys->pictures[i] = vout_display_Prepare(sys->displays[i],<br> +                                                sys->pictures[i], NULL, date);<br> +}<br> +<br> +static void vlc_vidsplit_Display(vout_display_t *vd, picture_t *picture)<br> +{<br> +    vout_display_sys_t *sys = vd->sys;<br> +<br> +    for (int i = 0; i < sys->splitter.i_output; i++)<br> +        if (sys->pictures[i] != NULL)<br> +            vout_display_Display(sys->displays[i], sys->pictures[i]);<br> +<br> +    (void) picture;<br> +}<br> +<br> +static int vlc_vidsplit_Control(vout_display_t *vd, int query, va_list args)<br> +{<br> +    (void)vd; (void)query; (void)args;<br> +    return VLC_EGENERIC;<br> +}<br> +<br> +static void vlc_vidsplit_display_Event(vout_display_t *p, int id, va_list ap)<br> +{<br> +    (void) p; (void) id; (void) ap;<br> +}<br> +<br> +static void vlc_vidsplit_Close(vout_display_t *vd)<br> +{<br> +    vout_display_sys_t *sys = vd->sys;<br> +    int n = sys->splitter.i_output;<br> +<br> +    for (int i = 0; i < n; i++) {<br> +        vout_window_t *wnd = sys->displays[i]->cfg->window;<br> +<br> +        vout_display_Delete(sys->displays[i]);<br> +        vout_window_Disable(wnd);<br> +        vout_window_Delete(wnd);<br> +    }<br> +<br> +    module_unneed(&sys->splitter, sys->splitter.p_module);<br> +    video_format_Clean(&sys->splitter.fmt);<br> +    vlc_object_release(&sys->splitter);<br> +}<br> +<br> +static void vlc_vidsplit_window_Resized(vout_window_t *wnd,<br> +                                        unsigned width, unsigned height)<br> +{<br> +    (void) wnd; (void) width; (void) height;<br> +}<br> +<br> +static const struct vout_window_callbacks vlc_vidsplit_window_cbs =<br> +{<br> +    .resized = vlc_vidsplit_window_Resized,<br> +};<br> +<br> +static vout_window_t *video_splitter_CreateWindow(vlc_object_t *obj,<br> +    const vout_display_cfg_t *restrict vdcfg,<br> +    const video_format_t *restrict source)<br> +{<br> +    vout_window_cfg_t cfg = {<br> +        .is_decorated = true,<br> +    };<br> +    vout_window_owner_t owner = {<br> +        .cbs = &vlc_vidsplit_window_cbs,<br> +    };<br> +<br> +    vout_display_GetDefaultDisplaySize(&cfg.width, &cfg.height, source,<br> +                                       vdcfg);<br> +<br> +    vout_window_t *window = vout_window_New(obj, NULL, &owner);<br> +    if (window != NULL) {<br> +        if (vout_window_Enable(window, &cfg)) {<br> +            vout_window_Delete(window);<br> +            window = NULL;<br> +        }<br> +    }<br> +    return window;<br> +}<br> +<br> +static vout_display_t *vlc_vidsplit_CreateDisplay(vlc_object_t *obj,<br> +    const video_format_t *restrict source,<br> +    const vout_display_cfg_t *restrict cfg,<br> +    const char *name)<br> +{<br> +    vout_display_owner_t owner = {<br> +        .event = vlc_vidsplit_display_Event,<br> +    };<br> +    return vout_display_New(obj, source, cfg, name, &owner);<br> +}<br> +<br> +static int vlc_vidsplit_Open(vout_display_t *vd,<br> +                             const vout_display_cfg_t *cfg,<br> +                             video_format_t *fmtp, vlc_video_context *ctx)<br> +{<br> +    vlc_object_t *obj = VLC_OBJECT(vd);<br> +<br> +    if (vout_display_cfg_IsWindowed(cfg))<br> +        return VLC_EGENERIC;<br> +<br> +    char *name = var_InheritString(obj, "video-splitter");<br> +    if (name == NULL)<br> +        return VLC_EGENERIC;<br> +<br> +    vout_display_sys_t *sys = vlc_object_create(obj, sizeof (*sys));<br> +    if (unlikely(sys == NULL)) {<br> +        free(name);<br> +        return VLC_ENOMEM;<br> +    }<br> +    vd->sys = sys;<br> +<br> +    video_splitter_t *splitter = &sys->splitter;<br> +<br> +    video_format_Copy(&splitter->fmt, &vd->source);<br> +<br> +    splitter->p_module = module_need(splitter, "video splitter", name, true);<br> +    free(name);<br> +    if (splitter->p_module == NULL) {<br> +        video_format_Clean(&splitter->fmt);<br> +        vlc_object_release(splitter);<br> +        return VLC_EGENERIC;<br> +    }<br> +<br> +    sys->pictures = vlc_obj_malloc(obj, splitter->i_output<br> +                                        * sizeof (*sys->pictures));<br> +    sys->displays = vlc_obj_malloc(obj, splitter->i_output<br> +                                        * sizeof (*sys->displays));<br> +    if (unlikely(sys->pictures == NULL || sys->displays == NULL)) {<br> +        splitter->i_output = 0;<br> +        vlc_vidsplit_Close(vd);<br> +        return VLC_ENOMEM;<br> +    }<br> +<br> +    for (int i = 0; i < splitter->i_output; i++) {<br> +        const video_splitter_output_t *output = &splitter->p_output[i];<br> +        vout_display_cfg_t vdcfg = {<br> +            .display = { 0, 0, { 1, 1 } },<br> +            .align = { 0, 0 } /* TODO */,<br> +            .is_display_filled = true,<br> +            .zoom = { 1, 1 },<br> +        };<br> +        const char *modname = output->psz_module;<br> +<br> +        vdcfg.window = video_splitter_CreateWindow(obj, &vdcfg, &output->fmt);<br> +        if (vdcfg.window == NULL) {<br> +            splitter->i_output = i;<br> +            vlc_vidsplit_Close(vd);<br> +            return VLC_EGENERIC;<br> +        }<br> +<br> +        sys->displays[i] = vlc_vidsplit_CreateDisplay(obj, &output->fmt,<br> +                                                      &vdcfg, modname);<br> +        if (sys->displays[i] == NULL) {<br> +            vout_window_Disable(vdcfg.window);<br> +            vout_window_Delete(vdcfg.window);<br> +            splitter->i_output = i;<br> +            vlc_vidsplit_Close(vd);<br> +            return VLC_EGENERIC;<br> +        }<br> +    }<br> +<br> +    vd->prepare = vlc_vidsplit_Prepare;<br> +    vd->display = vlc_vidsplit_Display;<br> +    vd->control = vlc_vidsplit_Control;<br> +    (void) cfg; (void) fmtp; (void) ctx;<br> +    return VLC_SUCCESS;<br> +}<br> +<br> +vlc_module_begin()<br> +    set_shortname(N_("Splitter"))<br> +    set_description(N_("Video splitter display plugin"))<br> +    set_category(CAT_VIDEO)<br> +    set_subcategory(SUBCAT_VIDEO_VOUT)<br> +    set_capability("vout display", 0)<br> +    set_callbacks(vlc_vidsplit_Open, vlc_vidsplit_Close)<br> +    add_module("video-splitter", "video splitter", NULL,<br> +               N_("Video splitter module"), N_("Video splitter module"))<br> +vlc_module_end()<br> diff --git a/src/libvlc-module.c b/src/libvlc-module.c<br> index a4fdd60c50..29cb8df8cb 100644<br> --- a/src/libvlc-module.c<br> +++ b/src/libvlc-module.c<br> @@ -1690,10 +1690,6 @@ vlc_module_begin ()<br>       add_module_list("video-filter", "video filter", NULL,<br>                       VIDEO_FILTER_TEXT, VIDEO_FILTER_LONGTEXT)<br>   <br> -    set_subcategory( SUBCAT_VIDEO_SPLITTER )<br> -    add_module_list("video-splitter", "video splitter", NULL,<br> -                    VIDEO_SPLITTER_TEXT, VIDEO_SPLITTER_LONGTEXT)<br> -    add_obsolete_string( "vout-filter" ) /* since 2.0.0 */<br>   #if 0<br>       add_string( "pixel-ratio", "1", PIXEL_RATIO_TEXT, PIXEL_RATIO_TEXT )<br>   #endif<hr> vlc-commits mailing list<br> vlc-commits@videolan.org<br> <a href="https://mailman.videolan.org/listinfo/vlc-commits">https://mailman.videolan.org/listinfo/vlc-commits</a><br></blockquote><hr>vlc-devel mailing list<br>To unsubscribe or modify your subscription options:<br><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a></pre></blockquote></div><br>-- <br>Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.</body></html>