BadShmSeg when adding textoverlay dynamically
Tim Müller
tim at centricular.com
Fri Nov 14 13:00:38 PST 2014
On Fri, 2014-11-14 at 21:46 +0100, Francisco Velázquez wrote:
Hi Francisco,
I have not tried running your code, just some observations:
a) there's no need to remove the videosink and then to re-add it again
right after. It shouldn't *hurt* either of course, but it's a bit weird.
b) you should set the state from sink to source, so try setting the sink
to playing state first, then the text overlay in your callback.
c) why not just leave the textoverlay in the pipeline at all times? You
can just put it into do-nothing passthrough mode with
g_object_set (textoverlay, "silent", TRUE, NULL);
Much easier than adding/removing it while the pipeline is running. Not
that that shouldn't work as well of course.
Cheers
-Tim
> Dear GStreamer community,
>
> I'm trying to add a text overlay on-the-fly but I am getting BadShmSeg error. The most simple pipeline to reproduce this error changes from:
>
> videotestsrc ! ximagesink
>
> to:
>
> videotestsrc ! textoverlay text="Hello World!" ! imagesink.
>
> The code is:
> ---------------------------
>
> #include <gst/gst.h>
>
> static GstPad *videosrc_blockpad;
> static GstElement *videosrc, *videosink, *pipeline, *textoverlay;
>
> static GstPadProbeReturn pad_probe_videosrc_cb(GstPad * videosrc_pad, GstPadProbeInfo * info, gpointer user_data){
>
> /* unlink videotestsrc from ximagesink */
> gst_element_set_state(videosink, GST_STATE_NULL);
> gst_bin_remove(GST_BIN(pipeline), videosink);
>
> /* adding the textoverlay */
> textoverlay = gst_element_factory_make("textoverlay", NULL);
> g_object_set(G_OBJECT (textoverlay), "text", "Hello World!", NULL);
> gst_bin_add_many(GST_BIN(pipeline), textoverlay, videosink, NULL);
>
> /* inserting the text overlay */
> gst_element_link_many(videosrc, textoverlay, videosink, NULL);
>
> /* I might need to setup a GST_STATE_PLAYING again. */
> gst_element_set_state(textoverlay, GST_STATE_PLAYING);
> gst_element_set_state(videosink, GST_STATE_PLAYING);
>
> gst_debug_set_threshold_from_string ("*:5", TRUE);
>
> return GST_PAD_PROBE_REMOVE;
> }
>
> static gboolean timeout_cb (gpointer user_data){
>
> gst_pad_add_probe (videosrc_blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, pad_probe_videosrc_cb, user_data, NULL);
> return FALSE;
> }
>
> int main (int argc, char **argv){
> GMainLoop *loop;
>
> /* init GStreamer */
> gst_init (&argc, &argv);
> loop = g_main_loop_new (NULL, FALSE);
>
> videosrc = gst_element_factory_make("videotestsrc", NULL);
> videosrc_blockpad = gst_element_get_static_pad(videosrc, "src");
>
> videosink = gst_element_factory_make("ximagesink", NULL);
>
> pipeline = gst_pipeline_new("pipeline");
>
> gst_bin_add_many(GST_BIN(pipeline), videosrc, videosink, NULL);
>
> gst_element_link_many(videosrc, videosink, NULL);
>
> gst_element_set_state(pipeline, GST_STATE_PLAYING);
>
> g_timeout_add_seconds (5, timeout_cb, loop);
>
> g_main_loop_run (loop);
>
> gst_element_set_state (pipeline, GST_STATE_NULL);
>
> gst_object_unref (pipeline);
>
> return 0;
> }
> —————————
>
> The error log:
>
> ….
>
> 0:00:06.233014000 [332m43633[00m 0x1020ea230 [37mDEBUG [00m [00m videosink gstvideosink.c:117:void gst_video_sink_center_rect(GstVideoRectangle, GstVideoRectangle, GstVideoRectangle *, gboolean):[00m source is 320x240 dest is 320x240, result is 320x240 with x,y 0x0
> X Error of failed request: BadShmSeg (invalid shared segment parameter)
> Major opcode of failed request: 132 (MIT-SHM)
> Minor opcode of failed request: 3 (X_ShmPutImage)
> Segment id in failed request: 0x600003
> Serial number of failed request: 41
> Current serial number in output stream: 42
> Program ended with exit code: 1
> ———————————————————————————————————————————
>
> Can somebody help me to find out what I'm doing wrong?
>
> Thank you!
>
> Francisco
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
--
Tim Müller, Centricular Ltd - http://www.centricular.com
More information about the gstreamer-devel
mailing list