appsrc warning
David Ing
ding at panopto.com
Thu Dec 13 16:00:46 UTC 2018
I don't see exactly what you are doing wrong. You are in fact setting the
"width" on a caps structure and not the GstAppSrc (which is correct). It
looks like something is trying to set the "width" on the GstAppSrc but it
is unclear what is trying to do that. You might be able to narrow it down
by stepping through the GstAppSrc with a debugger ... or perhaps that error
is unrelated to the real problem.
It looks like the "omx" plugin is searching for a config file or a key file
that it cannot load. I don't have any experience with that plugin but I
guess you would need to fix that part. You might try a different encoder
(like x264) to get around that omx problem.
Sometimes it helps to add a queue in the pipeline (perhaps before your
encoder) ... I don't know enough to say whether that would help here but it
might be worth a shot.
On Wed, Dec 12, 2018 at 5:43 AM Mario GarcĂa <garciam4d at gmail.com> wrote:
> Hi all.
>
> My application consist of pushing images from a folder (actually now is
> not reading the info, but is emulate this bytes values with black to almost
> white) to a gstremaer pipeline (appsrc --> videoconvert --> capsfilter
> --> omxh264enc -->h264parse --> rtph264pay -->udpsink ) using the appsrc
> plugin.
>
> In addition, I would like that the program runs until I want to. Hence
> there is a loop which calls "push" function infinite times.
>
> THE CODE:
> #include <gst/gst.h>
> #include <stddef.h>
> #include <stdlib.h>
> #include <string.h>
> #include <stdio.h>
> #include <gst/app/gstappsrc.h>
> #include <gst/app/gstappsink.h>
> #include <malloc.h>
> #define TOP 10
> #define HEIGHTF 512
> #define WIDTHF 640
>
>
> int main(int argc, char *argv[])
> {
> GstElement *pipeline, *source, *convert, *enc, *parse, *rtppay, *sink,
> *capsFilter;
> GstCaps *capsSource, *capsConvert;
> GstBus *bus;
> GstMessage *msg;
> GstStateChangeReturn ret;
> GstFlowReturn Ret;
>
> /* Initialize GStreamer */
> gst_init (&argc, &argv);
>
> /* Create the elements */
> //1-SOURCE
> source = gst_element_factory_make ("appsrc", NULL);
> //Source caps
> capsSource = gst_caps_new_simple ("video/x-raw",
> "format", G_TYPE_STRING, "GRAY8",
> "width", G_TYPE_INT, 640,
> "height", G_TYPE_INT, 512,
> "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
> "interlace-mode", G_TYPE_STRING, "progressive", NULL) ;
> gst_app_src_set_caps (GST_APP_SRC(source), capsSource);
> //Set the block propierty to TRUE
> g_object_set(source, "block", TRUE, NULL);
> //Set the max-bytes propierty
> g_object_set(source, "max-bytes", 655360, NULL);
>
> //2-CONVERSION
> convert = gst_element_factory_make ("videoconvert", NULL);
>
> //3-CAPS Filter
> capsFilter = gst_element_factory_make ("capsfilter", NULL);
> capsConvert = gst_caps_new_simple ("video/x-raw",
> "format", G_TYPE_STRING, "I420", NULL);
> g_object_set(capsFilter, "caps", capsConvert, NULL);
>
> //4-CODEC
> enc = gst_element_factory_make ("omxh264enc", "enc");
> g_object_set(enc, "bitrate", 1000000, NULL);
>
> //5-PARSSING
> parse = gst_element_factory_make ("h264parse", "parse");
>
> //6-RTP PAYLOAD
> rtppay = gst_element_factory_make ("rtph264pay", "rtppay");
> g_object_set (G_OBJECT (rtppay), "ssrc", 575096457, NULL);
>
> //7-DESTINATION
> sink = gst_element_factory_make ("udpsink", "sink");
> g_object_set(G_OBJECT (sink), "host", "127.0.0.1", NULL );
> g_object_set(G_OBJECT (sink), "port", 9078, NULL );
>
>
> /* Create the empty pipeline */
> pipeline = gst_pipeline_new ("test-pipeline");
>
> if (!pipeline || !source || !convert || !capsFilter || !enc || !parse ||
> !rtppay || !sink) {
> g_printerr ("Not all elements could be created.\n");
> return -1;
> }
>
> /* Build the pipeline */
> gst_bin_add_many (GST_BIN (pipeline), source, convert, capsFilter, enc,
> parse, rtppay, sink, NULL);
> if (gst_element_link_many (source, convert, capsFilter, enc, parse,
> rtppay, sink, NULL) != TRUE) {
> g_printerr ("Elements could not be linked.\n");
> gst_object_unref (pipeline);
> return -1;
> }
> /* 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;
> }
>
> //CREATE AND FEED BUFFER
> GstBuffer *buf;
> GstMapInfo map;
> int imageCount=0;
>
> while (imageCount<TOP){
> //Allocate and create Buffer
> buf=gst_buffer_new_and_alloc(HEIGHTF*WIDTHF);
> //To avoid coping in memory
> gst_buffer_map(buf, &map, GST_MAP_WRITE);
> // We set the buffer to values from 0 (black) to 234 (almost white)
> memset (map.data, 26*imageCount, HEIGHTF*WIDTHF);
> //Unmap
> gst_buffer_unmap(buf, &map);
> //Push
> Ret=gst_app_src_push_buffer(GST_APP_SRC(source), buf);
> if (Ret!=GST_FLOW_OK)
> printf ("\nError pushing buffer");
> //keep the loop alive
> imageCount++;
> if(imageCount==10)
> imageCount=0;
> }
>
> /* 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);/* Create the empty pipeline */
> pipeline = gst_pipeline_new ("test-pipeline");
>
>
>
> return 0;
> }
>
> It compile without errors, but when I execute I obtain the next output. I
> do not know how to continue, because it seem like the speed of feeding is
> wrong or maybe an allocation memory issue. Please, if someone could help
> me, I would be very grateful.
>
> DEBUG INFO
> ubuntu at tegra-ubuntu:~/mario/Project/MarioApp/Images_app$
> ./ALLIMAGESMEMGST
> 0:00:00.060633916 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1147:gst_app_src_set_caps:<appsrc0> setting caps to
> video/x-raw, format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.060954416 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1300:gst_app_src_set_max_bytes:<appsrc0> setting max-bytes to
> 655360
>
> (ALLIMAGESMEMGST:4114): GLib-GObject-WARNING **: g_object_set_valist:
> object class 'GstAppSrc' has no property named 'width'
> 0:00:00.070510333 4114 0x139d20 WARN omx
> /dvs/git/dirty/git-master_linux/external/gstreamer/gst-omx/omx/gstomx.c:2814:plugin_init:
> 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.091209833 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.093006166 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.095336833 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.096090833 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.096366500 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> 0:00:00.096731416 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:591:gst_app_src_internal_get_caps:<appsrc0> caps: video/x-raw,
> format=(string)GRAY8, width=(int)640, height=(int)512,
> pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
> Inside NvxLiteH264DecoderLowLatencyInitNvxLiteH264DecoderLowLatencyInit
> set DPB and Mjstreaming0:00:00.123102833 4114 0x139d20 DEBUG
> appsrc gstappsrc.c:742:gst_app_src_start:<appsrc0> starting
> 0:00:00.123251750 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1222:gst_app_src_get_size:<appsrc0> getting size of -1
> 0:00:00.123316083 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:865:gst_app_src_do_seek:<appsrc0> seeking to 0, format bytes
> 0:00:00.123684083 4114 0x14bbb0 FIXME default
> gstutils.c:3648:gst_pad_create_stream_id_printf_valist:<appsrc0:src>
> Creating random stream-id, consider implementing a deterministic way of
> creating a stream-id
> 0:00:00.124006083 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1537:gst_app_src_push_buffer_full:<appsrc0> queueing buffer
> 0x181160
> 0:00:00.124418750 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1537:gst_app_src_push_buffer_full:<appsrc0> queueing buffer
> 0x181200
> 0:00:00.124764333 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1502:gst_app_src_push_buffer_full:<appsrc0> queue filled
> (655360 >= 655360)
> 0:00:00.124814416 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1502:gst_app_src_push_buffer_full:<appsrc0> queue filled
> (655360 >= 655360)
> 0:00:00.124853666 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1523:gst_app_src_push_buffer_full:<appsrc0> waiting for free
> space
> 0:00:00.125336916 4114 0x14bbb0 WARN GST_PADS
> gstpad.c:3669:gst_pad_peer_query:<appsrc0:src> could not send sticky events
> 0:00:00.125457583 4114 0x14bbb0 DEBUG appsrc
> gstappsrc.c:1052:gst_app_src_create:<appsrc0> we have buffer 0x181160 of
> size 327680
> 0:00:00.126733083 4114 0x14bbb0 WARN basesrc
> gstbasesrc.c:2865:gst_base_src_loop:<appsrc0> error: Internal data flow
> error.
> 0:00:00.126812416 4114 0x14bbb0 WARN basesrc
> gstbasesrc.c:2865:gst_base_src_loop:<appsrc0> error: streaming task paused,
> reason not-negotiated (-4)
> 0:00:00.128321250 4114 0x14bbb0 WARN baseparse
> gstbaseparse.c:1153:gst_base_parse_sink_event_default:<parse> error: No
> valid frames found before end of stream
> 0:00:00.126777250 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1537:gst_app_src_push_buffer_full:<appsrc0> queueing buffer
> 0x1812a0
> 0:00:00.128696000 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1502:gst_app_src_push_buffer_full:<appsrc0> queue filled
> (655360 >= 655360)
> 0:00:00.128746333 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1502:gst_app_src_push_buffer_full:<appsrc0> queue filled
> (655360 >= 655360)
> 0:00:00.128783583 4114 0x139d20 DEBUG appsrc
> gstappsrc.c:1523:gst_app_src_push_buffer_full:<appsrc0> waiting for free
> space
>
> Thank you very much in advance.
> _______________________________________________
> 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/20181213/93727c91/attachment-0001.html>
More information about the gstreamer-devel
mailing list