Folks,
I am learning how to write plugin. I am following this simple example from - https://github.com/kirankrishnappa/gst-template/tree/master/gst-plugin/src/gstmyfilter.c. This is simple plugin which does output = input. I am calling this plugin - in my code as follows - #include "play.h" void play_uri (const gchar * uri) { GstStateChangeReturn sret; GstElement *playbin; GstElement *audiosink; GstElement *videosink; GstElement *plugin; GstMessage *msg = NULL; GstBus *bus; g_print ("Trying to play %s ...\n", uri); playbin = gst_element_factory_make ("playbin", "playbin"); if (playbin == NULL) goto no_playbin; /* get playbin's bus - we'll watch it for messages */ bus = gst_pipeline_get_bus (GST_PIPELINE (playbin)); /* set audio sink */ audiosink = gst_element_factory_make ("autoaudiosink", "audiosink"); if (audiosink == NULL) goto no_autoaudiosink; g_object_set (playbin, "audio-sink", audiosink, NULL); /* set gsttransform - plugin */ plugin = gst_element_factory_make ("myfilter", "transform"); if (plugin == NULL) goto no_plugin; g_object_set (playbin, "video-sink", plugin, NULL); #if TRY_NEW_PLUGIN /* set gsttransform - plugin */ plugin = gst_element_factory_make ("myfilter", "transform"); if (plugin == NULL) goto no_plugin; g_object_set (playbin, "video-sink", plugin, NULL); /* connect video */ videosink = gst_element_factory_make ("autovideosink", "videosink"); if (videosink == NULL) goto no_autovideosink; g_object_set (plugin, "sink", videosink, NULL); #else /* set video sink */ videosink = gst_element_factory_make ("autovideosink", "videosink"); if (videosink == NULL) goto no_autovideosink; g_object_set (playbin, "video-sink", videosink, NULL); #endif /* set URI to play back */ g_object_set (playbin, "uri", uri, NULL); /* and GO GO GO! */ gst_element_set_state (GST_ELEMENT (playbin), GST_STATE_PLAYING); /* wait (blocks!) until state change either completes or fails */ sret = gst_element_get_state (GST_ELEMENT (playbin), NULL, NULL, -1); switch (sret) { case GST_STATE_CHANGE_FAILURE:{ msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0); goto got_error_message; } case GST_STATE_CHANGE_SUCCESS:{ GstMessage *msg; g_print ("Playing ...\n"); while (1) { gint64 dur, pos; if (gst_element_query_duration (playbin, GST_FORMAT_TIME, &dur) && gst_element_query_position (playbin, GST_FORMAT_TIME, &pos)) { g_print (" %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (pos), GST_TIME_ARGS (dur)); } /* check if we finished or if there was an error, * but don't wait/block if neither is the case */ msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, 0); if (msg && GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) goto got_error_message; if (msg && GST_MESSAGE_TYPE (msg) == GST_MESSAGE_EOS) { g_print ("Finished.\n"); break; } /* sleep for one second */ g_usleep (G_USEC_PER_SEC * 1); } break; } default: g_assert_not_reached (); } /* shut down and free everything */ gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (playbin); gst_object_unref (bus); return; /* ERRORS */ got_error_message: { if (msg) { GError *err = NULL; gchar *dbg_str = NULL; gst_message_parse_error (msg, &err, &dbg_str); g_printerr ("FAILED to play %s: %s\n%s\n", uri, err->message, (dbg_str) ? dbg_str : "(no debugging information)"); g_error_free (err); g_free (dbg_str); gst_message_unref (msg); } else { g_printerr ("FAILED to play %s: unknown error\n", uri); } /* shut down and free everything */ gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (playbin); gst_object_unref (bus); return; } no_playbin: { g_error ("Could not create GStreamer 'playbin' element. " "Please install it"); /* not reached, g_error aborts */ return; } no_autoaudiosink: { g_error ("Could not create GStreamer 'autoaudiosink' element. " "Please install it"); /* not reached, g_error aborts */ return; } no_autovideosink: { g_error ("Could not create GStreamer 'autovideosink' element. " "Please install it"); /* not reached, g_error aborts */ return; } no_plugin: { g_error ("Could not create GStreamer 'plugin' element. " "Please install it"); /* not reached, g_error aborts */ return; } } When I run my app - I see following messages with GST_DEBUG=3. Could someone please help with what could be going wrong ? When I have TRY_NEW_PLUGIN defined I get - 0:00:00.086549106 ESC[331m16680ESC[00m 0x7f740044f0 ESC[33;01mWARN ESC[00m ESC[00m omx gstomx.c:2836:plugin_init:ESC[00m Failed to load configuration file: Valid key file could not be found in search dirs (searched in: /home/ubuntu/.config:/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg as per GST_OMX_CONFIG_DIR environment variable, the xdg user config directory (or XDG_CONFIG_HOME) and the system config directory (or XDG_CONFIG_DIRS) 0:00:00.094815536 ESC[331m16680ESC[00m 0x7f740044f0 ESC[32;01mFIXME ESC[00m ESC[00m videodecoder gstvideodecoder.c:946:gst_video_decoder_drain_out:<omx When I do not define TRY_NEW_PLUGIN, then things work fine. Thanks -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |