Files
moonlight-qt/app/streaming/video/ffmpeg-renderers/cuda.h
Cameron Gutman d501a627f0 Test all renderers before use
Every renderer except SDL had opted-in for testing due to various
quirks discovered over the years, so just do away with this option
and test all renderers.
2025-12-22 23:58:26 -06:00

43 lines
1.0 KiB
C++

#pragma once
#include "renderer.h"
#include <ffnvcodec/dynlink_loader.h>
extern "C" {
#include <libavutil/hwcontext_cuda.h>
}
class CUDARenderer : public IFFmpegRenderer {
public:
CUDARenderer();
virtual ~CUDARenderer() override;
virtual bool initialize(PDECODER_PARAMETERS) override;
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override;
virtual void renderFrame(AVFrame* frame) override;
virtual bool isDirectRenderingSupported() override;
virtual int getDecoderCapabilities() override;
private:
AVBufferRef* m_HwContext;
};
#define NV12_PLANES 2
// Helper class used by SDLRenderer to read our CUDA frame
class CUDAGLInteropHelper {
public:
CUDAGLInteropHelper(AVHWDeviceContext* context);
~CUDAGLInteropHelper();
bool registerBoundTextures();
void unregisterTextures();
bool copyCudaFrameToTextures(AVFrame* frame);
private:
CudaFunctions* m_Funcs;
AVCUDADeviceContext* m_Context;
CUgraphicsResource m_Resources[NV12_PLANES];
};