Unable to get the sample from Appsink using C++

Jan Schmidt jan at widgetgrove.com.au
Fri Aug 21 16:10:17 UTC 2020


On 22/8/20 2:07 am, RK29 wrote:
> I followed your example now I am getting Exception thrown at
> 0x000000006DC5459D (libgstreamer-1.0-0.dll) in bmpTest.exe: 0xC0000005:
> Access violation reading location 0xFFFFFFFFFFFFFFFF.
>
> when I do gst_bin_add_many(

The last parameter of gst_bin_add_many() must always be an extra NULL, to mark the end of the parameter list.
The same goes for gst_element_link_many()

- Jan.

>
>
> static void
> on_incoming_decodebin_stream (GstElement * decodebin, GstPad * pad,
>                               GstElement * pipe)
> {
>     GstCaps *caps;
>     const gchar *name;
>
>     if (!gst_pad_has_current_caps (pad)) {
>         g_printerr ("Pad '%s' has no caps, can't do anything, ignoring\n",
>                     GST_PAD_NAME (pad));
>         return;
>     }
>
>     caps = gst_pad_get_current_caps (pad);
>     name = gst_structure_get_name (gst_caps_get_structure (caps, 0));
>
>     if (g_str_has_prefix (name, "video")) {
>        // handle_media_stream (pad, pipe, "videoconvert", "autovideosink");
>         // Create our user data
>         UserData* user_data = new UserData();
>         user_data->pipeline = pipe;
>         GstElement* queue = gst_element_factory_make("queue", "dasQueue");
>         GstElement* videoconvert = gst_element_factory_make("videoconvert",
> "dasvideoconvert");
>         GstElement* videoscale = gst_element_factory_make("videoscale",
> "dasvideoscale");
>         GstCaps* caps = gst_caps_from_string("video/x-raw,format=BGR, width=
> 1280, height=720");
>         GstElement* appSink = gst_element_factory_make("appsink",
> "dasCapAppSink");
>
>         // Set all the callbacks
>         gst_app_sink_set_emit_signals((GstAppSink*)appSink, true);
>         gst_app_sink_set_drop((GstAppSink*)appSink, true);
>         gst_app_sink_set_max_buffers((GstAppSink*)appSink, 3);				// Limit
> the number of buffers the appsink can store if we don't take anything from
> it
>         GstAppSinkCallbacks callbacks = { NULL, NULL, new_sample1 };	
> // These are the functions called when we get a new preroll (new_preroll)
> and a new buffer/image (new_sample)
>         gst_app_sink_set_callbacks(GST_APP_SINK(appSink), &callbacks,
> user_data, NULL); // 'data' is just some user data sent to the callback so
> you can update your own data, if needed
>
>         // Add everything to the pipeline
>         gst_bin_add_many(GST_BIN(user_data->pipeline), queue, videoconvert,
> videoscale,caps, appSink);
>
>
>
>
>        // handle_media_stream(pad, pipe, "videoconvert", "appsink");
>     } else if (g_str_has_prefix (name, "audio")) {
>        // handle_media_stream (pad, pipe, "audioconvert", "autoaudiosink");
>     } else {
>         g_printerr ("Unknown pad %s, ignoring", GST_PAD_NAME (pad));
>     }
>
> }
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


More information about the gstreamer-devel mailing list