Using caps on videoscale element in the C API

Serhan Gül serhan at fastmail.com
Mon Jul 15 12:13:53 UTC 2019


Thanks, this solved my issue! 
The video I'm getting from ximagesrc is not 640x480 but it is the actual size of that window. My problem was solved when I linked the videoscale and nvh264enc element with a filter (instead of putting the filter between videoconvert and videoscale elmenets) . So I changed the relevant part of the code as follows:

 if ((gst_element_link (source, converter) && *gst_element_link*(converter, scaler)
 && *link_elements_with_filter* (scaler, encoder)
 && gst_element_link (encoder, payloader)
 && gst_element_link (payloader, sink)) != TRUE) {
 g_printerr ("Elements could not be linked.\n");
 gst_object_unref (pipeline);
 return -1;
 }


-- 
 Serhan Gül
 serhan at fastmail.com

On Mon, Jul 15, 2019, at 1:06 PM, Josh Doe wrote:
> On Mon, Jul 15, 2019 at 5:31 AM Serhan Gül <serhan at fastmail.com> wrote:
> >
> > I'm trying to grab video from a window using ximagesrc and scale it to a certain size before encoding in H.264 and streaming with RTP to another machine. I implemented my pipeline in the C API and it works fine unless I add a videoscale element with capsfilter.
> >
> > Specifically, I have a problem understanding how to use the videoscale element correctly and how to link it with a videoconvert element programmatically. The function 'gst_element_link_filtered' returns false when I try to connect the videoconvert and videoscale element using a capsfilter for scaling to the resolution I want.
> >
> > My code looks as follows:
> >
> > static gboolean
> > link_elements_with_filter (GstElement *element1, GstElement *element2)
> > {
> > gboolean link_ok;
> > GstCaps *caps;
> >
> > caps = gst_caps_from_string("video/x-raw,width=640,height=480,framerate=20/1");
> >
> > link_ok = gst_element_link_filtered (element1, element2, caps);
> > gst_caps_unref (caps);
> >
> > if (!link_ok) {
> > g_warning ("Failed to link element1 and element2!");
> > }
> >
> > return link_ok;
> > }
> >
> >
> > int main(int argc, char *argv[]) {
> >
> > (...)
> >
> > /* Create the elements */
> > source = gst_element_factory_make ("ximagesrc", "source");
> > converter = gst_element_factory_make ("videoconvert", "converter");
> > scaler = gst_element_factory_make ("videoscale", "scaler");
> > encoder = gst_element_factory_make("nvh264enc", "encoder");
> > payloader = gst_element_factory_make("rtph264pay", "payloader");
> > sink = gst_element_factory_make ("udpsink", "sink");
> >
> > g_object_set (source, "use-damage", FALSE, "xid", 0x5c0000c, NULL);
> > g_object_set (encoder, "gop-size", 25, "rc-mode", 2, "bitrate", 2000, NULL);
> > g_object_set (payloader, "config-interval", 1, NULL);
> > g_object_set (sink, "host", "172.17.25.248", "port", 5004, NULL);
> > pipeline = gst_pipeline_new ("test-pipeline");
> >
> > if (!pipeline || !source || !converter || !encoder || !payloader || !sink) {
> > g_printerr ("Not all elements could be created.\n");
> > return -1;
> > }
> >
> >
> > gst_bin_add_many (GST_BIN (pipeline), source, converter, scaler, encoder, payloader, sink, NULL);
> > if ((gst_element_link (source, converter) && link_elements_with_filter(converter, scaler)
> > && gst_element_link (converter, encoder)
> > && gst_element_link (encoder, payloader)
> > && gst_element_link (payloader, sink)) != TRUE) {
> > g_printerr ("Elements could not be linked.\n");
> > gst_object_unref (pipeline);
> > return -1;
> > }
> >
> > (...)
> >
> > When I run this code, I get the following:
> > ** (gst_server:55698): WARNING **: 11:21:57.315: Failed to link element1 and element2!
> > Elements could not be linked.
> > Process finished with exit code 255
> >
> > So I have problems connecting the videoconvert and videoscale elements. Is there something wrong with the order of the elements in the pipeline, or perhaps with my usage of caps?
> > Thanks.
> 
> If the video from ximagesrc isn't already 640x480, then this will
> fail. You need to filter the caps after videoscale if you want to
> scale it to 640x480.
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190715/5c20af0d/attachment.html>


More information about the gstreamer-devel mailing list