/** * Creates a video window, initially without any attached display. */ vout_window_t *vout_display_window_New(vout_thread_t *vout, const vout_window_cfg_t *cfg) { vout_display_window_t *state = malloc(sizeof (*state)); if (state == NULL) return NULL; state->vd = NULL; state->width = cfg->width; state->height = cfg->height; vlc_mutex_init(&state->lock); vout_window_owner_t owner = { .sys = state, .resized = vout_display_window_ResizeNotify, .closed = vout_display_window_CloseNotify, }; vout_window_t *window; window = vout_window_New((vlc_object_t *)vout, "$window", cfg, &owner); if (window == NULL) { vlc_mutex_destroy(&state->lock); free(state); } return window; }
static vout_window_t *video_splitter_CreateWindow(vlc_object_t *obj, const vout_display_cfg_t *restrict vdcfg, const video_format_t *restrict source, void *sys) { vout_window_cfg_t cfg = { .is_decorated = true, }; vout_window_owner_t owner = { .cbs = &vlc_vidsplit_window_cbs, .sys = sys, }; vout_display_GetDefaultDisplaySize(&cfg.width, &cfg.height, source, vdcfg); vout_window_t *window = vout_window_New(obj, NULL, &owner); if (window != NULL) { if (vout_window_Enable(window, &cfg)) { vout_window_Delete(window); window = NULL; } } return window; } static vout_display_t *vlc_vidsplit_CreateDisplay(vlc_object_t *obj, const video_format_t *restrict source, const vout_display_cfg_t *restrict cfg, const char *name) { vout_display_owner_t owner = {