/* To not make gst_gl_display_thread_do_upload
* and gst_gl_display_thread_do_download too big */
static void gst_gl_display_thread_do_upload_make (GstGLDisplay *display);
-static void gst_gl_display_thread_do_upload_fill (GstGLDisplay *display, GstVideoFormat* pVideo_format);
-static void gst_gl_display_thread_do_upload_draw (GstGLDisplay *display, GstVideoFormat video_format);
-static void gst_gl_display_thread_do_download_draw (GstGLDisplay* display);
+static void gst_gl_display_thread_do_upload_fill (GstGLDisplay *display);
+static void gst_gl_display_thread_do_upload_draw (GstGLDisplay *display);
+static void gst_gl_display_thread_do_download_draw (GstGLDisplay *display);
//------------------------------------------------------------
//upload
display->upload_fbo = 0;
display->upload_depth_buffer = 0;
- display->upload_texture = 0;
+ display->upload_outtex = 0;
display->upload_intex = 0;
display->upload_intex_u = 0;
display->upload_intex_v = 0;
/* Called by the idle function */
static void
-gst_gl_display_thread_do_upload (GstGLDisplay * display)
+gst_gl_display_thread_do_upload (GstGLDisplay *display)
{
- GstVideoFormat video_format = 0;
-
glutSetWindow (display->glutWinId);
gst_gl_display_thread_do_upload_make (display);
- gst_gl_display_thread_do_upload_fill (display, &video_format);
- gst_gl_display_thread_do_upload_draw (display, video_format);
+ gst_gl_display_thread_do_upload_fill (display);
+ gst_gl_display_thread_do_upload_draw (display);
g_cond_signal (display->cond_do_upload);
}
/* Called by the first gl element of a video/x-raw-gl flow */
gboolean
-gst_gl_display_do_upload (GstGLDisplay* display, GLuint texture,
+gst_gl_display_do_upload (GstGLDisplay *display, GLuint texture,
gint data_width, gint data_height,
gpointer data)
{
isAlive = display->isAlive;
if (isAlive)
{
- display->upload_texture = texture;
+ display->upload_outtex = texture;
display->upload_data_with = data_width;
display->upload_data_height = data_height;
display->upload_data = data;
/* called by gst_gl_display_thread_do_upload (in the gl thread) */
void
-gst_gl_display_thread_do_upload_fill (GstGLDisplay* display, GstVideoFormat* pVideo_format)
+gst_gl_display_thread_do_upload_fill (GstGLDisplay *display)
{
gint width = display->upload_data_with;
gint height = display->upload_data_height;
- GstVideoFormat video_format = display->upload_video_format;
gpointer data = display->upload_data;
- *pVideo_format = video_format;
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, display->upload_intex);
- switch (video_format) {
+ switch (display->upload_video_format) {
case GST_VIDEO_FORMAT_RGBx:
glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height,
GL_RGBA, GL_UNSIGNED_BYTE, data);
case GST_GL_DISPLAY_CONVERSION_MESA:
glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height,
GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, data);
- *pVideo_format = GST_VIDEO_FORMAT_RGBx;
+ display->upload_video_format = GST_VIDEO_FORMAT_RGBx;
break;
default:
g_assert_not_reached ();
case GST_GL_DISPLAY_CONVERSION_MESA:
glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height,
GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_MESA, data);
- *pVideo_format = GST_VIDEO_FORMAT_RGBx;
+ display->upload_video_format = GST_VIDEO_FORMAT_RGBx;
break;
default:
g_assert_not_reached ();
gint offsetU = 0;
gint offsetV = 0;
- switch (video_format)
+ switch (display->upload_video_format)
{
case GST_VIDEO_FORMAT_I420:
offsetU = 1;
GST_ROUND_UP_2 (width) / 2, GST_ROUND_UP_2 (height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE,
(guint8 *) data +
- gst_video_format_get_component_offset (video_format, offsetU, width, height));
+ gst_video_format_get_component_offset (display->upload_video_format, offsetU, width, height));
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, display->upload_intex_v);
glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
GST_ROUND_UP_2 (width) / 2, GST_ROUND_UP_2 (height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE,
(guint8 *) data +
- gst_video_format_get_component_offset (video_format, offsetV, width, height));
+ gst_video_format_get_component_offset (display->upload_video_format, offsetV, width, height));
}
break;
default:
/* called by gst_gl_display_thread_do_upload (in the gl thread) */
void
-gst_gl_display_thread_do_upload_draw (GstGLDisplay* display, GstVideoFormat video_format)
+gst_gl_display_thread_do_upload_draw (GstGLDisplay *display)
{
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, display->upload_fbo);
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB, display->upload_texture);
+ glBindTexture(GL_TEXTURE_RECTANGLE_ARB, display->upload_outtex);
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
display->upload_width, display->upload_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//attach the texture to the FBO to renderer to
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_RECTANGLE_ARB, display->upload_texture, 0);
+ GL_TEXTURE_RECTANGLE_ARB, display->upload_outtex, 0);
glPushAttrib(GL_VIEWPORT_BIT);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- switch (video_format)
+ switch (display->upload_video_format)
{
case GST_VIDEO_FORMAT_RGBx:
case GST_VIDEO_FORMAT_BGRx:
{
GstGLShader* shader_upload_YUY2_UYVY = NULL;
- switch (video_format)
+ switch (display->upload_video_format)
{
case GST_VIDEO_FORMAT_YUY2:
shader_upload_YUY2_UYVY = display->shader_upload_YUY2;
/* called by gst_gl_display_thread_do_download (in the gl thread) */
void
-gst_gl_display_thread_do_download_draw (GstGLDisplay* display)
+gst_gl_display_thread_do_download_draw (GstGLDisplay *display)
{
gint width = display->download_width;
gint height = display->download_height;