mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
eglglessink: Also unref current caps after usage
This commit is contained in:
parent
c2de59b19c
commit
aa463f0274
2 changed files with 38 additions and 29 deletions
|
@ -1084,6 +1084,11 @@ gst_eglglessink_stop (GstBaseSink * sink)
|
|||
eglglessink->have_window = FALSE;
|
||||
}
|
||||
|
||||
if (eglglessink->current_caps) {
|
||||
gst_caps_unref (eglglessink->current_caps);
|
||||
eglglessink->current_caps = NULL;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -2112,35 +2117,40 @@ gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps)
|
|||
if (gst_caps_can_intersect (caps, eglglessink->current_caps)) {
|
||||
GST_INFO_OBJECT (eglglessink, "Caps are compatible anyway");
|
||||
goto SUCCEED;
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring");
|
||||
if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) {
|
||||
glDeleteBuffers (1, &eglglessink->vdata);
|
||||
glDeleteBuffers (1, &eglglessink->tdata);
|
||||
glDeleteBuffers (1, &eglglessink->idata);
|
||||
eglglessink->have_vbo = FALSE;
|
||||
|
||||
glDeleteShader (eglglessink->fragshader);
|
||||
glDeleteShader (eglglessink->vertshader);
|
||||
|
||||
glDeleteTextures (eglglessink->n_textures, eglglessink->texture);
|
||||
eglglessink->have_texture = FALSE;
|
||||
eglglessink->n_textures = 0;
|
||||
|
||||
glDeleteProgram (eglglessink->program);
|
||||
}
|
||||
|
||||
if (eglglessink->surface) {
|
||||
eglDestroySurface (eglglessink->display, eglglessink->surface);
|
||||
eglglessink->surface = NULL;
|
||||
eglglessink->have_surface = FALSE;
|
||||
}
|
||||
|
||||
if (eglglessink->context) {
|
||||
eglDestroyContext (eglglessink->display, eglglessink->context);
|
||||
eglglessink->context = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring");
|
||||
if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) {
|
||||
glDeleteBuffers (1, &eglglessink->vdata);
|
||||
glDeleteBuffers (1, &eglglessink->tdata);
|
||||
glDeleteBuffers (1, &eglglessink->idata);
|
||||
eglglessink->have_vbo = FALSE;
|
||||
|
||||
glDeleteShader (eglglessink->fragshader);
|
||||
glDeleteShader (eglglessink->vertshader);
|
||||
|
||||
glDeleteTextures (eglglessink->n_textures, eglglessink->texture);
|
||||
eglglessink->have_texture = FALSE;
|
||||
eglglessink->n_textures = 0;
|
||||
|
||||
glDeleteProgram (eglglessink->program);
|
||||
}
|
||||
|
||||
if (eglglessink->surface) {
|
||||
eglDestroySurface (eglglessink->display, eglglessink->surface);
|
||||
eglglessink->surface = NULL;
|
||||
eglglessink->have_surface = FALSE;
|
||||
}
|
||||
|
||||
if (eglglessink->context) {
|
||||
eglDestroyContext (eglglessink->display, eglglessink->context);
|
||||
eglglessink->context = NULL;
|
||||
}
|
||||
|
||||
g_mutex_lock (eglglessink->flow_lock);
|
||||
gst_caps_unref (eglglessink->current_caps);
|
||||
eglglessink->current_caps = NULL;
|
||||
g_mutex_unlock (eglglessink->flow_lock);
|
||||
}
|
||||
|
||||
if (!gst_eglglessink_choose_config (eglglessink)) {
|
||||
|
|
|
@ -125,7 +125,6 @@ struct _GstEglGlesSink
|
|||
GstVideoSink videosink;
|
||||
GstVideoFormat format;
|
||||
GstCaps *current_caps;
|
||||
GstPad *sink;
|
||||
|
||||
GstVideoRectangle display_region;
|
||||
GList *supported_fmts;
|
||||
|
|
Loading…
Reference in a new issue