diff options
author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-04-07 15:22:10 +0300 |
---|---|---|
committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-04-07 15:22:10 +0300 |
commit | dc0ee181d4c56ff66c989bd3292dad7cc35e234b (patch) | |
tree | e8934d4e5e93d60ed957afd0d2b1a6d5319c14ed /src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h | |
parent | fa6c3d653682f9fd331d859c7196a291a8a4d8d5 (diff) | |
parent | 51282e083d7a1c06309cf7f2fc216f6203b4fbb2 (diff) |
Merge remote-tracking branch 'origin/tqtc/lts-5.15.4' into tqtc/lts-5.15-opensourcev5.15.4-lts-lgpl
Change-Id: I6568139d7193f5b04b50f0f31ddff4d9bac8e65a
Diffstat (limited to 'src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h')
-rw-r--r-- | src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h index 99b6bb0b5..c5d7fe66c 100644 --- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h +++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h @@ -45,12 +45,16 @@ #include <QtGui/QOpenGLContext> #include <QtCore/QSize> +#import "Metal/Metal.h" +#import "MetalKit/MetalKit.h" + @class CARenderer; @class AVPlayerLayer; QT_BEGIN_NAMESPACE class QOpenGLFramebufferObject; +class QOpenGLShaderProgram; class QWindow; class QOpenGLContext; class QAbstractVideoSurface; @@ -65,17 +69,52 @@ public: GLuint renderLayerToTexture(AVPlayerLayer *layer); QImage renderLayerToImage(AVPlayerLayer *layer); + static GLuint createGLTexture(CGLContextObj cglContextObj, CGLPixelFormatObj cglPixelFormtObj, + CVOpenGLTextureCacheRef cvglTextureCache, + CVPixelBufferRef cvPixelBufferRef, + CVOpenGLTextureRef cvOpenGLTextureRef); + + static id<MTLTexture> createMetalTexture(id<MTLDevice> mtlDevice, + CVMetalTextureCacheRef cvMetalTextureCacheRef, + CVPixelBufferRef cvPixelBufferRef, + MTLPixelFormat pixelFormat, size_t width, size_t height, + CVMetalTextureRef cvMetalTextureRef); + private: QOpenGLFramebufferObject* initRenderer(AVPlayerLayer *layer); void renderLayerToFBO(AVPlayerLayer *layer, QOpenGLFramebufferObject *fbo); + void renderLayerToFBOCoreOpenGL(AVPlayerLayer *layer, QOpenGLFramebufferObject *fbo); CARenderer *m_videoLayerRenderer; QAbstractVideoSurface *m_surface; QOpenGLFramebufferObject *m_fbo[2]; + QOpenGLShaderProgram *m_shader = nullptr; QWindow *m_offscreenSurface; QOpenGLContext *m_glContext; QSize m_targetSize; + bool m_useCoreProfile = false; + + // Shared pixel buffer + CVPixelBufferRef m_CVPixelBuffer; + + // OpenGL Texture + CVOpenGLTextureCacheRef m_CVGLTextureCache; + CVOpenGLTextureRef m_CVGLTexture; + CGLPixelFormatObj m_CGLPixelFormat; + GLuint m_textureName = 0; + + // Metal Texture + CVMetalTextureRef m_CVMTLTexture; + CVMetalTextureCacheRef m_CVMTLTextureCache; + id<MTLDevice> m_metalDevice = nil; + id<MTLTexture> m_metalTexture = nil; + + NSOpenGLContext *m_NSGLContext = nullptr; + + GLuint m_quadVao = 0; + GLuint m_quadVbos[2]; + uint m_currentBuffer; bool m_isContextShared; }; |