[gst-devel] What's wrong with my getcaps() function?

Corentin BARON corentin.baron at inrialpes.fr
Wed Jun 7 11:30:24 CEST 2006


Hello,

I'm building a video plugin and have problems with rgb output, it  
seems there's a problem with my getcaps() function but I can't figure  
it out. Here's my function:

> static GstCaps *
> gst_blinkysrc_getcaps(GstPad *pad)
> {
> 	GstCaps *capslist;
> 	GstBlinkySrc *filter = GST_BLINKYSRC(gst_pad_get_parent(pad));
> 	
> 	g_print("getcaps()\n");
> 	
> 	capslist = gst_caps_new_empty();
> 	
> 	// Are we connected to a device ?
> 	if (filter->handler != NULL && filter->buffer.image != NULL) {
> 		// In this case we know the width/height of our video
> 		gst_caps_append_structure(capslist,
> 			gst_structure_new("video/x-raw-rgb",
> 			"depth", G_TYPE_INT, 16,
> 			"bpp", G_TYPE_INT, 16,
> 			"endianness", G_TYPE_INT, G_BIG_ENDIAN,
> 			"red_mask", G_TYPE_INT, 63488,
> 			"green_mask", G_TYPE_INT, 2016,
> 			"blue_mask", G_TYPE_INT, 31,
> 			"width", G_TYPE_INT, filter->buffer.header.width,
> 			"height", G_TYPE_INT, filter->buffer.header.height,
> 			"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 			NULL));
> 		
> 		gst_caps_append_structure(capslist,
> 			gst_structure_new("video/x-raw-rgb",
> 			"depth", G_TYPE_INT, 24,
> 			"bpp", G_TYPE_INT, 24,
> 			"endianness", G_TYPE_INT, G_BIG_ENDIAN,
> 			"red_mask", G_TYPE_INT, 0xff0000,
> 			"green_mask", G_TYPE_INT, 0x00ff00,
> 			"blue_mask", G_TYPE_INT, 0x0000ff,
> 			"width", G_TYPE_INT, filter->buffer.header.width,
> 			"height", G_TYPE_INT, filter->buffer.header.height,
> 			"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 			NULL));
> 		
> 		gst_caps_append_structure(capslist,
> 			gst_structure_new("video/x-raw-rgb",
> 			"depth", G_TYPE_INT, 16,
> 			"bpp", G_TYPE_INT, 16,
> 			"endianness", G_TYPE_INT, G_BYTE_ORDER,
> 			"red_mask", G_TYPE_INT, 63488,
> 			"green_mask", G_TYPE_INT, 2016,
> 			"blue_mask", G_TYPE_INT, 31,
> 			"width", G_TYPE_INT, filter->buffer.header.width,
> 			"height", G_TYPE_INT, filter->buffer.header.height,
> 			"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 			NULL));
> 		
> 		gst_caps_append_structure(capslist,
> 			gst_structure_new("video/x-raw-rgb",
> 			"depth", G_TYPE_INT, 24,
> 			"bpp", G_TYPE_INT, 24,
> 			"endianness", G_TYPE_INT, G_BYTE_ORDER,
> 			"red_mask", G_TYPE_INT, 0xff0000,
> 			"green_mask", G_TYPE_INT, 0x00ff00,
> 			"blue_mask", G_TYPE_INT, 0x0000ff,
> 			"width", G_TYPE_INT, filter->buffer.header.width,
> 			"height", G_TYPE_INT, filter->buffer.header.height,
> 			"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 			NULL));
> 		
> 		gst_caps_append_structure(capslist,
> 			gst_structure_new("video/x-raw-yuv",
> 			"format", GST_TYPE_FOURCC, formats[FORMAT_YUV],
> 			"width", G_TYPE_INT, filter->buffer.header.width,
> 			"height", G_TYPE_INT, filter->buffer.header.height,
> 			"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 			NULL));
> 		
> 		g_print("| given caps:\n%s\n", gst_caps_to_string(capslist));
> 		
> 		return capslist;
> 	}
> 	
> 	gst_caps_append_structure(capslist,
> 		gst_structure_new("video/x-raw-rgb",
> 		"depth", G_TYPE_INT, 16,
> 		"bpp", G_TYPE_INT, 16,
> 		"endianess", G_TYPE_INT, G_BIG_ENDIAN,
> 		"red_mask", G_TYPE_INT, 63488,
> 		"green_mask", G_TYPE_INT, 2016,
> 		"blue_mask", G_TYPE_INT, 31,
> 		"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 		NULL));
> 	
> 	gst_caps_append_structure(capslist,
> 		gst_structure_new("video/x-raw-rgb",
> 		"depth", G_TYPE_INT, 16,
> 		"bpp", G_TYPE_INT, 16,
> 		"endianess", G_TYPE_INT, G_BYTE_ORDER,
> 		"red_mask", G_TYPE_INT, 63488,
> 		"green_mask", G_TYPE_INT, 2016,
> 		"blue_mask", G_TYPE_INT, 31,
> 		"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 		NULL));
> 	
> 	gst_caps_append_structure(capslist,
> 		gst_structure_new("video/x-raw-yuv",
> 		"format", GST_TYPE_FOURCC, formats[FORMAT_YUV],
> 		"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 		NULL));
> 	
> 	gst_caps_append_structure(capslist,
> 		gst_structure_new("video/x-raw-rgb",
> 		"depth", G_TYPE_INT, 24,
> 		"bpp", G_TYPE_INT, 24,
> 		"endianess", G_TYPE_INT, G_BIG_ENDIAN,
> 		"red_mask", G_TYPE_INT, 16711680,
> 		"green_mask", G_TYPE_INT, 65280,
> 		"blue_mask", G_TYPE_INT, 255,
> 		"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 		NULL));
> 	
> 	gst_caps_append_structure(capslist,
> 		gst_structure_new("video/x-raw-rgb",
> 		"depth", G_TYPE_INT, 24,
> 		"bpp", G_TYPE_INT, 24,
> 		"endianess", G_TYPE_INT, G_BYTE_ORDER,
> 		"red_mask", G_TYPE_INT, 16711680,
> 		"green_mask", G_TYPE_INT, 65280,
> 		"blue_mask", G_TYPE_INT, 255,
> 		"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
> 		"framerate", GST_TYPE_DOUBLE_RANGE, 1.0, 100.0,
> 		NULL));
> 		
> 	g_print("| given caps:\n%s\n", gst_caps_to_string(capslist));
> 	
> 	return capslist;
> }

I'm working on GStreamer 0.8.10 on Fedora Core 4 and Maemo (Nokia 770  
tablet).
Thx for yourt help,
Corentin.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: corentinbaron.gpgkey
Type: application/octet-stream
Size: 916 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20060607/43dfed4a/attachment.obj>
-------------- next part --------------


-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20060607/43dfed4a/attachment.pgp>


More information about the gstreamer-devel mailing list