static GstCaps * gst_gdiscreencapsrc_get_caps (GstBaseSrc * bsrc) { GstGDIScreenCapSrc *src = GST_GDISCREENCAPSRC (bsrc); RECT rect_dst; src->screen_rect = rect_dst = gst_win32_get_monitor_rect (src->monitor); if (src->capture_w && src->capture_h && src->capture_x + src->capture_w < rect_dst.right - rect_dst.left && src->capture_y + src->capture_h < rect_dst.bottom - rect_dst.top) { rect_dst.left = src->capture_x; rect_dst.top = src->capture_y; rect_dst.right = src->capture_x + src->capture_w; rect_dst.bottom = src->capture_y + src->capture_h; } else { /* Default values. */ src->capture_x = src->capture_y = 0; src->capture_w = src->capture_h = 0; } GST_DEBUG ("width = %d, height=%d", rect_dst.right - rect_dst.left, rect_dst.bottom - rect_dst.top); return gst_caps_new_simple ("video/x-raw-rgb", "bpp", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24, "endianness", G_TYPE_INT, G_BIG_ENDIAN, "red_mask", G_TYPE_INT, GST_VIDEO_BYTE3_MASK_24_INT, "green_mask", G_TYPE_INT, GST_VIDEO_BYTE2_MASK_24_INT, "blue_mask", G_TYPE_INT, GST_VIDEO_BYTE1_MASK_24_INT, "width", G_TYPE_INT, rect_dst.right - rect_dst.left, "height", G_TYPE_INT, rect_dst.bottom - rect_dst.top, "framerate", GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, NULL); }
static GstCaps * gst_gdiscreencapsrc_get_caps (GstBaseSrc * bsrc, GstCaps * filter) { GstGDIScreenCapSrc *src = GST_GDISCREENCAPSRC (bsrc); RECT rect_dst; GstCaps *caps; src->screen_rect = rect_dst = gst_win32_get_monitor_rect (src->monitor); if (src->capture_w && src->capture_h && src->capture_x + src->capture_w < rect_dst.right - rect_dst.left && src->capture_y + src->capture_h < rect_dst.bottom - rect_dst.top) { rect_dst.left = src->capture_x; rect_dst.top = src->capture_y; rect_dst.right = src->capture_x + src->capture_w; rect_dst.bottom = src->capture_y + src->capture_h; } else { /* Default values. */ src->capture_x = src->capture_y = 0; src->capture_w = src->capture_h = 0; } GST_DEBUG ("width = %d, height=%d", (gint) (rect_dst.right - rect_dst.left), (gint) (rect_dst.bottom - rect_dst.top)); caps = gst_caps_new_simple ("video/x-raw", "format", G_TYPE_STRING, "BGR", "width", G_TYPE_INT, rect_dst.right - rect_dst.left, "height", G_TYPE_INT, rect_dst.bottom - rect_dst.top, "framerate", GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL); if (filter) { GstCaps *tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); caps = tmp; } return caps; }