<div dir="ltr">Attaching screenshot of pushFrame function, the code looks distorted.<div><img src="cid:ii_krxmmazr0" alt="image.png" width="472" height="354"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 4, 2021 at 7:04 PM Lusine Hayrapetyan <<a href="mailto:lusinehayrapetyan1992@gmail.com">lusinehayrapetyan1992@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Folks,<div>I'm struggling with the following issue and can't understand what I'm doing wrong.</div><div>I need to pass opengl texture to the gstreamer pipeline.</div><div>I have a rendering thread where I create opengl texture, the following objects created in this thread:</div><div><i>EGLDisplay display;</i></div><div><i>EGLContext context;</i><br></div><div><i><br></i></div><div>I create gstreamer pipeline in the main thread and as described in the following article sharing an X11 display and GstGLContext with the bus callback.</div><div><a href="http://ystreet00.blogspot.com/2015/09/gstreamer-16-and-opengl-contexts.html" target="_blank">http://ystreet00.blogspot.com/2015/09/gstreamer-16-and-opengl-contexts.html</a><br></div><div><br></div><div>GstGLDisplayEGL and GstGLContext are created in this way:</div><div><i>GstGLDisplayEGL* gst_display = gst_gl_display_egl_new_with_egl_display (display);<br></i></div><div><i>GstGLContext *gl_context =<br>      gst_gl_context_new_wrapped (GST_GL_DISPLAY (gst_display),<br>      (guintptr) context, GST_GL_PLATFORM_EGL, GST_GL_API_GLES2);</i><br></div><div><br></div><div>The first element of my pipeline is appsrc:</div><div><i>appsrc stream-type=0 emit-signals=1 format=3  caps=video/x-raw(memory:GLMemory),  width=300, height=300, framerate=(fraction)20/1, format=(string)RGBA ! gldownload ! ...</i><br></div><div></div><div><br></div><div>I use need-data callback to create a buffer from texture_id and and push it in the appsrc:</div><div><i>g_signal_connect (state->appsrc, "need-data", G_CALLBACK (</i>

pushFrame <i>), state);</i></div><div><i><br></i></div><div><i>bool pushFrame()</i><br></div><div><i>{<br>     // Wrap the texture into GstGLMemory<br>    GstVideoInfo vinfo;<br>    gst_video_info_set_format(&vinfo, GST_VIDEO_FORMAT_RGBA, 300, 300);<br><br>    GstAllocator* allocator = GST_ALLOCATOR(gst_gl_memory_allocator_get_default(gl_context));<br><br>    GstGLVideoAllocationParams* params = gst_gl_video_allocation_params_new_wrapped_texture(<br>       state->gl_context, NULL, &vinfo, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA, </i>

texture_id  <i>,<br>      NULL, 0);<br><br>    // The following line produces an error!!!<br>    GstGLMemory* glMemory = GST_GL_MEMORY_CAST(gst_gl_base_memory_alloc(<br>      GST_GL_BASE_MEMORY_ALLOCATOR_CAST(allocator), (GstGLAllocationParams*) params));<br><br>    gst_gl_allocation_params_free((GstGLAllocationParams *)params);<br>    gst_object_unref(allocator);<br><br>    // Attach GstGLMemory object into buffer, timestamp the buffer and push it downstream<br>    GstBuffer* buffer = gst_buffer_new();<br>    gst_buffer_append_memory(buffer, GST_MEMORY_CAST(glMemory));<br><br>    // Put timestamps into buffer<br>    GST_BUFFER_PTS (buffer) = timestamp;<br>    GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);<br><br>    timestamp += GST_BUFFER_DURATION (buffer);<br>    GstFlowReturn ret;<br>    g_signal_emit_by_name(state->appsrc, "push-buffer", buffer, &ret);<br><br>    if (ret != GST_FLOW_OK)<br>    {<br>        // Something wrong, stop pushing.<br>        g_printerr("Something went wrong: Pushing buffer into appsrc is stopped.\n");<br>        return false;<br>    }<br><br>    return true;<br>}<br></i></div><div><br></div><div>pushFrame produces the following error:</div><div><font color="#ff0000">gst_gl_context_thread_add: assertion 'context->priv->active_thread == g_thread_self ()' failIed<br></font></div><div><font color="#ff0000"><br></font></div><div><font color="#000000">What am I doing wrong or how can push gpu texture to gstreamer?</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">Thanks,</font></div><div><font color="#000000">Lusine</font></div><div><font color="#000000"><br></font></div></div>
</blockquote></div>