static void _do_download (GstGLDisplay * display, GstGLDownload * download);
static void _init_download (GstGLDisplay * display, GstGLDownload * download);
-static void _init_download_shader (GstGLDisplay * display,
+static gboolean _init_download_shader (GstGLDisplay * display,
GstGLDownload * download);
static gboolean _gst_gl_download_perform_with_data_unlocked (GstGLDownload *
download, GLuint texture_id, gpointer data[GST_VIDEO_MAX_PLANES]);
void (*do_rgb) (GstGLDisplay * display, GstGLDownload * download);
void (*do_yuv) (GstGLDisplay * display, GstGLDownload * download);
+
+ gboolean result;
};
GST_DEBUG_CATEGORY_STATIC (gst_gl_download_debug);
guint out_width, guint out_height)
{
GstVideoInfo info;
+ gboolean ret;
g_return_val_if_fail (download != NULL, FALSE);
g_return_val_if_fail (v_format != GST_VIDEO_FORMAT_UNKNOWN, FALSE);
if (download->initted) {
g_mutex_unlock (&download->lock);
return FALSE;
- } else {
- download->initted = TRUE;
}
gst_video_info_set_format (&info, v_format, out_width, out_height);
gst_gl_display_thread_add (download->display,
(GstGLDisplayThreadFunc) _init_download, download);
+ ret = download->initted = download->priv->result;
+
g_mutex_unlock (&download->lock);
- return TRUE;
+ return ret;
}
/**
gst_gl_display_thread_add (download->display,
(GstGLDisplayThreadFunc) _do_download, download);
- return TRUE;
+ return download->priv->result;
}
static void
*/
gst_gl_display_set_error (display,
"Context, EXT_framebuffer_object supported: no");
- return;
+ goto error;
}
GST_INFO ("Context, EXT_framebuffer_object supported: yes");
}
no_convert:
- _init_download_shader (display, download);
+ download->priv->result = _init_download_shader (display, download);
+ return;
+
+error:
+ {
+ download->priv->result = FALSE;
+ return;
+ }
}
static gboolean
return TRUE;
}
-static void
+static gboolean
_init_download_shader (GstGLDisplay * display, GstGLDownload * download)
{
GstGLFuncs *gl;
case GST_VIDEO_FORMAT_ABGR:
case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR:
- return;
+ return TRUE;
break;
default:
break;
/* colorspace conversion is not possible */
gst_gl_display_set_error (display,
"Context, ARB_fragment_shader supported: no");
- return;
+ return FALSE;;
}
switch (v_format) {
}
#else
g_assert_not_reached ();
+ return FALSE;
break;
#endif
default:
gst_gl_display_set_error (display,
"Unsupported download video format %d", v_format);
g_assert_not_reached ();
+ return FALSE;
break;
}
+
+ return TRUE;
}
/* Called in the gl thread */
g_assert_not_reached ();
break;
}
+
+ download->priv->result = TRUE;
}
#if GST_GL_HAVE_OPENGL