#include static GstCaps* mpeg2dec_sink_caps (void) { return gst_caps_new ( "mpeg2dec_sink", "video/mpeg", gst_props_new ( "mpegtype", GST_PROPS_LIST ( GST_PROPS_INT(1), GST_PROPS_INT(2) ), NULL ) ); } static GstCaps* mp1parse_src_caps (void) { return gst_caps_new ( "mp1parse_src", "video/mpeg", gst_props_new ( "mpegtype", GST_PROPS_LIST ( GST_PROPS_INT(1) ), NULL ) ); } static GstCaps* mpeg2dec_src_caps (void) { return gst_caps_new ( "mpeg2dec_src", "video/raw", gst_props_new ( "fourcc", GST_PROPS_LIST ( GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','V','1','2')), GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','U','Y','2')) ), "width", GST_PROPS_INT_RANGE (16, 4096), "height", GST_PROPS_INT_RANGE (16, 4096), NULL ) ); } static GstCaps* raw_sink_caps (void) { return gst_caps_new ( "raw_sink_caps", "video/raw", gst_props_new ( "fourcc", GST_PROPS_LIST ( GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','V','1','2')) ), "height", GST_PROPS_INT_RANGE (16, 256), NULL ) ); } static GstCaps* raw2_sink_caps (void) { return gst_caps_new ( "raw2_sink_caps", "video/raw", gst_props_new ( "fourcc", GST_PROPS_LIST ( GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','V','1','2')), GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','U','Y','2')) ), "height", GST_PROPS_INT_RANGE (16, 4096), NULL ) ); } static GstCaps* get_testcaps (void) { return gst_caps_new ( "raw2_sink_caps", "video/raw", gst_props_new ( "fourcc", GST_PROPS_LIST ( GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','V','1','2')), GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','U','Y','V')) ), "height", GST_PROPS_INT_RANGE (16, 4096), NULL ) ); } static GstCaps *sinkcaps = NULL, *rawcaps = NULL, *rawcaps2 = NULL, *rawcaps3 = NULL, *mp1parsecaps = NULL; int main (int argc, char *argv[]) { gboolean testret; xmlDocPtr doc; xmlNodePtr parent; doc = xmlNewDoc ("1.0"); doc->xmlRootNode = xmlNewDocNode (doc, NULL, "Capabilities", NULL); g_thread_init (NULL); _gst_type_initialize (); _gst_props_initialize (); _gst_caps_initialize (); sinkcaps = mpeg2dec_sink_caps (); parent = xmlNewChild (doc->xmlRootNode, NULL, "Capabilities1", NULL); gst_caps_save_thyself (sinkcaps, parent); rawcaps = mpeg2dec_src_caps (); parent = xmlNewChild (doc->xmlRootNode, NULL, "Capabilities2", NULL); gst_caps_save_thyself (rawcaps, parent); rawcaps2 = raw_sink_caps (); parent = xmlNewChild (doc->xmlRootNode, NULL, "Capabilities3", NULL); gst_caps_save_thyself (rawcaps2, parent); mp1parsecaps = mp1parse_src_caps (); parent = xmlNewChild (doc->xmlRootNode, NULL, "Capabilities4", NULL); gst_caps_save_thyself (mp1parsecaps, parent); rawcaps3 = raw2_sink_caps (); parent = xmlNewChild (doc->xmlRootNode, NULL, "Capabilities5", NULL); gst_caps_save_thyself (rawcaps3, parent); xmlDocDump(stdout, doc); testret = gst_caps_check_compatibility (mp1parsecaps, rawcaps); g_print ("4 <-> 2 == %d (invalid, wrong major type)\n", testret); testret = gst_caps_check_compatibility (mp1parsecaps, sinkcaps); g_print ("4 <-> 1 == %d (valid, subset)\n", testret); testret = gst_caps_check_compatibility (sinkcaps, mp1parsecaps); g_print ("1 <-> 4 == %d (invalid, superset)\n", testret); testret = gst_caps_check_compatibility (rawcaps, rawcaps2); g_print ("2 <-> 3 == %d (invalid, ranges)\n", testret); testret = gst_caps_check_compatibility (rawcaps, rawcaps3); g_print ("2 <-> 5 == %d (valid)\n", testret); testret = gst_caps_check_compatibility (rawcaps3, rawcaps); g_print ("5 <-> 2 == %d (invalid)\n", testret); testret = gst_caps_check_compatibility (rawcaps2, rawcaps3); g_print ("3 <-> 5 == %d (valid)\n", testret); testret = gst_caps_check_compatibility (rawcaps2, rawcaps); g_print ("3 <-> 2 == %d (invalid, property missing in source)\n", testret); testret = gst_caps_check_compatibility (rawcaps, rawcaps); g_print ("2 <-> 2 == %d (valid, same caps)\n", testret); return 0; }