MythTV master
mythvaapiinterop.h
Go to the documentation of this file.
1#ifndef MYTHVAAPIINTEROP_H
2#define MYTHVAAPIINTEROP_H
3
4// Qt
5#include <QFile>
6
7// MythTV
8#include "mythopenglinterop.h"
9
10struct AVFilterGraph;
11struct AVFilterContext;
12
13// VAAPI
14#include <va/va.h>
15
16#ifndef VA_FOURCC_I420
17#define VA_FOURCC_I420 0x30323449
18#endif
19
20#define INIT_ST \
21 VAStatus va_status; \
22 bool ok = true
23
24#define CHECK_ST \
25 ok &= (va_status == VA_STATUS_SUCCESS); \
26 if (!ok) \
27 LOG(VB_GENERAL, LOG_ERR, LOC + QString("Error at %1:%2 (#%3, %4)") \
28 .arg(__FILE__).arg( __LINE__).arg(va_status) \
29 .arg(vaErrorStr(va_status)))
30
32{
33 public:
34 static void GetVAAPITypes(MythRenderOpenGL* Context, MythInteropGPU::InteropMap& Types);
36
37 VASurfaceID VerifySurface(MythRenderOpenGL *Context, MythVideoFrame *Frame);
38 VADisplay GetDisplay (void);
39 QString GetVendor (void);
40
41 static bool SetupDeinterlacer (MythDeintType Deinterlacer, bool DoubleRate,
42 AVBufferRef *FramesContext, int Width, int Height,
43 AVFilterGraph *&Graph, AVFilterContext *&Source,
44 AVFilterContext *&Sink);
45
46 protected:
48 ~MythVAAPIInterop() override;
49
50 void InitaliseDisplay (void);
51 VASurfaceID Deinterlace (MythVideoFrame *Frame, VASurfaceID Current, FrameScanType Scan);
52 virtual void DestroyDeinterlacer (void);
53 virtual void PostInitDeinterlacer(void) { }
54
55 protected:
56 VADisplay m_vaDisplay { nullptr };
57 QString m_vaVendor;
58
60 bool m_deinterlacer2x { false };
61 bool m_firstField { true };
62 AVBufferRef* m_vppFramesContext { nullptr };
63 AVFilterContext* m_filterSink { nullptr };
64 AVFilterContext* m_filterSource { nullptr };
65 AVFilterGraph* m_filterGraph { nullptr };
66 bool m_filterError { false };
67 int m_filterWidth { 0 };
68 int m_filterHeight { 0 };
69 VASurfaceID m_lastFilteredFrame { 0 };
71};
72
73#endif
std::map< VideoFrameType, InteropTypes > InteropMap
virtual void DestroyDeinterlacer(void)
AVBufferRef * m_vppFramesContext
static bool SetupDeinterlacer(MythDeintType Deinterlacer, bool DoubleRate, AVBufferRef *FramesContext, int Width, int Height, AVFilterGraph *&Graph, AVFilterContext *&Source, AVFilterContext *&Sink)
void InitaliseDisplay(void)
~MythVAAPIInterop() override
VASurfaceID m_lastFilteredFrame
QString GetVendor(void)
virtual void PostInitDeinterlacer(void)
static void GetVAAPITypes(MythRenderOpenGL *Context, MythInteropGPU::InteropMap &Types)
Return a list of interops that are supported by the current render device.
MythDeintType m_deinterlacer
AVFilterGraph * m_filterGraph
static MythVAAPIInterop * CreateVAAPI(MythPlayerUI *Player, MythRenderOpenGL *Context)
AVFilterContext * m_filterSource
VASurfaceID VerifySurface(MythRenderOpenGL *Context, MythVideoFrame *Frame)
uint64_t m_lastFilteredFrameCount
VASurfaceID Deinterlace(MythVideoFrame *Frame, VASurfaceID Current, FrameScanType Scan)
AVFilterContext * m_filterSink
MythVAAPIInterop(MythPlayerUI *Player, MythRenderOpenGL *Context, InteropType Type)
VADisplay GetDisplay(void)
MythDeintType
Definition: mythframe.h:67
@ DEINT_NONE
Definition: mythframe.h:68
FrameScanType
Definition: videoouttypes.h:95