static void gst_egl_image_buffer_pool_finalize (GObject * object) { GstEGLImageBufferPool *pool = GST_EGL_IMAGE_BUFFER_POOL (object); if (pool->allocator) gst_object_unref (pool->allocator); pool->allocator = NULL; if (pool->display) gst_egl_display_unref (pool->display); pool->display = NULL; G_OBJECT_CLASS (gst_egl_image_buffer_pool_parent_class)->finalize (object); }
static void close_ogl (void) { DISPMANX_UPDATE_HANDLE_T dispman_update; /* clear screen */ glClear (GL_COLOR_BUFFER_BIT); eglSwapBuffers (state->display, state->surface); /* Release OpenGL resources */ eglMakeCurrent (state->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface (state->display, state->surface); eglDestroyContext (state->display, state->context); gst_egl_display_unref (state->gst_display); dispman_update = vc_dispmanx_update_start (0); vc_dispmanx_element_remove (dispman_update, state->dispman_element); vc_dispmanx_update_submit_sync (dispman_update); vc_dispmanx_display_close (state->dispman_display); }
static void gst_egl_image_allocator_free_vfunc (GstAllocator * allocator, GstMemory * mem) { GstEGLImageMemory *emem = (GstEGLImageMemory *) mem; EGLDisplay display; g_return_if_fail (gst_is_egl_image_memory (mem)); /* Shared memory should not destroy all the data */ if (!mem->parent) { display = gst_egl_display_get (emem->display); eglDestroyImageKHR (display, emem->image); if (emem->user_data_destroy) emem->user_data_destroy (emem->user_data); gst_egl_display_unref (emem->display); } g_slice_free (GstEGLImageMemory, emem); }