[010/906] don't mix tabs and spaces

This commit is contained in:
Thomas Vander Stichele 2004-03-15 19:32:26 +00:00 committed by Matthew Waters
parent cb6634af4f
commit 0a52f9f6c3
6 changed files with 111 additions and 109 deletions

View file

@ -55,7 +55,7 @@ typedef struct _GstNvImage GstNvImage;
struct _GstNvImage struct _GstNvImage
{ {
GstImageData data; GstImageData data;
int slot; // < AGP_BUFSLOTS: allocated from AGP mem, otherwise from CPU mem int slot; // < AGP_BUFSLOTS: allocated from AGP mem, otherwise from CPU mem
GstGLImageConnection *conn; GstGLImageConnection *conn;
}; };
@ -154,10 +154,10 @@ gst_gl_nvimage_get_caps (GstImageInfo * info)
} }
caps = gst_caps_append (caps, GST_CAPS_NEW ("nvimage_caps", caps = gst_caps_append (caps, GST_CAPS_NEW ("nvimage_caps",
"video/x-raw-yuv", "video/x-raw-yuv",
"format", GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y', 'V', '1', '2')), "format", GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y', 'V', '1', '2')),
"width", GST_PROPS_INT_RANGE (0, 1024), "width", GST_PROPS_INT_RANGE (0, 1024),
"height", GST_PROPS_INT_RANGE (0, 1024)) "height", GST_PROPS_INT_RANGE (0, 1024))
); );
g_warning ("nvimage returns caps !\n"); g_warning ("nvimage returns caps !\n");
return caps; return caps;
@ -190,7 +190,7 @@ gst_gl_nvimage_set_caps (GstImageInfo * info, GstCaps * caps)
GST_DEBUG ("GL_NVImage: Format is invalid !\n"); GST_DEBUG ("GL_NVImage: Format is invalid !\n");
return NULL; return NULL;
} }
if (0) //conn->port == (XvPortID) -1) if (0) //conn->port == (XvPortID) -1)
{ {
/* this happens if the plugin can't handle the caps, so no warning */ /* this happens if the plugin can't handle the caps, so no warning */
g_free (conn); g_free (conn);
@ -266,7 +266,7 @@ gst_gl_nvimage_put_image (GstImageInfo * info, GstImageData * image)
if (xinfo->info.demo) { if (xinfo->info.demo) {
//g_print("Putting image, context is %p\n", glXGetCurrentContext()); //g_print("Putting image, context is %p\n", glXGetCurrentContext());
glTranslatef (0.0, 0.0, -5.0); // make it avoid the clipping plane, zoom 2.0 instead glTranslatef (0.0, 0.0, -5.0); // make it avoid the clipping plane, zoom 2.0 instead
glRotatef (180.0 * sin (xinfo->rotX), 1, 0, 0); glRotatef (180.0 * sin (xinfo->rotX), 1, 0, 0);
glRotatef (180.0 * cos (xinfo->rotY), 0, 1, 0); glRotatef (180.0 * cos (xinfo->rotY), 0, 1, 0);
@ -348,11 +348,11 @@ gst_gl_nvimage_put_image (GstImageInfo * info, GstImageData * image)
printf ("Recording frame #%d\n", framenr); printf ("Recording frame #%d\n", framenr);
glReadPixels (0, 0, img_width, img_height, GL_RGB, GL_UNSIGNED_BYTE, glReadPixels (0, 0, img_width, img_height, GL_RGB, GL_UNSIGNED_BYTE,
cap_image_data); cap_image_data);
// invert the pixels // invert the pixels
for (i = 0; i < img_height; i++) for (i = 0; i < img_height; i++)
memcpy (cap_image_data2 + i * img_width * 3, memcpy (cap_image_data2 + i * img_width * 3,
cap_image_data + (img_height - 1 - i) * img_width * 3, img_width * 3); cap_image_data + (img_height - 1 - i) * img_width * 3, img_width * 3);
sprintf (capfilename, "cap%04d.ppm", framenr); sprintf (capfilename, "cap%04d.ppm", framenr);
FILE *outfile = fopen (capfilename, "wb"); FILE *outfile = fopen (capfilename, "wb");
@ -363,7 +363,7 @@ gst_gl_nvimage_put_image (GstImageInfo * info, GstImageData * image)
fprintf (outfile, "%d %d\n", img_width, img_height); fprintf (outfile, "%d %d\n", img_width, img_height);
fprintf (outfile, "255\n"); fprintf (outfile, "255\n");
fwrite (cap_image_data2, sizeof (char), img_width * img_height * 3, fwrite (cap_image_data2, sizeof (char), img_width * img_height * 3,
outfile); outfile);
fclose (outfile); fclose (outfile);
} }
framenr++; framenr++;

View file

@ -55,7 +55,7 @@ typedef struct _GstNvImage GstNvImage;
struct _GstNvImage struct _GstNvImage
{ {
GstImageData data; GstImageData data;
int slot; // < AGP_BUFSLOTS: allocated from AGP mem, otherwise from CPU mem int slot; // < AGP_BUFSLOTS: allocated from AGP mem, otherwise from CPU mem
GstGLImageConnection *conn; GstGLImageConnection *conn;
}; };
@ -143,10 +143,10 @@ gst_gl_nvimage_get_caps (GstImageInfo * info)
} }
caps = gst_caps_append (caps, GST_CAPS_NEW ("xvimage_caps", caps = gst_caps_append (caps, GST_CAPS_NEW ("xvimage_caps",
"video/raw", "video/raw",
"format", GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y', 'C', '1', '2')), "format", GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y', 'C', '1', '2')),
"width", GST_PROPS_INT_RANGE (0, 1024), "width", GST_PROPS_INT_RANGE (0, 1024),
"height", GST_PROPS_INT_RANGE (0, 1024)) "height", GST_PROPS_INT_RANGE (0, 1024))
); );
return caps; return caps;
} }
@ -178,7 +178,7 @@ gst_gl_nvimage_set_caps (GstImageInfo * info, GstCaps * caps)
GST_DEBUG (GST_CAT_PLUGIN_INFO, "GL_NVImage: Format is invalid !\n"); GST_DEBUG (GST_CAT_PLUGIN_INFO, "GL_NVImage: Format is invalid !\n");
return NULL; return NULL;
} }
if (0) //conn->port == (XvPortID) -1) if (0) //conn->port == (XvPortID) -1)
{ {
/* this happens if the plugin can't handle the caps, so no warning */ /* this happens if the plugin can't handle the caps, so no warning */
g_free (conn); g_free (conn);
@ -216,15 +216,15 @@ gst_gl_nvimage_get_image (GstImageInfo * info, GstImageConnection * conn)
image->data.size = nvconn->w * nvconn->h * 3 / 2; image->data.size = nvconn->w * nvconn->h * 3 / 2;
if (slot < AGP_BUFSLOTS) // found an AGP buffer slot if (slot < AGP_BUFSLOTS) // found an AGP buffer slot
{ {
image->data.data = nvconn->m_memory + slot * YUVTEX_SIZE; image->data.data = nvconn->m_memory + slot * YUVTEX_SIZE;
image->slot = slot; // store for freeing image->slot = slot; // store for freeing
nvconn->m_bufslots[slot] = 1; // it is now taken nvconn->m_bufslots[slot] = 1; // it is now taken
} else { } else {
g_warning ("Allocating from main memory !"); g_warning ("Allocating from main memory !");
image->data.data = g_malloc (image->data.size); image->data.data = g_malloc (image->data.size);
image->slot = AGP_BUFSLOTS; // no AGP slot image->slot = AGP_BUFSLOTS; // no AGP slot
} }
image->conn = nvconn; image->conn = nvconn;
@ -325,13 +325,13 @@ gst_gl_nvimage_open_conn (GstImageConnection * conn, GstImageInfo * info)
if (!xconn->m_memory) { if (!xconn->m_memory) {
printf printf
("Unable to acquire graphics card mem... will acquire in normal memory.\n"); ("Unable to acquire graphics card mem... will acquire in normal memory.\n");
for (slot = 0; slot < AGP_BUFSLOTS; slot++) for (slot = 0; slot < AGP_BUFSLOTS; slot++)
xconn->m_bufslots[slot] = 1; xconn->m_bufslots[slot] = 1;
} else { } else {
// maybe this fast writable memory, awfully slow to read from, though // maybe this fast writable memory, awfully slow to read from, though
glPixelDataRangeNV (GL_WRITE_PIXEL_DATA_RANGE_NV, glPixelDataRangeNV (GL_WRITE_PIXEL_DATA_RANGE_NV,
AGP_BUFSLOTS * YUVTEX_SIZE, xconn->m_memory); AGP_BUFSLOTS * YUVTEX_SIZE, xconn->m_memory);
glEnableClientState (GL_WRITE_PIXEL_DATA_RANGE_NV); glEnableClientState (GL_WRITE_PIXEL_DATA_RANGE_NV);
for (slot = 0; slot < AGP_BUFSLOTS; slot++) for (slot = 0; slot < AGP_BUFSLOTS; slot++)

View file

@ -32,8 +32,8 @@ typedef struct _GstGLImageConnection GstGLImageConnection;
struct _GstGLImageConnection struct _GstGLImageConnection
{ {
GstImageConnection conn; GstImageConnection conn;
Display *dpy; // the Xlib drawing context Display *dpy; // the Xlib drawing context
GLXContext ctx; // The GLX drawing context GLXContext ctx; // The GLX drawing context
gint w, h; gint w, h;
gint bpp; gint bpp;
@ -131,15 +131,15 @@ gst_gl_rgbimage_get_caps (GstImageInfo * info)
100, 100, xpad, (attrib.depth + 7) / 8 * 100); 100, 100, xpad, (attrib.depth + 7) / 8 * 100);
if (ximage != NULL) { if (ximage != NULL) {
caps = caps =
GST_CAPS_NEW ("forcing Video RGB", "video/x-raw-rgb", "format", GST_CAPS_NEW ("forcing Video RGB", "video/x-raw-rgb", "format",
GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")), "depth", GST_PROPS_INT (24), GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")), "depth", GST_PROPS_INT (24),
"bpp", GST_PROPS_INT (24), "red_mask", GST_PROPS_INT (0xff), "bpp", GST_PROPS_INT (24), "red_mask", GST_PROPS_INT (0xff),
"green_mask", GST_PROPS_INT (0xff00), "blue_mask", "green_mask", GST_PROPS_INT (0xff00), "blue_mask",
GST_PROPS_INT (0xff0000), "endianness", GST_PROPS_INT (G_BIG_ENDIAN), GST_PROPS_INT (0xff0000), "endianness", GST_PROPS_INT (G_BIG_ENDIAN),
/*= 1234/4321 (INT) <- endianness */ /*= 1234/4321 (INT) <- endianness */
"width", GST_PROPS_INT_RANGE (0, TEX_XSIZE), /* can't have videos larger than TEX_SIZE */ "width", GST_PROPS_INT_RANGE (0, TEX_XSIZE), /* can't have videos larger than TEX_SIZE */
"height", GST_PROPS_INT_RANGE (0, TEX_YSIZE) "height", GST_PROPS_INT_RANGE (0, TEX_YSIZE)
); );
XDestroyImage (ximage); XDestroyImage (ximage);
} }
@ -260,7 +260,7 @@ gst_gl_rgbimage_put_image (GstImageInfo * info, GstImageData * image)
glEnable (GL_TEXTURE_2D); glEnable (GL_TEXTURE_2D);
if (xinfo->info.demo) { if (xinfo->info.demo) {
glTranslatef (0.0, 0.0, -5.0); // make it avoid the clipping plane, zoom 2.0 instead glTranslatef (0.0, 0.0, -5.0); // make it avoid the clipping plane, zoom 2.0 instead
glRotatef (180.0 * sin (xinfo->rotX), 1, 0, 0); glRotatef (180.0 * sin (xinfo->rotX), 1, 0, 0);
glRotatef (180.0 * cos (xinfo->rotY), 0, 1, 0); glRotatef (180.0 * cos (xinfo->rotY), 0, 1, 0);
@ -321,11 +321,11 @@ gst_gl_rgbimage_put_image (GstImageInfo * info, GstImageData * image)
printf ("Recording frame #%d\n", framenr); printf ("Recording frame #%d\n", framenr);
glReadPixels (0, 0, img_width, img_height, GL_RGB, GL_UNSIGNED_BYTE, glReadPixels (0, 0, img_width, img_height, GL_RGB, GL_UNSIGNED_BYTE,
cap_image_data); cap_image_data);
// invert the pixels // invert the pixels
for (i = 0; i < img_height; i++) for (i = 0; i < img_height; i++)
memcpy (cap_image_data2 + i * img_width * 3, memcpy (cap_image_data2 + i * img_width * 3,
cap_image_data + (img_height - 1 - i) * img_width * 3, img_width * 3); cap_image_data + (img_height - 1 - i) * img_width * 3, img_width * 3);
sprintf (capfilename, "cap%04d.ppm", framenr); sprintf (capfilename, "cap%04d.ppm", framenr);
FILE *outfile = fopen (capfilename, "wb"); FILE *outfile = fopen (capfilename, "wb");
@ -336,7 +336,7 @@ gst_gl_rgbimage_put_image (GstImageInfo * info, GstImageData * image)
fprintf (outfile, "%d %d\n", img_width, img_height); fprintf (outfile, "%d %d\n", img_width, img_height);
fprintf (outfile, "255\n"); fprintf (outfile, "255\n");
fwrite (cap_image_data2, sizeof (char), img_width * img_height * 3, fwrite (cap_image_data2, sizeof (char), img_width * img_height * 3,
outfile); outfile);
fclose (outfile); fclose (outfile);
} }
framenr++; framenr++;

View file

@ -56,13 +56,13 @@ GST_PAD_TEMPLATE_FACTORY (gst_glsink_sink_template_factory,
GST_PAD_SINK, GST_PAD_SINK,
GST_PAD_ALWAYS, GST_PAD_ALWAYS,
GST_CAPS_NEW ("glsink_rgbsink", "video/x-raw-rgb", GST_CAPS_NEW ("glsink_rgbsink", "video/x-raw-rgb",
"framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT), "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT),
"width", GST_PROPS_INT_RANGE (0, G_MAXINT), "width", GST_PROPS_INT_RANGE (0, G_MAXINT),
"height", GST_PROPS_INT_RANGE (0, G_MAXINT)), "height", GST_PROPS_INT_RANGE (0, G_MAXINT)),
GST_CAPS_NEW ("glsink_yuvsink", "video/x-raw-yuv", GST_CAPS_NEW ("glsink_yuvsink", "video/x-raw-yuv",
"framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT), "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT),
"width", GST_PROPS_INT_RANGE (0, G_MAXINT), "width", GST_PROPS_INT_RANGE (0, G_MAXINT),
"height", GST_PROPS_INT_RANGE (0, G_MAXINT)) "height", GST_PROPS_INT_RANGE (0, G_MAXINT))
) )
/* glsink signals and args */ /* glsink signals and args */
@ -106,9 +106,9 @@ GST_PAD_TEMPLATE_FACTORY (gst_glsink_sink_template_factory,
guint64 frame_time; guint64 frame_time;
gint width, height; gint width, height;
gboolean muted; gboolean muted;
gint demo; // some kind of fun demo mode to let GL show its 3D capabilities gint demo; // some kind of fun demo mode to let GL show its 3D capabilities
gboolean dumpvideo; // dump the video down to .ppm:s gboolean dumpvideo; // dump the video down to .ppm:s
GstBuffer *last_image; /* not thread safe ? */ GstBuffer *last_image; /* not thread safe ? */
GstClock *clock; GstClock *clock;
@ -189,9 +189,10 @@ GST_PAD_TEMPLATE_FACTORY (gst_glsink_sink_template_factory,
0, 0,
(GInstanceInitFunc) gst_glsink_init, (GInstanceInitFunc) gst_glsink_init,
}; };
videosink_type = videosink_type =
g_type_register_static (GST_TYPE_ELEMENT, "GstGLSink", &videosink_info, g_type_register_static (GST_TYPE_ELEMENT, "GstGLSink", &videosink_info,
0); 0);
} }
return videosink_type; return videosink_type;
} }
@ -218,25 +219,25 @@ gst_glsink_class_init (GstGLSinkClass * klass)
parent_class = g_type_class_ref (GST_TYPE_ELEMENT); parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
g_object_class_install_property (gobject_class, ARG_WIDTH, g_param_spec_int ("width", "Width", "The video width", G_MININT, G_MAXINT, 0, G_PARAM_READABLE)); /* CHECKME */ g_object_class_install_property (gobject_class, ARG_WIDTH, g_param_spec_int ("width", "Width", "The video width", G_MININT, G_MAXINT, 0, G_PARAM_READABLE)); /* CHECKME */
g_object_class_install_property (gobject_class, ARG_HEIGHT, g_param_spec_int ("height", "Height", "The video height", G_MININT, G_MAXINT, 0, G_PARAM_READABLE)); /* CHECKME */ g_object_class_install_property (gobject_class, ARG_HEIGHT, g_param_spec_int ("height", "Height", "The video height", G_MININT, G_MAXINT, 0, G_PARAM_READABLE)); /* CHECKME */
g_object_class_install_property (gobject_class, ARG_FRAMES_DISPLAYED, g_param_spec_int ("frames_displayed", "Frames Displayed", "The number of frames displayed so far", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */ g_object_class_install_property (gobject_class, ARG_FRAMES_DISPLAYED, g_param_spec_int ("frames_displayed", "Frames Displayed", "The number of frames displayed so far", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */
g_object_class_install_property (gobject_class, ARG_FRAME_TIME, g_param_spec_int ("frame_time", "Frame time", "The interval between frames", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */ g_object_class_install_property (gobject_class, ARG_FRAME_TIME, g_param_spec_int ("frame_time", "Frame time", "The interval between frames", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */
g_object_class_install_property (gobject_class, ARG_HOOK, g_object_class_install_property (gobject_class, ARG_HOOK,
g_param_spec_pointer ("hook", "Hook", "The object receiving the output", g_param_spec_pointer ("hook", "Hook", "The object receiving the output",
G_PARAM_WRITABLE)); G_PARAM_WRITABLE));
g_object_class_install_property (gobject_class, ARG_MUTE, g_object_class_install_property (gobject_class, ARG_MUTE,
g_param_spec_boolean ("mute", "Mute", "mute the output ?", FALSE, g_param_spec_boolean ("mute", "Mute", "mute the output ?", FALSE,
G_PARAM_READWRITE)); G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, ARG_REPAINT, g_object_class_install_property (gobject_class, ARG_REPAINT,
g_param_spec_boolean ("repaint", "Repaint", "repaint the current frame", g_param_spec_boolean ("repaint", "Repaint", "repaint the current frame",
FALSE, G_PARAM_WRITABLE)); FALSE, G_PARAM_WRITABLE));
g_object_class_install_property (gobject_class, ARG_DEMO, g_object_class_install_property (gobject_class, ARG_DEMO,
g_param_spec_int ("demo", "Demo", "demo mode (shows 3D capabilities)", 0, g_param_spec_int ("demo", "Demo", "demo mode (shows 3D capabilities)", 0,
1, 0, G_PARAM_READWRITE)); 1, 0, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, ARG_DUMP, g_object_class_install_property (gobject_class, ARG_DUMP,
g_param_spec_boolean ("dump", "Dump", g_param_spec_boolean ("dump", "Dump",
"stores sequence of frames in .ppm files", FALSE, G_PARAM_READWRITE)); "stores sequence of frames in .ppm files", FALSE, G_PARAM_READWRITE));
gobject_class->set_property = gst_glsink_set_property; gobject_class->set_property = gst_glsink_set_property;
gobject_class->get_property = gst_glsink_get_property; gobject_class->get_property = gst_glsink_get_property;
@ -366,7 +367,7 @@ gst_glsink_buffer_free (GstBufferPool * pool, GstBuffer * buffer,
{ {
GstGLSink *sink = GstGLSink *sink =
GST_GLSINK (gst_buffer_pool_get_user_data (GST_BUFFER_BUFFERPOOL GST_GLSINK (gst_buffer_pool_get_user_data (GST_BUFFER_BUFFERPOOL
(buffer))); (buffer)));
gst_glsink_append_cache (sink, gst_glsink_append_cache (sink,
(GstImageData *) GST_BUFFER_POOL_PRIVATE (buffer)); (GstImageData *) GST_BUFFER_POOL_PRIVATE (buffer));
@ -463,8 +464,8 @@ gst_glsink_getcaps (GstPad * pad, GstCaps * caps)
gst_glxwindow_hook_context (sink->hook); gst_glxwindow_hook_context (sink->hook);
while (list) { while (list) {
ret = ret =
gst_caps_append (ret, gst_caps_append (ret,
((GstImagePlugin *) list->data)->get_caps (sink->hook)); ((GstImagePlugin *) list->data)->get_caps (sink->hook));
list = g_list_next (list); list = g_list_next (list);
} }
@ -499,7 +500,7 @@ gst_glsink_chain (GstPad * pad, GstData * _data)
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
default: default:
gst_pad_event_default (pad, event); gst_pad_event_default (pad, event);
} }
return; return;
} }
@ -518,11 +519,11 @@ gst_glsink_chain (GstPad * pad, GstData * _data)
frame_drops++; frame_drops++;
return; return;
} }
frame_drops = 0; // we made it - reset time frame_drops = 0; // we made it - reset time
GstClockReturn ret; GstClockReturn ret;
GstClockID id = GstClockID id =
gst_clock_new_single_shot_id (sink->clock, GST_BUFFER_TIMESTAMP (buf)); gst_clock_new_single_shot_id (sink->clock, GST_BUFFER_TIMESTAMP (buf));
ret = gst_element_clock_wait (GST_ELEMENT (sink), id, NULL); ret = gst_element_clock_wait (GST_ELEMENT (sink), id, NULL);
gst_clock_id_free (id); gst_clock_id_free (id);
@ -552,7 +553,7 @@ gst_glsink_chain (GstPad * pad, GstData * _data)
glClearDepth (1.0f); glClearDepth (1.0f);
glClearColor (0, 0, 0, 0); glClearColor (0, 0, 0, 0);
glEnable (GL_AUTO_NORMAL); // let OpenGL generate the Normals glEnable (GL_AUTO_NORMAL); // let OpenGL generate the Normals
glDisable (GL_BLEND); glDisable (GL_BLEND);
glDisable (GL_CULL_FACE); glDisable (GL_CULL_FACE);
@ -594,19 +595,19 @@ gst_glsink_chain (GstPad * pad, GstData * _data)
sink->hook->dumpvideo = sink->dumpvideo; sink->hook->dumpvideo = sink->dumpvideo;
sink->plugin->put_image (sink->hook, sink->plugin->put_image (sink->hook,
(GstImageData *) GST_BUFFER_POOL_PRIVATE (buf)); (GstImageData *) GST_BUFFER_POOL_PRIVATE (buf));
sink->last_image = buf; sink->last_image = buf;
} else { } else {
buffer = buffer =
gst_buffer_new_from_pool (gst_glsink_get_bufferpool (sink->sinkpad), gst_buffer_new_from_pool (gst_glsink_get_bufferpool (sink->sinkpad),
0, GST_BUFFER_SIZE (buf)); 0, GST_BUFFER_SIZE (buf));
memcpy (GST_BUFFER_DATA (buffer), GST_BUFFER_DATA (buf), memcpy (GST_BUFFER_DATA (buffer), GST_BUFFER_DATA (buf),
GST_BUFFER_SIZE (buf) > GST_BUFFER_SIZE (buf) >
GST_BUFFER_SIZE (buffer) ? GST_BUFFER_SIZE (buffer) : GST_BUFFER_SIZE (buffer) ? GST_BUFFER_SIZE (buffer) :
GST_BUFFER_SIZE (buf)); GST_BUFFER_SIZE (buf));
sink->plugin->put_image (sink->hook, sink->plugin->put_image (sink->hook,
(GstImageData *) GST_BUFFER_POOL_PRIVATE (buffer)); (GstImageData *) GST_BUFFER_POOL_PRIVATE (buffer));
sink->last_image = buffer; sink->last_image = buffer;
gst_buffer_unref (buf); gst_buffer_unref (buf);
@ -640,7 +641,7 @@ gst_glsink_set_property (GObject * object, guint prop_id, const GValue * value,
break; break;
case ARG_HOOK: case ARG_HOOK:
if (sink->hook) { if (sink->hook) {
sink->hook->free_info (sink->hook); sink->hook->free_info (sink->hook);
} }
sink->hook = g_value_get_pointer (value); sink->hook = g_value_get_pointer (value);
break; break;
@ -658,8 +659,8 @@ gst_glsink_set_property (GObject * object, guint prop_id, const GValue * value,
break; break;
case ARG_REPAINT: case ARG_REPAINT:
if (sink->last_image != NULL) { if (sink->last_image != NULL) {
sink->plugin->put_image (sink->hook, sink->plugin->put_image (sink->hook,
(GstImageData *) GST_BUFFER_POOL_PRIVATE (sink->last_image)); (GstImageData *) GST_BUFFER_POOL_PRIVATE (sink->last_image));
} }
break; break;
default: default:
@ -732,10 +733,10 @@ gst_glsink_change_state (GstElement * element)
break; break;
case GST_STATE_PAUSED_TO_READY: case GST_STATE_PAUSED_TO_READY:
if (sink->conn) if (sink->conn)
sink->conn->close_conn (sink->conn, sink->hook); sink->conn->close_conn (sink->conn, sink->hook);
if (sink->last_image) { if (sink->last_image) {
gst_buffer_unref (sink->last_image); gst_buffer_unref (sink->last_image);
sink->last_image = NULL; sink->last_image = NULL;
} }
break; break;
case GST_STATE_READY_TO_NULL: case GST_STATE_READY_TO_NULL:

View file

@ -17,7 +17,7 @@
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glu.h> #include <GL/glu.h>
#include "gstglsink.h" #include "gstglsink.h"
#include <string.h> /* strncmp */ #include <string.h> /* strncmp */
/* attributes for a single buffered visual in RGBA format with at least /* attributes for a single buffered visual in RGBA format with at least
* 4 bits per color and a 16 bit depth buffer */ * 4 bits per color and a 16 bit depth buffer */
@ -41,9 +41,9 @@ static int attrListDbl[] = {
}; };
GLfloat LightAmbient[] = { 0.1, 0.1, 0.1, 1.0 }; /* reddish ambient light */ GLfloat LightAmbient[] = { 0.1, 0.1, 0.1, 1.0 }; /* reddish ambient light */
GLfloat LightDiffuse[] = { 0.6, 0.6, 0.6, 1.0 }; /* bluish diffuse light. */ GLfloat LightDiffuse[] = { 0.6, 0.6, 0.6, 1.0 }; /* bluish diffuse light. */
GLfloat LightPosition[] = { 1.5, 1.5, 1.5, 0.0 }; /* position */ GLfloat LightPosition[] = { 1.5, 1.5, 1.5, 0.0 }; /* position */
void void
@ -202,10 +202,10 @@ gst_glxwindow_new (GstElement * sink)
{ {
/* create a window in window mode */ /* create a window in window mode */
new->attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | new->attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask |
StructureNotifyMask; StructureNotifyMask;
new->win = XCreateWindow (new->dpy, RootWindow (new->dpy, vi->screen), new->win = XCreateWindow (new->dpy, RootWindow (new->dpy, vi->screen),
new->x, new->y, new->width, new->height, 0, vi->depth, InputOutput, new->x, new->y, new->width, new->height, 0, vi->depth, InputOutput,
vi->visual, CWBorderPixel | CWColormap | CWEventMask, &new->attr); vi->visual, CWBorderPixel | CWColormap | CWEventMask, &new->attr);
if (!new->win) { if (!new->win) {
g_warning ("create window failed\n"); g_warning ("create window failed\n");
g_free (new); g_free (new);
@ -215,7 +215,7 @@ gst_glxwindow_new (GstElement * sink)
wmDelete = XInternAtom (new->dpy, "WM_DELETE_WINDOW", True); wmDelete = XInternAtom (new->dpy, "WM_DELETE_WINDOW", True);
XSetWMProtocols (new->dpy, new->win, &wmDelete, 1); XSetWMProtocols (new->dpy, new->win, &wmDelete, 1);
XSetStandardProperties (new->dpy, new->win, title, XSetStandardProperties (new->dpy, new->win, title,
title, None, NULL, 0, NULL); title, None, NULL, 0, NULL);
XMapRaised (new->dpy, new->win); XMapRaised (new->dpy, new->win);
} }
/* connect the glx-context to the window */ /* connect the glx-context to the window */
@ -238,14 +238,14 @@ gst_glxwindow_new (GstElement * sink)
glClearDepth (1.0f); glClearDepth (1.0f);
glClearColor (0, 0, 0, 0); glClearColor (0, 0, 0, 0);
glLightfv (GL_LIGHT0, GL_AMBIENT, LightAmbient); /* add lighting. (ambient) */ glLightfv (GL_LIGHT0, GL_AMBIENT, LightAmbient); /* add lighting. (ambient) */
glLightfv (GL_LIGHT0, GL_DIFFUSE, LightDiffuse); /* add lighting. (diffuse). */ glLightfv (GL_LIGHT0, GL_DIFFUSE, LightDiffuse); /* add lighting. (diffuse). */
glLightfv (GL_LIGHT0, GL_POSITION, LightPosition); /* set light position. */ glLightfv (GL_LIGHT0, GL_POSITION, LightPosition); /* set light position. */
//glEnable(GL_LIGHT0); // Quick And Dirty Lighting (Assumes Light0 Is Set Up) //glEnable(GL_LIGHT0); // Quick And Dirty Lighting (Assumes Light0 Is Set Up)
//glEnable(GL_LIGHTING); // Enable Lighting //glEnable(GL_LIGHTING); // Enable Lighting
glDisable (GL_COLOR_MATERIAL); // Enable Material Coloring glDisable (GL_COLOR_MATERIAL); // Enable Material Coloring
glEnable (GL_AUTO_NORMAL); // let OpenGL generate the Normals glEnable (GL_AUTO_NORMAL); // let OpenGL generate the Normals
glDisable (GL_BLEND); glDisable (GL_BLEND);

View file

@ -29,22 +29,23 @@ unsigned int UVwidth = 256, UVheight = 512;
int tex_xsize, tex_ysize; int tex_xsize, tex_ysize;
void void
GenerateRGBTables (unsigned char *Ytable, // Y-palette GenerateRGBTables (unsigned char *Ytable, // Y-palette
unsigned char *Utable, // U-palette unsigned char *Utable, // U-palette
unsigned char *Vtable, // V-palette unsigned char *Vtable, // V-palette
float *bias, // bias (fourth vector to be added) float *bias, // bias (fourth vector to be added)
float *Uscale, // scaling color for U float *Uscale, // scaling color for U
float *Vscale) // scaling color for V float *Vscale) // scaling color for V
{ {
int i; int i;
const float mat[9] = { // the modified YUV->RGB matrix const float mat[9] = { // the modified YUV->RGB matrix
+1.130469478f, -0.058755723f, +1.596026304f, +1.130469478f, -0.058755723f, +1.596026304f,
+1.130469478f, -0.450515935f, -0.812967512f, +1.130469478f, -0.450515935f, -0.812967512f,
+1.130469478f, +1.958477882f, 0.0f +1.130469478f, +1.958477882f, 0.0f
}; };
#define COMPRESS(a)(0.5f*(a)+128.0f) // counter-piece to EXPAND_NORMAL
#define COMPRESS(a)(0.5f*(a)+128.0f) // counter-piece to EXPAND_NORMAL
#define fCOMPRESS(a) (0.5f*(a)+0.5f); #define fCOMPRESS(a) (0.5f*(a)+0.5f);
#define XCLAMP(a) ((a)<0.0f ? 0.0f : ((a)>255.0f ? 255.0f : (a))) // should not be necessary, but what do you know. #define XCLAMP(a) ((a)<0.0f ? 0.0f : ((a)>255.0f ? 255.0f : (a))) // should not be necessary, but what do you know.
bias[0] = fCOMPRESS (-0.842580964f); bias[0] = fCOMPRESS (-0.842580964f);
bias[1] = fCOMPRESS (+0.563287723f); bias[1] = fCOMPRESS (+0.563287723f);
bias[2] = fCOMPRESS (-1.0f); bias[2] = fCOMPRESS (-1.0f);
@ -59,17 +60,17 @@ GenerateRGBTables (unsigned char *Ytable, // Y-palette
Vscale[3] = 0.0f; Vscale[3] = 0.0f;
for (i = 0; i < 256; i++) { for (i = 0; i < 256; i++) {
// Y-table holds unsigned values // Y-table holds unsigned values
Ytable[3 * i] = (unsigned char) XCLAMP (mat[0] * (float) i); // R Ytable[3 * i] = (unsigned char) XCLAMP (mat[0] * (float) i); // R
Ytable[3 * i + 1] = (unsigned char) XCLAMP (mat[3] * (float) i); // G Ytable[3 * i + 1] = (unsigned char) XCLAMP (mat[3] * (float) i); // G
Ytable[3 * i + 2] = (unsigned char) XCLAMP (mat[6] * (float) i); // B Ytable[3 * i + 2] = (unsigned char) XCLAMP (mat[6] * (float) i); // B
// U-table holds signed values // U-table holds signed values
Utable[3 * i] = (unsigned char) XCLAMP (COMPRESS (255.0f / 16.0f * mat[1] * (float) i)); // R Utable[3 * i] = (unsigned char) XCLAMP (COMPRESS (255.0f / 16.0f * mat[1] * (float) i)); // R
Utable[3 * i + 1] = (unsigned char) XCLAMP (COMPRESS (255.0f / 120.0f * mat[4] * (float) i)); // G Utable[3 * i + 1] = (unsigned char) XCLAMP (COMPRESS (255.0f / 120.0f * mat[4] * (float) i)); // G
Utable[3 * i + 2] = (unsigned char) XCLAMP (COMPRESS (255.0f / 500.0f * mat[7] * (float) i)); // B Utable[3 * i + 2] = (unsigned char) XCLAMP (COMPRESS (255.0f / 500.0f * mat[7] * (float) i)); // B
// V-table holds signed values // V-table holds signed values
Vtable[3 * i] = (unsigned char) XCLAMP (COMPRESS (255.0f / 408.0f * mat[2] * (float) i)); // R Vtable[3 * i] = (unsigned char) XCLAMP (COMPRESS (255.0f / 408.0f * mat[2] * (float) i)); // R
Vtable[3 * i + 1] = (unsigned char) XCLAMP (COMPRESS (255.0f / 210.0f * mat[5] * (float) i)); // G Vtable[3 * i + 1] = (unsigned char) XCLAMP (COMPRESS (255.0f / 210.0f * mat[5] * (float) i)); // G
Vtable[3 * i + 2] = (unsigned char) (128.0f - 14.0f); // G constant Vtable[3 * i + 2] = (unsigned char) (128.0f - 14.0f); // G constant
} }
#undef fCOMPRESS #undef fCOMPRESS
#undef COMPRESS #undef COMPRESS
@ -315,7 +316,7 @@ PowerOfTwo (unsigned int i)
// Initializes textures. Call once prior to rendering // Initializes textures. Call once prior to rendering
void void
InitYUVPlanes (GLuint * Yhandle, GLuint * Uhandle, GLuint * Vhandle, unsigned int Ywidth, unsigned int Yheight, unsigned int UVwidth, unsigned int UVheight, GLenum filter, // filter should be either GL_NEAREST or GL_LINEAR. Test this! InitYUVPlanes (GLuint * Yhandle, GLuint * Uhandle, GLuint * Vhandle, unsigned int Ywidth, unsigned int Yheight, unsigned int UVwidth, unsigned int UVheight, GLenum filter, // filter should be either GL_NEAREST or GL_LINEAR. Test this!
unsigned char *Ypal, unsigned char *Upal, unsigned char *Vpal) unsigned char *Ypal, unsigned char *Upal, unsigned char *Vpal)
{ {
glGenTextures (1, Yhandle); glGenTextures (1, Yhandle);