static void
gst_slvideo_update_caps (GstSLVideo * slvideo)
{
	GstCaps *caps;

	// GStreamer will automatically convert colourspace if necessary.
	// GStreamer will automatically resize media to one of these enumerated
	// powers-of-two that we ask for (yay GStreamer!)
	caps = llgst_caps_from_string (SLV_ALLCAPS);
	
	llgst_caps_replace (&slvideo->caps, caps);
}
/* initialize the new element
 * instantiate pads and add them to element
 * set functions
 * initialize structure
 */
static void
gst_slvideo_init (GstSLVideo * filter,
                  GstSLVideoClass * gclass)
{
    filter->caps = NULL;
    filter->width = -1;
    filter->height = -1;

    // this is the info we share with the client app
    GST_OBJECT_LOCK(filter);
    filter->retained_frame_ready = FALSE;
    filter->retained_frame_data = NULL;
    filter->retained_frame_allocbytes = 0;
    filter->retained_frame_width = filter->width;
    filter->retained_frame_height = filter->height;
    filter->retained_frame_format = SLV_PF_UNKNOWN;
    GstCaps *caps = llgst_caps_from_string (SLV_ALLCAPS);
    llgst_caps_replace (&filter->caps, caps);
    filter->resize_forced_always = false;
    filter->resize_try_width = -1;
    filter->resize_try_height = -1;
    GST_OBJECT_UNLOCK(filter);
}