Not able to call handoff callback
Sérgio Agostinho
sergio.r.agostinho at gmail.com
Tue Apr 7 03:51:50 PDT 2015
Hey,
1 - You are not creating any identity element in your pipeline.
2 - You're trying to set the handoff cb on your autovideosink, not on your
(yet to be created) identity element.
Cheers
2015-04-07 8:50 GMT+02:00 Mayank Agarwal <mayank77fromindia at gmail.com>:
> Hi,
>
> I have modified basic tutorial two to include identity element but
> i am not able to get the callback called.
>
> Here is the example
>
> #include <gst/gst.h>
>
> static void
> handoff(GstElement *object,
> GstBuffer *arg0,
> GstPad *arg1,
> gpointer user_data)
> {
>
> printf("comes here");
>
> }
>
>
>
>
> int main(int argc, char *argv[]) {
> GstElement *pipeline, *source, *sink;
> GstBus *bus;
> GstMessage *msg;
> GstStateChangeReturn ret;
> GstElement *identity;
>
> /* Initialize GStreamer */
> gst_init (&argc, &argv);
>
> /* Create the elements */
> source = gst_element_factory_make ("videotestsrc", "source");
>
> sink = gst_element_factory_make ("autovideosink", "sink");
>
> /* Create the empty pipeline */
> pipeline = gst_pipeline_new ("test-pipeline");
>
> if (!pipeline || !source || !sink) {
> g_printerr ("Not all elements could be created.\n");
> return -1;
> }
>
> /* Build the pipeline */
> gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
> if (gst_element_link (source, sink) != TRUE) {
> g_printerr ("Elements could not be linked.\n");
> gst_object_unref (pipeline);
> return -1;
> }
>
> /* Modify the source's properties */
> g_object_set (source, "pattern", 0, NULL);
> g_object_set(G_OBJECT(sink), "signal-handoffs", TRUE, NULL);
> g_signal_connect(sink, "handoff",G_CALLBACK(handoff), 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, &err, &debug_info);
> g_printerr ("Error received from element %s: %s\n",
> GST_OBJECT_NAME (msg->src), err->message);
> g_printerr ("Debugging information: %s\n", debug_info ?
> debug_info : "none");
> g_clear_error (&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;
> }
>
>
> and the errors i am getting are:
>
> (btutorialtwo:3807): GLib-GObject-WARNING **: g_object_set_valist:
> object class 'GstAutoVideoSink' has no property named
> 'signal-handoffs'
>
> (btutorialtwo:3807): GLib-GObject-WARNING **:
> /build/buildd/glib2.0-2.40.2/./gobject/gsignal.c:2462: signal
> 'handoff' is invalid for instance '0x9950018' of type
> 'GstAutoVideoSink'
>
> although videotestsrc is playing fine.
>
> If this is not the correct way of using identity element any
> example/links of using identity element using which
> i can be able to calculate video frame rate.
>
>
> Regards
> Mayank
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20150407/4ecc8381/attachment-0001.html>
More information about the gstreamer-devel
mailing list