1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
/*############################################################################
# Copyright (C) 2005 Intel Corporation
#
# SPDX-License-Identifier: MIT
############################################################################*/
#ifndef __DECODE_D3D_RENDER_H__
#define __DECODE_D3D_RENDER_H__
#if defined(_WIN32) || defined(_WIN64)
#pragma warning(disable : 4201)
#include <d3d9.h>
#include <dxva.h>
#include <dxva2api.h>
#include <windows.h>
#endif
#include "vpl/mfxstructures.h"
#include "vpl/mfxvideo.h"
#include "hw_device.h"
typedef void* WindowHandle;
typedef void* Handle;
#if defined(_WIN32) || defined(_WIN64)
struct sWindowParams {
LPCTSTR lpClassName;
LPCTSTR lpWindowName;
DWORD dwStyle;
int nx;
int ny;
int ncell;
int nAdapter;
int nWidth;
int nHeight;
HWND hWndParent;
HMENU hMenu;
HINSTANCE hInstance;
LPVOID lpParam;
bool bFullScreen; // Stretch window to full screen
};
class CDecodeD3DRender {
public:
CDecodeD3DRender();
virtual ~CDecodeD3DRender();
virtual mfxStatus Init(sWindowParams pWParams);
virtual mfxStatus RenderFrame(mfxFrameSurface1* pSurface, mfxFrameAllocator* pmfxAlloc);
virtual VOID UpdateTitle(double fps);
virtual VOID SetDxgiFullScreen() {
m_bDxgiFs = true;
}
void Close();
HWND GetWindowHandle();
VOID OnDestroy(HWND hwnd);
VOID OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
VOID ChangeWindowSize(bool bFullScreen);
void SetHWDevice(CHWDevice* dev) {
m_hwdev = dev;
}
protected:
void AdjustWindowRect(RECT* rect);
mfxStatus AllocateShiftedSurfaceIfNeeded(const mfxFrameSurface1* refSurface,
mfxFrameAllocator* allocator);
mfxFrameAllocResponse shiftSurfaceResponse;
mfxFrameSurface1 shiftedSurface;
mfxFrameAllocator* pAllocator;
CHWDevice* m_hwdev;
sWindowParams m_sWindowParams;
HWND m_Hwnd;
RECT m_rect;
DWORD m_style;
bool EnableDwmQueuing();
static BOOL CALLBACK MonitorEnumProc(HMONITOR, HDC, LPRECT lprcMonitor, LPARAM dwData);
static bool m_bIsMonitorFound;
bool m_bDwmEnabled;
int m_nMonitorCurrent;
::RECT m_RectWindow;
bool m_bDxgiFs;
};
#endif // #if defined(_WIN32) || defined(_WIN64)
#endif // __DECODE_D3D_RENDER_H__
|