MythTV  master
mythvaapidrminterop.h
Go to the documentation of this file.
1 #ifndef MYTHVAAPIDRMINTEROP_H
2 #define MYTHVAAPIDRMINTEROP_H
3 
4 // MythTV
5 #include "opengl/mythegldmabuf.h"
7 
8 #ifdef USING_DRM_VIDEO
9 #include "drm/mythvideodrm.h"
10 #endif
11 
13 struct AVDRMFrameDescriptor;
14 
16 {
17  public:
19  ~MythVAAPIInteropDRM() override;
20  std::vector<MythVideoTextureOpenGL*>
21  Acquire(MythRenderOpenGL* Context,
22  MythVideoColourSpace* ColourSpace,
23  MythVideoFrame* Frame, FrameScanType Scan) override;
24  static bool IsSupported(MythRenderOpenGL* Context);
25  void DeleteTextures() override;
26 
27  protected:
28  void DestroyDeinterlacer() override;
29  void PostInitDeinterlacer() override;
30 
31  private:
32  static VideoFrameType VATypeToMythType(uint32_t Fourcc);
34  void RotateReferenceFrames(AVBufferRef* Buffer);
35  std::vector<MythVideoTextureOpenGL*> GetReferenceFrames();
36 
37  private:
38  QFile m_drmFile;
39  QVector<AVBufferRef*> m_referenceFrames;
40 
41  std::vector<MythVideoTextureOpenGL*>
42  AcquireVAAPI(VASurfaceID Id, MythRenderOpenGL* Context,
44  std::vector<MythVideoTextureOpenGL*>
45  AcquirePrime(VASurfaceID Id, MythRenderOpenGL* Context,
47 
48  AVDRMFrameDescriptor* GetDRMFrameDescriptor(VASurfaceID Id);
49  void CleanupDRMPRIME();
50  bool TestPrimeInterop();
51  bool m_usePrime { false };
52  QHash<unsigned long long, AVDRMFrameDescriptor*> m_drmFrames;
53 
54 #ifdef USING_DRM_VIDEO
55  bool HandleDRMVideo(MythVideoColourSpace* ColourSpace, VASurfaceID Id, MythVideoFrame* Frame);
56  MythVideoDRM* m_drm { nullptr };
57  bool m_drmTriedAndFailed { false };
58 #endif
59 };
60 
61 #endif
mythvaapiinterop.h
MythVAAPIInteropDRM::VATypeToMythType
static VideoFrameType VATypeToMythType(uint32_t Fourcc)
Definition: mythvaapidrminterop.cpp:353
MythDRMPRIMEInterop
Definition: mythdrmprimeinterop.h:14
MythVAAPIInteropDRM::PostInitDeinterlacer
void PostInitDeinterlacer() override
Definition: mythvaapidrminterop.cpp:101
Frame
Definition: zmdefines.h:93
FrameScanType
FrameScanType
Definition: videoouttypes.h:94
MythVAAPIInteropDRM::GetDRMFrameDescriptor
AVDRMFrameDescriptor * GetDRMFrameDescriptor(VASurfaceID Id)
Definition: mythvaapidrminterop.cpp:426
MythEGLDMABUF
Definition: mythegldmabuf.h:15
mythvideodrm.h
MythVAAPIInteropDRM::DestroyDeinterlacer
void DestroyDeinterlacer() override
Definition: mythvaapidrminterop.cpp:90
mythegldmabuf.h
MythVAAPIInterop
Definition: mythvaapiinterop.h:48
MythPlayerUI
Definition: mythplayerui.h:10
MythVAAPIInteropDRM::m_drmFile
QFile m_drmFile
Definition: mythvaapidrminterop.h:38
MythVAAPIInteropDRM::m_referenceFrames
QVector< AVBufferRef * > m_referenceFrames
Definition: mythvaapidrminterop.h:39
MythVAAPIInteropDRM::TestPrimeInterop
bool TestPrimeInterop()
Definition: mythvaapidrminterop.cpp:460
MythVAAPIInteropDRM::DeleteTextures
void DeleteTextures() override
Definition: mythvaapidrminterop.cpp:63
MythVideoDRM
Definition: mythvideodrm.h:14
MythVAAPIInteropDRM::m_drmFrames
QHash< unsigned long long, AVDRMFrameDescriptor * > m_drmFrames
Definition: mythvaapidrminterop.h:52
MythVAAPIInteropDRM::CleanupDRMPRIME
void CleanupDRMPRIME()
Definition: mythvaapidrminterop.cpp:445
MythVAAPIInteropDRM::~MythVAAPIInteropDRM
~MythVAAPIInteropDRM() override
Definition: mythvaapidrminterop.cpp:49
MythRenderOpenGL
Definition: mythrenderopengl.h:96
MythVAAPIInteropDRM::CleanupReferenceFrames
void CleanupReferenceFrames()
Definition: mythvaapidrminterop.cpp:109
Buffer
Definition: MythExternControl.h:36
MythVAAPIInteropDRM::IsSupported
static bool IsSupported(MythRenderOpenGL *Context)
Definition: mythvaapidrminterop.cpp:374
MythVAAPIInteropDRM::m_usePrime
bool m_usePrime
Definition: mythvaapidrminterop.h:51
MythVAAPIInteropDRM::AcquirePrime
std::vector< MythVideoTextureOpenGL * > AcquirePrime(VASurfaceID Id, MythRenderOpenGL *Context, MythVideoFrame *Frame)
Export the given VideoFrame as a DRM PRIME descriptor.
Definition: mythvaapidrminterop.cpp:410
MythVAAPIInteropDRM::AcquireVAAPI
std::vector< MythVideoTextureOpenGL * > AcquireVAAPI(VASurfaceID Id, MythRenderOpenGL *Context, MythVideoFrame *Frame)
Definition: mythvaapidrminterop.cpp:286
MythVAAPIInteropDRM::RotateReferenceFrames
void RotateReferenceFrames(AVBufferRef *Buffer)
Definition: mythvaapidrminterop.cpp:118
MythVAAPIInteropDRM::Acquire
std::vector< MythVideoTextureOpenGL * > Acquire(MythRenderOpenGL *Context, MythVideoColourSpace *ColourSpace, MythVideoFrame *Frame, FrameScanType Scan) override
Definition: mythvaapidrminterop.cpp:166
VideoFrameType
VideoFrameType
Definition: mythframe.h:20
Player
Definition: zmliveplayer.h:34
MythVideoFrame
Definition: mythframe.h:88
MythInteropGPU::InteropType
InteropType
Definition: mythinteropgpu.h:25
MythVAAPIInteropDRM::MythVAAPIInteropDRM
MythVAAPIInteropDRM(MythPlayerUI *Player, MythRenderOpenGL *Context, InteropType Type)
Definition: mythvaapidrminterop.cpp:17
MythVideoColourSpace
MythVideoColourSpace contains a QMatrix4x4 that can convert YCbCr data to RGB.
Definition: mythvideocolourspace.h:18
MythVAAPIInteropDRM
Definition: mythvaapidrminterop.h:15
MythVAAPIInteropDRM::GetReferenceFrames
std::vector< MythVideoTextureOpenGL * > GetReferenceFrames()
Definition: mythvaapidrminterop.cpp:141