mirror of
https://github.com/moonlight-stream/moonlight-qt
synced 2024-12-15 05:42:28 +00:00
60 lines
2.2 KiB
C++
60 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "renderer.h"
|
|
|
|
extern "C" {
|
|
#include <vdpau/vdpau.h>
|
|
#include <vdpau/vdpau_x11.h>
|
|
#include <libavutil/hwcontext_vdpau.h>
|
|
}
|
|
|
|
class VDPAURenderer : public IFFmpegRenderer
|
|
{
|
|
public:
|
|
VDPAURenderer();
|
|
virtual ~VDPAURenderer() override;
|
|
virtual bool initialize(PDECODER_PARAMETERS params) override;
|
|
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override;
|
|
virtual void renderFrame(AVFrame* frame) override;
|
|
virtual bool needsTestFrame() override;
|
|
virtual int getDecoderColorspace() override;
|
|
|
|
private:
|
|
uint32_t m_VideoWidth, m_VideoHeight;
|
|
uint32_t m_DisplayWidth, m_DisplayHeight;
|
|
AVBufferRef* m_HwContext;
|
|
VdpPresentationQueueTarget m_PresentationQueueTarget;
|
|
VdpPresentationQueue m_PresentationQueue;
|
|
VdpVideoMixer m_VideoMixer;
|
|
VdpRGBAFormat m_OutputSurfaceFormat;
|
|
VdpDevice m_Device;
|
|
|
|
#define OUTPUT_SURFACE_COUNT 3
|
|
VdpOutputSurface m_OutputSurface[OUTPUT_SURFACE_COUNT];
|
|
int m_NextSurfaceIndex;
|
|
|
|
#define OUTPUT_SURFACE_FORMAT_COUNT 2
|
|
static const VdpRGBAFormat k_OutputFormats8Bit[OUTPUT_SURFACE_FORMAT_COUNT];
|
|
static const VdpRGBAFormat k_OutputFormats10Bit[OUTPUT_SURFACE_FORMAT_COUNT];
|
|
|
|
VdpGetErrorString* m_VdpGetErrorString;
|
|
VdpPresentationQueueTargetDestroy* m_VdpPresentationQueueTargetDestroy;
|
|
VdpVideoMixerCreate* m_VdpVideoMixerCreate;
|
|
VdpVideoMixerDestroy* m_VdpVideoMixerDestroy;
|
|
VdpVideoMixerRender* m_VdpVideoMixerRender;
|
|
VdpPresentationQueueCreate* m_VdpPresentationQueueCreate;
|
|
VdpPresentationQueueDestroy* m_VdpPresentationQueueDestroy;
|
|
VdpPresentationQueueDisplay* m_VdpPresentationQueueDisplay;
|
|
VdpPresentationQueueSetBackgroundColor* m_VdpPresentationQueueSetBackgroundColor;
|
|
VdpPresentationQueueBlockUntilSurfaceIdle* m_VdpPresentationQueueBlockUntilSurfaceIdle;
|
|
VdpOutputSurfaceCreate* m_VdpOutputSurfaceCreate;
|
|
VdpOutputSurfaceDestroy* m_VdpOutputSurfaceDestroy;
|
|
VdpOutputSurfaceQueryCapabilities* m_VdpOutputSurfaceQueryCapabilities;
|
|
VdpVideoSurfaceGetParameters* m_VdpVideoSurfaceGetParameters;
|
|
VdpGetInformationString* m_VdpGetInformationString;
|
|
|
|
// X11 stuff
|
|
VdpPresentationQueueTargetCreateX11* m_VdpPresentationQueueTargetCreateX11;
|
|
};
|
|
|
|
|