Hi,
Once the video frames have been decoded I want to map them on a model. With openGL it is easy to use the video frames as texture and glimagesink has a “client-draw” signal that I can use to trigger the mapping callback. So my usecase was :
gst-launch-1.0 filesrc location=<my_file.mp4> ! qtdemux ! h264parse ! omxh264dec ! glimagesink but performances were not so good (the FPS decreases after the glcolorconvert element in glimagesink).
nvvidconv and nvegltransform solve the problem of color conversion but I still need something to modify the video frames. I don’t know if I can use nveglglessink for that purpose.
In “Pad Templates” section there is “video/x-raw(memory:EGLImage)”, does it mean that glimagesink should support GstEGLImageMemory ? Here is the output of gst-inspect-1.0 glimagesink :
root@tegra-ubuntu:~# /opt/gstreamer/bin/gst-inspect-1.0 glimagesink
Factory Details:
Rank secondary (128)
Long-name GL Sink Bin
Klass Sink/Video
Description Infrastructure to process GL textures
Author Matthew Waters <matthew@centricular.com>
Plugin Details:
Name opengl
Description OpenGL plugin
Filename /opt/gstreamer/lib/aarch64-linux-gnu/gstreamer-1.0/libgstopengl.so
Version 1.8.3
License LGPL
Source module gst-plugins-bad
Source release date 2016-08-19
Binary package GStreamer Bad Plug-ins source release
Origin URL Unknown package origin
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBin
+----GstGLSinkBin
+----GstGLImageSinkBin
Implemented Interfaces:
GstChildProxy
GstVideoOverlay
GstNavigation
GstColorBalance
Pad Templates:
SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition)
format: { RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition)
format: RGBA
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition)
format: { RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition)
format: RGBA
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(memory:GLMemory)
format: { RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(memory:EGLImage)
format: RGBA
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw
format: { RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(meta:GstVideoGLTextureUploadMeta)
format: RGBA
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]