MythTV master
mythvaapidrminterop.h
Go to the documentation of this file.
1#ifndef MYTHVAAPIDRMINTEROP_H
2#define MYTHVAAPIDRMINTEROP_H
3
4// MythTV
5#include "libmythbase/mythconfig.h"
8
9#if CONFIG_DRM_VIDEO
10#include "drm/mythvideodrm.h"
11#endif
12
14struct AVDRMFrameDescriptor;
15
17{
18 public:
20 ~MythVAAPIInteropDRM() override;
21 std::vector<MythVideoTextureOpenGL*>
23 MythVideoColourSpace* ColourSpace,
24 MythVideoFrame* Frame, FrameScanType Scan) override;
25 static bool IsSupported(MythRenderOpenGL* Context);
26 void DeleteTextures() override;
27
28 protected:
29 void DestroyDeinterlacer() override;
30 void PostInitDeinterlacer() override;
31
32 private:
33 static VideoFrameType VATypeToMythType(uint32_t Fourcc);
35 void RotateReferenceFrames(AVBufferRef* Buffer);
36 std::vector<MythVideoTextureOpenGL*> GetReferenceFrames();
37
38 private:
39 QFile m_drmFile;
40 QVector<AVBufferRef*> m_referenceFrames;
41
42 std::vector<MythVideoTextureOpenGL*>
43 AcquireVAAPI(VASurfaceID Id, MythRenderOpenGL* Context,
45 std::vector<MythVideoTextureOpenGL*>
46 AcquirePrime(VASurfaceID Id, MythRenderOpenGL* Context,
48
49 AVDRMFrameDescriptor* GetDRMFrameDescriptor(VASurfaceID Id);
50 void CleanupDRMPRIME();
51 bool TestPrimeInterop();
52 bool m_usePrime { false };
53 QHash<unsigned long long, AVDRMFrameDescriptor*> m_drmFrames;
54
55#if CONFIG_DRM_VIDEO
56 bool HandleDRMVideo(MythVideoColourSpace* ColourSpace, VASurfaceID Id, MythVideoFrame* Frame);
57 MythVideoDRM* m_drm { nullptr };
58 bool m_drmTriedAndFailed { false };
59#endif
60};
61
62#endif
static VideoFrameType VATypeToMythType(uint32_t Fourcc)
void PostInitDeinterlacer() override
void RotateReferenceFrames(AVBufferRef *Buffer)
void DeleteTextures() override
static bool IsSupported(MythRenderOpenGL *Context)
QHash< unsigned long long, AVDRMFrameDescriptor * > m_drmFrames
AVDRMFrameDescriptor * GetDRMFrameDescriptor(VASurfaceID Id)
QVector< AVBufferRef * > m_referenceFrames
std::vector< MythVideoTextureOpenGL * > GetReferenceFrames()
std::vector< MythVideoTextureOpenGL * > AcquireVAAPI(VASurfaceID Id, MythRenderOpenGL *Context, MythVideoFrame *Frame)
MythVAAPIInteropDRM(MythPlayerUI *Player, MythRenderOpenGL *Context, InteropType Type)
void DestroyDeinterlacer() override
std::vector< MythVideoTextureOpenGL * > Acquire(MythRenderOpenGL *Context, MythVideoColourSpace *ColourSpace, MythVideoFrame *Frame, FrameScanType Scan) override
std::vector< MythVideoTextureOpenGL * > AcquirePrime(VASurfaceID Id, MythRenderOpenGL *Context, MythVideoFrame *Frame)
Export the given VideoFrame as a DRM PRIME descriptor.
MythVideoColourSpace contains a QMatrix4x4 that can convert YCbCr data to RGB.
VideoFrameType
Definition: mythframe.h:20
FrameScanType
Definition: videoouttypes.h:95