Note that there are some explanatory texts on larger screens.

plurals
  1. POFailure adding filter to pipeline in gstreamer
    text
    copied!<p>I'm trying to do the exercise at the end of the Basic GStreamer tutorial here: <a href="http://docs.gstreamer.com/display/GstSDK/Basic+tutorial+2%3a+GStreamer+concepts" rel="nofollow">Basic Tutorial 2</a>. The exercise is merely to add a filter to a video. The exercise says to simply add the "vertigoTV" effect, so I did that.</p> <p>Here are the relevant parts to my attempt:</p> <pre><code> #include &lt;gst/gst.h&gt; int main(int argc, char *argv[]) { GstElement *pipeline, *source, *filter, *convert, *sink; GstBus *bus; GstMessage *msg; GstStateChangeReturn ret; /* Initialize GStreamer */ gst_init (&amp;argc, &amp;argv); /* Create the elements */ source = gst_element_factory_make ("videotestsrc", "source"); filter = gst_element_factory_make ("vertigotv", "filter"); sink = gst_element_factory_make ("autovideosink", "sink"); /* Create the empty pipeline */ pipeline = gst_pipeline_new ("test-pipeline"); if (!pipeline || !source || !filter || !sink) { g_printerr ("Not all elements could be created.\n"); return -1; } /* Build the pipeline */ gst_bin_add_many (GST_BIN (pipeline), source, filter, sink, NULL); if (gst_element_link_many (source, filter, sink, NULL) != TRUE) { g_printerr ("Could not link all elements.\n"); gst_object_unref (pipeline); return -1; } /* Modify the source's properties */ g_object_set (source, "pattern", 0, NULL); /* Start playing */ ret = gst_element_set_state (pipeline, GST_STATE_PLAYING); if (ret == GST_STATE_CHANGE_FAILURE) { g_printerr ("Unable to set the pipeline to the playing state.\n"); gst_object_unref (pipeline); return -1; } /* Wait until error or EOS */ bus = gst_element_get_bus (pipeline); msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS); /* Parse message */ if (msg != NULL) { GError *err; gchar *debug_info; switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_ERROR: gst_message_parse_error (msg, &amp;err, &amp;debug_info); g_printerr ("Error received from element %s: %s\n", GST_OBJECT_NAME (msg-&gt;src), err-&gt;message); g_printerr ("Debugging information: %s\n", debug_info ? debug_info : "none"); g_clear_error (&amp;err); g_free (debug_info); break; case GST_MESSAGE_EOS: g_print ("End-Of-Stream reached.\n"); break; default: /* We should not reach here because we only asked for ERRORs and EOS */ g_printerr ("Unexpected message received.\n"); break; } gst_message_unref (msg); } /* Free resources */ gst_object_unref (bus); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); return 0; } </code></pre> <p>However, the return value is a GST_STATE_CHANGE_FAILURE. Any idea why?</p> <p>Thanks so much!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload