<div dir="ltr">A partial answer to myself:<div><br></div><div>the .wmv media files in question cause decodebin call the callback function twice in quick succession, once for video, once for audio</div><div><br></div><div>I can discriminate between these cases using the following callback:</div><div><br></div><div><div>static void composition_new_pad (GstElement *element, GstPad *pad, gpointer data)  {</div><div>    LOG_INFO("dynamically linking %s to %s...", GST_OBJECT_NAME (element), GST_OBJECT_NAME (data));</div><div>    GstCaps *caps = gst_pad_query_caps (pad, NULL);</div><div>    GstStructure *str = gst_caps_get_structure (caps, 0);</div><div>    gchar const *str_name = gst_structure_get_name (str);</div><div>    if (!g_str_has_prefix (str_name, "video")) {</div><div>        LOG_INFO("non-video pad type: %s, ignoring...", str_name);</div><div><br></div><div>        return;</div><div>    }</div><div>   gst_caps_unref (caps);<br></div><div>    if (gst_pad_is_linked (pad)) {</div><div>        LOG_INFO("already linked!");</div><div>        return;</div><div>    }</div><div>    GstPad *sinkpad =</div><div><span class="" style="white-space:pre">  </span>gst_element_get_compatible_pad ((GstElement*) data, // identity</div><div><span class="" style="white-space:pre">                                    </span>pad,</div><div><span class="" style="white-space:pre">                                       </span>gst_pad_query_caps (pad, NULL)); // struct GstPad</div><div>    if (!sinkpad) {</div><div>        LOG_INFO("empty sinkpad, ignore and return");</div><div><span class="" style="white-space:pre">    </span>//LOG_ERROR("can't create sinkpad on %s", GST_OBJECT_NAME (data));</div><div><span class="" style="white-space:pre">   </span>return;</div><div>    }</div><div>    GstPadLinkReturn pad_link_outcome =  gst_pad_link (pad, sinkpad);</div><div>    if (pad_link_outcome == GST_PAD_LINK_OK)</div><div><span class="" style="white-space:pre">  </span>LOG_INFO("success!");</div><div>    else {</div><div><span class="" style="white-space:pre"> </span>LOG_ERROR("composition_new_pad(): gst_pad_link() failed with code %d",</div><div><span class="" style="white-space:pre">           </span>   pad_link_outcome);</div><div>    }</div><div>    gst_object_unref (sinkpad);</div><div>}</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 22, 2014 at 2:01 PM, Sergei Vorobyov <span dir="ltr"><<a href="mailto:sergei.vorobyov@facilitylabs.com" target="_blank">sergei.vorobyov@facilitylabs.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><span style="font-family:arial,sans-serif">This error</span></div><span class=""><span style="font-family:arial,sans-serif"><div><span style="font-family:arial,sans-serif"><br></span></div>GLib (gthread-p</span><span style="font-family:arial,sans-serif">osix.c): Unexpected error from C library during 'pthread_m</span><span style="font-family:arial,sans-serif">utex_lock'</span><span style="font-family:arial,sans-serif">: Invalid argument. Aborting.</span><br><div><span style="font-family:arial,sans-serif"><br></span></div></span><div><span style="font-family:arial,sans-serif">frequently happens when I am using vaapisink with i964_drv_video.so on Intel built-in graphics of NUC DN2820FYKH</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">but *never* happens if I use ximagesink without video acceleration on NVidia Quadro FX580, without video acceleration (btw, I am missing /usb/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so and cannot find it in any packages).</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">From this I plausibly conclude that my code is innocent.</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Googling for the above error produces many reports, but nothing that makes sense to me.</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">After adding some debugging code I also suspect that the .wmv files may be the issue:</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">1. I am playing different media files through the same pipeline by varying different location=.... for the filesrc element</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">2. I am dynamically linking decodebin with identity, using g_signal_connect.</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">3. For that purpose I g_signal_connect decodebin on "pad-added" with a callback that is usually called ONCE per .avi files, </span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">4. but TWICE in a very quick succession (a few milliseconds) on .wmv files. The first call returns a non-NULL sinkpad = gst_get_compatible_pad (identity, ...), which I link with the source pad of decodebin. The second call is problematic, it returns NULL==gst_get_compatible_pad (identity, ....). I can do nothing but ignore/return for that second call. The pipe plays invariably OK on NVidia without video acceleration but frequently breaks on </span><span style="font-family:arial,sans-serif"> </span><span style="font-family:arial,sans-serif">i964_drv_video.so</span><span style="font-family:arial,sans-serif"> with video acceleration and vaapisink</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">5. Remark: I do not play sound, just images and video. I just relink the pipe (in C) between</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">filesrc ! decodebin ! identity ! imagefreeze ! videoconvert ! <videosink> for still images and</span></div><div><span style="font-family:arial,sans-serif">filesrc ! decodebin ! identity ! videoconvert ! <videosink> for movies</span><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Maybe this explains everything to you?</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif"> </span></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Sep 21, 2014 at 3:40 PM, Tim Müller <span dir="ltr"><<a href="mailto:tim@centricular.com" target="_blank">tim@centricular.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, 2014-09-19 at 14:08 +0200, Sergei Vorobyov wrote:<br>
<br>
Hi,<br>
<span><br>
> GStreamer 1.2.4 and GLib v2.40.0<br>
> I recently started to systematically get the following error:<br>
<br>
> GLib (gthread-posix.c): Unexpected error from C library during<br>
> 'pthread_mutex_lock': Invalid argument.  Aborting.<br>
><br>
><br>
> [I preliminary guess it started when I switched from ximagesink to<br>
> vaapisink,<br>
> but this remains to be investigated]<br>
><br>
><br>
> That does not come from my code and looks like a programming error.<br>
> Sure I use a few threads, but those are initialized in the very<br>
> beginning and run as infinite loops, nothing fancy.<br>
<br>
</span>How do you know it's not from your code? It may be unlikely, but it<br>
could also be some memory corruption caused by your code.<br>
<span><br>
> Apparently, it's a long-standing issue. There are many reports, but<br>
> they don't explain nor fix the issue.<br>
<br>
</span>It's the first time I hear about it. Many reports where? Is there a<br>
report in bugzilla? If not, please file one, ideally with a stack trace<br>
and if available also valgrind output (after installing libc, glib and<br>
gst debugging symbols).<br>
<br>
Cheers<br>
<span><font color="#888888"> -Tim<br>
<br>
--<br>
Tim Müller, Centricular Ltd - <a href="http://www.centricular.com" target="_blank">http://www.centricular.com</a><br>
</font></span><div><div><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>