10 #include "VideoRenderers/ColorManager.h" 11 #include "VideoRenderers/DebugInfo.h" 12 #include "VideoRenderers/RenderInfo.h" 13 #include "VideoRenderers/VideoShaders/WinVideoFilter.h" 14 #include "cores/VideoSettings.h" 15 #include "guilib/D3DResource.h" 22 #include <libavutil/mastering_display_metadata.h> 23 #include <libavutil/pixdesc.h> 34 bool contains(std::vector<T> vector, T item)
36 return find(vector.begin(), vector.end(), item) != vector.end();
61 unsigned GetWidth()
const {
return m_widthTex; }
62 unsigned GetHeight()
const {
return m_heightTex; }
63 bool IsLoaded() {
return m_bLoaded; }
66 virtual void ReleasePicture();
67 virtual bool UploadBuffer() {
return false; }
68 virtual HRESULT GetResource(ID3D11Resource** ppResource,
unsigned* index)
const;
71 virtual bool GetDataPlanes(uint8_t*(&planes)[3],
int(&strides)[3]) {
return false; }
72 virtual unsigned GetViewCount()
const {
return 0; }
73 virtual ID3D11View* GetView(
unsigned viewIdx) {
return nullptr; }
75 AVPixelFormat av_format;
77 unsigned int pictureFlags = 0;
78 AVColorPrimaries primaries = AVCOL_PRI_BT709;
79 AVColorSpace color_space = AVCOL_SPC_BT709;
80 AVColorTransferCharacteristic color_transfer = AVCOL_TRC_BT709;
81 bool full_range =
false;
84 AVPixelFormat pixelFormat = AV_PIX_FMT_NONE;
85 bool hasDisplayMetadata =
false;
86 bool hasLightMetadata =
false;
87 AVMasteringDisplayMetadata displayMetadata = {};
88 AVContentLightMetadata lightMetadata = {};
89 std::string stereoMode;
90 uint64_t frameIdx = 0;
93 CRenderBuffer(AVPixelFormat av_pix_format,
unsigned width,
unsigned height);
94 void QueueCopyFromGPU();
98 unsigned int m_height;
100 unsigned int m_widthTex;
101 unsigned int m_heightTex;
103 Microsoft::WRL::ComPtr<ID3D11Texture2D> m_staging;
104 D3D11_TEXTURE2D_DESC m_sDesc{};
105 bool m_bPending =
false;
106 bool m_bLoaded =
false;
115 virtual bool Configure(
const VideoPicture &picture,
float fps,
unsigned int orientation);
116 virtual bool Supports(ESCALINGMETHOD method)
const = 0;
117 virtual bool WantsDoublePass() {
return false; }
118 virtual bool NeedBuffer(
int idx) {
return false; }
120 void AddVideoPicture(
const VideoPicture &picture,
int index);
121 void Render(
int index,
int index2,
CD3DTexture& target,
const CRect& sourceRect,
122 const CRect& destRect,
const CRect& viewRect,
unsigned flags);
124 const CRect& viewRect,
unsigned flags = 0);
126 void ManageTextures();
127 int NextBuffer()
const;
128 void ReleaseBuffer(
int idx);
129 bool Flush(
bool saveBuffers);
130 void SetBufferSize(
int numBuffers) { m_iBuffersRequired = numBuffers; }
134 static DXGI_FORMAT GetDXGIFormat(
const VideoPicture &picture);
135 static DXGI_FORMAT GetDXGIFormat(
CVideoBuffer* videoBuffer);
136 static AVPixelFormat GetAVFormat(DXGI_FORMAT dxgi_format);
137 static DXGI_HDR_METADATA_HDR10 GetDXGIHDR10MetaData(
CRenderBuffer* rb);
142 bool CreateIntermediateTarget(
unsigned int width,
unsigned int height,
bool dynamic =
false);
143 void OnCMSConfigChanged(AVColorPrimaries srcPrimaries);
144 void ReorderDrawPoints(
const CRect& destRect,
CPoint(&rotatedPoints)[4])
const;
145 bool CreateRenderBuffer(
int index);
146 void DeleteRenderBuffer(
int index);
150 virtual void RenderImpl(
CD3DTexture& target,
CRect& sourceRect,
CPoint (&destPoints)[4], uint32_t flags) = 0;
154 virtual void UpdateVideoFilters();
155 virtual void CheckVideoParameters();
156 virtual void OnViewSizeChanged() {}
157 virtual void OnOutputReset() {}
159 bool m_toneMapping =
false;
160 bool m_useDithering =
false;
161 bool m_cmsOn =
false;
162 bool m_lutIsLoading =
false;
163 bool m_useHLGtoPQ =
false;
164 ETONEMAPMETHOD m_toneMapMethod = VS_TONEMAPMETHOD_OFF;
166 int m_iBufferIndex = 0;
167 int m_iNumBuffers = 0;
168 int m_iBuffersRequired = 0;
169 int m_ditherDepth = 0;
172 unsigned m_sourceWidth = 0;
173 unsigned m_sourceHeight = 0;
174 unsigned m_viewWidth = 0;
175 unsigned m_viewHeight = 0;
176 unsigned m_renderOrientation = 0;
178 uint64_t m_frameIdx = 0;
180 AVPixelFormat m_format = AV_PIX_FMT_NONE;
182 std::shared_ptr<COutputShader> m_outputShader;
183 std::unique_ptr<CColorManager> m_colorManager;
184 Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_pLUTView;
186 std::map<int, CRenderBuffer*> m_renderBuffers;
188 DXGI_HDR_METADATA_HDR10 m_lastHdr10 = {};
189 HDR_TYPE m_HdrType = HDR_TYPE::HDR_NONE_SDR;
190 bool m_AutoSwitchHDR =
false;
Definition: D3DResource.h:90
Definition: VideoBuffer.h:85
Definition: RendererBase.h:56
Definition: RenderInfo.h:19
Definition: DebugInfo.h:21
Definition: DVDVideoCodec.h:36
Definition: VideoSettings.h:194
Definition: RendererBase.h:109