gst-gl-plugin: texture share problem and customized GstGLContext/Window

Matthew Waters ystreet00 at gmail.com
Tue Mar 4 01:41:02 PST 2014


On 04/03/14 12:35, comicfans44 wrote:
> Hi
>
> Matthew Waters <ystreet00 at gmail.com> wrote:
>
>>> 1 :  in Qt GL callback,  use glXGetCurrentContext get current GL
>>> context ,  I don't know how to get  x11 Display*  from Qt so I
>>> use XOpenDisplay(getenv("DISPLAY")) to open One
>> Another option is to create your display normally and then pass that
>> into gst-gl using the GstContext query.
>>
>>> 3:  pass the GstGLContextGLX*  to a   global variable ,  hack
>>> gst_gl_context_glx_create_context  to use this variable (which will
>>> run the share context code path) .    I didn't know how to do this
>>> step through gst-gl public API , since  GstGLImageSink always call
>>> gst_gl_context_create  with shared context=0 . GstGLFilter has
>>> other-context property but I did not always have a GstGLFilter all
>>> the time.
>> Hmm, it should be possible to add that property to glimagesink, the
>> workaround, as you suggested, is to use some GstGLFilter subclass
>> (glcolorscale or gleffects with effect property set to 0).  Also, you
>> should use gst_gl_context_new_wrapped to wrap an existing GL context.
>>
> Thanks for advising, but  I'm afraid this also suffered
> from the random lock problem, since its also goes through the
> context share code path .I'll try this and report later.
>
>>> plus , I found that if I draw the  result texture in both
>>> thread , more random locks.(I wait Qt GL draw completed then draw
>>> it in clientDrawCallback,so texture is not used at the same time.
>>> at least at my opengl code level)
>>>
>>> so , I wonder if this is a problem in my misused code , or a bug in
>>> driver?
>> Sounds like a driver bug to me.  Unfortunately I do not have any
>> radeon GPU's to test with.  You could alternatively try with the mesa
>> stack (which AMD is contributing to)
>>
> unfortunately , I tried the mesa but when running program, stdout gives
> radeon: The kernel rejected CS, see dmesg for more information.
> dmesg shows:[drm:radeon_cs_parser_relocs] *ERROR* gem object lookup
> failed 0x39 [drm:radeon_cs_ioctl] *ERROR* Failed to parse relocation -2!
> seems that mesa or kernel has some problem. plus draw performance of
> mesa not satisfied my requirement.

:(. That sounds like the contexts aren't being shared properly, or a 
driver bug.

>>> I can receive gl texture ,but
>>> the texture id always increases in every buffer receive (seems
>>> texture never freed ), instead of two id swapping as glimagesink, I
>>> don't know which part of code does the trick  ?
>> Bufferpools allow the reuse of GstBuffer's.  And GstBuffer's contain
>> GstMemory's and there's a GstGLMemory which holds a GL texture.
>> Although that *should* already be used.
>>
> I tried a pipeline like   videotestsrc -> glfilterblur ->myappsink ,I
> found the BufferPool usage in glfilter ,but I still found texture not
> freed. plus there is comment in glfilter.c :790
>
>    /* we need at least 2 buffer because we hold on to the last one */
>    gst_query_add_allocation_pool (query, pool, size, 1, 0);    -->1 or 2?
>
> but in gstglimagesink.c:919
>
>    /* we need at least 2 buffer because we hold on to the last one */
>    gst_query_add_allocation_pool (query, pool, size, 2, 0);
>
> why this difference? I also tried to change glfilter argument to 2 but
> texture still not freed.  override appsink's
> propose_allocation and do as glimagesink, still no luck

The filter comment is wrong, it only needs one.  glimagesink needs 2 
because it (GstVideoSink) holds onto the last buffer for redisplay.

>>> can somebody provide some suggestions? if sharing texture between
>>> thread (option A) is not stable, should we provide a easier way to
>>> use custom GstGLContext/GstGLWindow (option B) ?  or how to use
>>> appsink (option C)to receive buffer and correctly release it ?
>>> Thanks
>>>
>>>
>>>
>> It would be stupendous if you could file a bug here
>> https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer against
>> gst-plugins-gl with the example program/s.
> OK, I'll clean my code and post it , Great thanks for suggestion.
>

Awesome, thanks.


More information about the gstreamer-devel mailing list