File: decode_render.h

package info (click to toggle)
libvpl-tools 1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,652 kB
  • sloc: cpp: 107,469; python: 4,303; ansic: 3,202; sh: 159; lisp: 52; makefile: 13
file content (98 lines) | stat: -rw-r--r-- 2,382 bytes parent folder | download | duplicates (3)
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__