Zero copy omxh264dec to EGLImage
Zevv Glass
gst at zevv.nl
Wed Oct 3 17:11:20 UTC 2018
Hi Nicolas, thanks for taking the time to help me out here.
Quoting Nicolas Dufresne (2018-10-03 18:51:48)
> Yes, they are textures bind to an EGLImage already. I suspect glupload
> offers an EGL pool to the decoder (which you would have to do in
> appsink if you removed glupload)
That much I figured, and as far as I can tell this it not trivial - so I
was hoping to rely on glupload to handle the gritty details for me.
> and hopefully just pass-through that buffer/memory. You can try and
> use:
>
> #include <gst/gl/egl/gstglmemoryegl.h>
>
> You need to check if the memory->allocator is EGL memory allocator,
The EGL allocater is indeed being used.
This is what I have now to find the texture name in the new-sample handler
(error handling omitted):
static GstFlowReturn on_new_sample(GstElement *sink, void *_)
{
GstVideoInfo video_info;
GstVideoFrame frame;
GstSample *sample = gst_app_sink_pull_sample((GstAppSink*)mVideoSink)
GstCaps *caps = gst_sample_get_caps(sample);
gst_video_info_from_caps(&video_info, caps);
GstBuffer *buffer = gst_sample_get_buffer(sample);
GstMapFlags map_flags = (GstMapFlags)(GST_MAP_READ|GST_MAP_GL);
gst_video_frame_map(&frame, &video_info, buffer, map_flags);
GLuint texid = *((unsigned int*) GST_VIDEO_FRAME_PLANE_DATA(&frame, 0));
...
}
I'm not sure how I would access the underlying EGL image from the
above code, though.
(I also assume the underlying EGL image is reused or destroyed after the
callback finishes, so I will have to take care how I will use these from
the other thread context - but these are problems for later.)
> This is all ultra specific to RPi.
I understood that much, there's quite a lot of #ifdefs in the code with
raspberry specifics.
Thanks,
Zevv
More information about the gstreamer-devel
mailing list