1
/*  This file is part of the KDE project.
2
3
Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
5
This library is free software: you can redistribute it and/or modify
6
it under the terms of the GNU Lesser General Public License as published by
7
the Free Software Foundation, either version 2.1 or 3 of the License.
8
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
GNU Lesser General Public License for more details.
13
14
You should have received a copy of the GNU Lesser General Public License
15
along with this library.  If not, see <http://www.gnu.org/licenses/>.
16
*/
17
18
#include <d3d9.h>
19
20
#define	DXVA2_ProcAmp_Brightness 1
21
#define DXVA2_ProcAmp_Contrast   2
22
#define DXVA2_ProcAmp_Hue        4
23
#define DXVA2_ProcAmp_Saturation 8
24
25
typedef enum {
26
    MFVideoARMode_None             = 0x00000000,
27
    MFVideoARMode_PreservePicture  = 0x00000001,
28
    MFVideoARMode_PreservePixel    = 0x00000002,
29
    MFVideoARMode_NonLinearStretch = 0x00000004,
30
    MFVideoARMode_Mask             = 0x00000007
31
} MFVideoAspectRatioMode;
32
33
typedef struct {
34
    float  left;
35
    float  top;
36
    float  right;
37
    float  bottom;
38
} MFVideoNormalizedRect;
39
40
typedef struct {
41
    UINT    DeviceCaps;
42
    D3DPOOL InputPool;
43
    UINT    NumForwardRefSamples;
44
    UINT    NumBackwardRefSamples;
45
    UINT    Reserved;
46
    UINT    DeinterlaceTechnology;
47
    UINT    ProcAmpControlCaps;
48
    UINT    VideoProcessorOperations;
49
    UINT    NoiseFilterTechnology;
50
    UINT    DetailFilterTechnology;
51
} DXVA2_VideoProcessorCaps;
52
53
typedef struct {
54
    union {
55
        struct {
56
            USHORT Fraction;
57
            SHORT  Value;
58
        };
59
        LONG ll;
60
    };
61
} DXVA2_Fixed32;
62
63
typedef struct {
64
    DXVA2_Fixed32 MinValue;
65
    DXVA2_Fixed32 MaxValue;
66
    DXVA2_Fixed32 DefaultValue;
67
    DXVA2_Fixed32 StepSize;
68
} DXVA2_ValueRange;
69
70
typedef struct {
71
    DXVA2_Fixed32 Brightness;
72
    DXVA2_Fixed32 Contrast;
73
    DXVA2_Fixed32 Hue;
74
    DXVA2_Fixed32 Saturation;
75
} DXVA2_ProcAmpValues;
76
77
DXVA2_Fixed32 DXVA2FloatToFixed(const float _float_)
78
{
79
    DXVA2_Fixed32 _fixed_;
80
    _fixed_.Fraction = LOWORD(_float_ * 0x10000);
81
    _fixed_.Value = HIWORD(_float_ * 0x10000);
82
    return _fixed_;
83
}
84
85
float DXVA2FixedToFloat(const DXVA2_Fixed32 _fixed_)
86
{
87
    return (FLOAT)_fixed_.Value + (FLOAT)_fixed_.Fraction / 0x10000;
88
}
89
90
#undef INTERFACE
91
#define INTERFACE IMFVideoDisplayControl
92
DECLARE_INTERFACE_(IMFVideoDisplayControl, IUnknown)
93
{
94
    STDMETHOD(GetNativeVideoSize)(THIS_ SIZE* pszVideo, SIZE* pszARVideo) PURE;
95
    STDMETHOD(GetIdealVideoSize)(THIS_ SIZE* pszMin, SIZE* pszMax) PURE;
96
    STDMETHOD(SetVideoPosition)(THIS_ const MFVideoNormalizedRect* pnrcSource, const LPRECT prcDest) PURE;
97
    STDMETHOD(GetVideoPosition)(THIS_ MFVideoNormalizedRect* pnrcSource, LPRECT prcDest) PURE;
98
    STDMETHOD(SetAspectRatioMode)(THIS_ DWORD dwAspectRatioMode) PURE;
99
    STDMETHOD(GetAspectRatioMode)(THIS_ DWORD* pdwAspectRatioMode) PURE;
100
    STDMETHOD(SetVideoWindow)(THIS_ HWND hwndVideo) PURE;
101
    STDMETHOD(GetVideoWindow)(THIS_ HWND* phwndVideo) PURE;
102
    STDMETHOD(RepaintVideo)(THIS_) PURE;
103
    STDMETHOD(GetCurrentImage)(THIS_ BITMAPINFOHEADER* pBih, BYTE** pDib, DWORD* pcbDib, LONGLONG* pTimeStamp) PURE;
104
    STDMETHOD(SetBorderColor)(THIS_ COLORREF Clr) PURE;
105
    STDMETHOD(GetBorderColor)(THIS_ COLORREF* pClr) PURE;
106
    STDMETHOD(SetRenderingPrefs)(THIS_ DWORD dwRenderFlags) PURE;
107
    STDMETHOD(GetRenderingPrefs)(THIS_ DWORD* pdwRenderFlags) PURE;
108
    STDMETHOD(SetFullScreen)(THIS_ BOOL fFullscreen) PURE;
109
    STDMETHOD(GetFullScreen)(THIS_ BOOL* pfFullscreen) PURE;
110
};
111
#undef INTERFACE
112
#define INTERFACE IMFVideoMixerControl
113
DECLARE_INTERFACE_(IMFVideoMixerControl, IUnknown)
114
{
115
    STDMETHOD(SetStreamZOrder)(THIS_ DWORD dwStreamID, DWORD dwZ) PURE;
116
    STDMETHOD(GetStreamZOrder)(THIS_ DWORD dwStreamID, DWORD* pdwZ) PURE;
117
    STDMETHOD(SetStreamOutputRect)(THIS_ DWORD dwStreamID, const MFVideoNormalizedRect* pnrcOutput) PURE;
118
    STDMETHOD(GetStreamOutputRect)(THIS_ DWORD dwStreamID, MFVideoNormalizedRect* pnrcOutput) PURE;
119
};
120
#undef INTERFACE
121
#define INTERFACE IMFVideoProcessor
122
DECLARE_INTERFACE_(IMFVideoProcessor, IUnknown)
123
{
124
    STDMETHOD(GetAvailableVideoProcessorModes)(THIS_ UINT* lpdwNumProcessingModes, GUID** ppVideoProcessingModes) PURE;
125
    STDMETHOD(GetVideoProcessorCaps)(THIS_ LPGUID lpVideoProcessorMode, DXVA2_VideoProcessorCaps* lpVideoProcessorCaps) PURE;
126
    STDMETHOD(GetVideoProcessorMode)(THIS_ LPGUID lpMode) PURE;
127
    STDMETHOD(SetVideoProcessorMode)(THIS_ LPGUID lpMode) PURE;
128
    STDMETHOD(GetProcAmpRange)(THIS_ DWORD dwProperty, DXVA2_ValueRange* pPropRange) PURE;
129
    STDMETHOD(GetProcAmpValues)(THIS_ DWORD dwFlags, DXVA2_ProcAmpValues* Values) PURE;
130
    STDMETHOD(SetProcAmpValues)(THIS_ DWORD  dwFlags, DXVA2_ProcAmpValues*  pValues) PURE;
131
    STDMETHOD(GetFilteringRange)(THIS_ DWORD dwProperty, DXVA2_ValueRange* pPropRange) PURE;
132
    STDMETHOD(GetFilteringValue)(THIS_ DWORD dwProperty, DXVA2_Fixed32* pValue) PURE;
133
    STDMETHOD(SetFilteringValue)(THIS_ DWORD dwProperty, DXVA2_Fixed32* pValue) PURE;
134
    STDMETHOD(GetBackgroundColor)(THIS_ COLORREF* lpClrBkg) PURE;
135
    STDMETHOD(SetBackgroundColor)(THIS_ COLORREF ClrBkg) PURE;
136
};
137
#undef INTERFACE
138
#define INTERFACE IMFGetService
139
DECLARE_INTERFACE_(IMFGetService, IUnknown)
140
{
141
    STDMETHOD(GetService)(THIS_ REFGUID guidService, REFIID riid, LPVOID* ppvObject) PURE;
142
};
143
#undef INTERFACE