static void vlc_vidsplit_Close(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; int n = sys->splitter.i_output; for (int i = 0; i < n; i++) { struct vlc_vidsplit_part *part = &sys->parts[i]; vout_display_t *display; vlc_sem_wait(&part->lock); display = part->display; part->display = NULL; vlc_sem_post(&part->lock); if (display != NULL) vout_display_Delete(display); vout_window_Disable(part->window); vout_window_Delete(part->window); vlc_sem_destroy(&part->lock); } module_unneed(&sys->splitter, sys->splitter.p_module); video_format_Clean(&sys->splitter.fmt); vlc_mutex_destroy(&sys->lock); vlc_object_release(&sys->splitter); }
/** * Destroys a video window. * \note The window must be detached. */ void vout_display_window_Delete(vout_window_t *window) { vout_display_window_t *state = window->owner.sys; vout_window_Delete(window); assert(state->vd == NULL); vlc_mutex_destroy(&state->lock); free(state); }