diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index a0256267..edc42431 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -776,6 +776,20 @@ void DXVA2Renderer::notifyOverlayUpdated(Overlay::OverlayType type) } } +int DXVA2Renderer::getDecoderColorspace() +{ + if (isDXVideoProcessorAPIBlacklisted()) { + // StretchRect() assumes Rec 601 on Intel GPUs + return COLORSPACE_REC_601; + } + else { + // VideoProcessBlt() *should* properly handle whatever, since + // we provide colorspace information. However, AMD GPUs seem to + // always assume Rec 709, so we'll use that as our default. + return COLORSPACE_REC_709; + } +} + void DXVA2Renderer::renderFrame(AVFrame *frame) { IDirect3DSurface9* surface = reinterpret_cast(frame->data[3]); diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.h b/app/streaming/video/ffmpeg-renderers/dxva2.h index 7586e073..335083e5 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.h +++ b/app/streaming/video/ffmpeg-renderers/dxva2.h @@ -20,6 +20,7 @@ public: virtual bool prepareDecoderContext(AVCodecContext* context) override; virtual void renderFrame(AVFrame* frame) override; virtual void notifyOverlayUpdated(Overlay::OverlayType) override; + virtual int getDecoderColorspace() override; private: bool initializeDecoder();