X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fvideo_output%2Fwindow.c;h=d47d4f438913c08f03c9c77f45b059cbb80c4a8a;hb=cef81b5768286a88f9d77cf4bad227606c4cdbba;hp=bcb08bcc87026c0f1c6e5d6edc60f7e44e8d6dba;hpb=83306b533fd201310d53e5d41b4146ead42dec48;p=vlc diff --git a/src/video_output/window.c b/src/video_output/window.c index bcb08bcc87..d47d4f4389 100644 --- a/src/video_output/window.c +++ b/src/video_output/window.c @@ -6,19 +6,19 @@ * * Authors: Laurent Aimar * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** @@ -42,24 +42,29 @@ typedef struct vlc_inhibit_t *inhibit; } window_t; +static int vout_window_start(void *func, va_list ap) +{ + int (*activate)(vout_window_t *, const vout_window_cfg_t *) = func; + vout_window_t *wnd = va_arg(ap, vout_window_t *); + const vout_window_cfg_t *cfg = va_arg(ap, const vout_window_cfg_t *); + + return activate(wnd, cfg); +} + vout_window_t *vout_window_New(vlc_object_t *obj, const char *module, const vout_window_cfg_t *cfg) { - static char const name[] = "window"; - window_t *w = vlc_custom_create(obj, sizeof(*w), VLC_OBJECT_GENERIC, name); + window_t *w = vlc_custom_create(obj, sizeof(*w), "window"); vout_window_t *window = &w->wnd; - window->cfg = cfg; memset(&window->handle, 0, sizeof(window->handle)); window->control = NULL; window->sys = NULL; - vlc_object_attach(window, obj); - const char *type; switch (cfg->type) { -#ifdef WIN32 +#if defined(WIN32) || defined(__OS2__) case VOUT_WINDOW_TYPE_HWND: type = "vout window hwnd"; window->handle.hwnd = NULL; @@ -80,7 +85,8 @@ vout_window_t *vout_window_New(vlc_object_t *obj, assert(0); } - w->module = module_need(window, type, module, module && *module != '\0'); + w->module = vlc_module_load(window, type, module, module && *module, + vout_window_start, window, cfg); if (!w->module) { vlc_object_release(window); return NULL; @@ -100,6 +106,14 @@ vout_window_t *vout_window_New(vlc_object_t *obj, return window; } +static void vout_window_stop(void *func, va_list ap) +{ + int (*deactivate)(vout_window_t *) = func; + vout_window_t *wnd = va_arg(ap, vout_window_t *); + + deactivate(wnd); +} + void vout_window_Delete(vout_window_t *window) { if (!window) @@ -112,8 +126,7 @@ void vout_window_Delete(vout_window_t *window) vlc_inhibit_Destroy (w->inhibit); } - module_unneed(window, w->module); - + vlc_module_unload(w->module, vout_window_stop, window); vlc_object_release(window); }