[Title] improved camera performance & add win32 dll source
[sdk/emulator/qemu.git] / tizen / src / hw / camera_win32_dll / hwcfilter / hwcfilter / hwcsp.h
1 #ifndef __HWCPS_H__\r
2 #define __HWCPS_H__\r
3 \r
4 #ifdef HWCFILTER_EXPORTS\r
5 #define HWCFILTER_API extern "C" __declspec(dllexport) HRESULT __stdcall\r
6 #else\r
7 #define HWCFILTER_API __declspec(dllimport)\r
8 #endif\r
9 \r
10 #include <DShow.h>\r
11 #include "hwcfilter.h"\r
12 \r
13 #define SAFE_RELEASE(x)         if (x) { (x)->Release(); (x) = NULL; }\r
14 \r
15 typedef int (STDAPICALLTYPE *CallbackFn)(ULONG dwSize, BYTE *pBuffer);\r
16 \r
17 class CCallback : ICaptureCallBack\r
18 {\r
19 public:\r
20         CCallback();\r
21         virtual ~CCallback();\r
22         STDMETHODIMP QueryInterface(REFIID riid, void **ppv);\r
23         STDMETHODIMP_(ULONG) AddRef();\r
24         STDMETHODIMP_(ULONG) Release();\r
25         STDMETHODIMP CaptureCallback(ULONG dwSize, BYTE *pBuffer);\r
26         STDMETHODIMP SetCallback(CallbackFn pCallbackFn);\r
27 \r
28 private:\r
29         long m_cRef;\r
30         CallbackFn m_pCallback;\r
31 };\r
32 \r
33 class HWCSP\r
34 {\r
35 public:\r
36         HWCSP();\r
37         ~HWCSP();\r
38 \r
39         STDMETHODIMP Init();\r
40         \r
41         STDMETHODIMP BindSourceFilter();\r
42         STDMETHODIMP BindTargetFilter();\r
43         STDMETHODIMP ConnectFilters();\r
44         STDMETHODIMP GetDeviceCaps(ULONG *fourcc, ULONG *width, ULONG *height, ULONG *fps);\r
45 \r
46         STDMETHODIMP_(void) CloseInterfaces();\r
47         STDMETHODIMP_(void) DeleteMediaType(AM_MEDIA_TYPE *pmt);\r
48 \r
49         STDMETHODIMP QueryVideoProcAmp(long nProperty, long *pMin, long *pMax, long *pStep, long *pDefault);\r
50         STDMETHODIMP GetVideoProcAmp(long nProperty, long *pValue);\r
51         STDMETHODIMP SetVideoProcAmp(long nProperty, long value);\r
52 \r
53         STDMETHODIMP StartPreview();\r
54         STDMETHODIMP StopPreview();\r
55 \r
56         STDMETHODIMP SetFPS(REFERENCE_TIME inFps);\r
57         STDMETHODIMP GetFPS(REFERENCE_TIME *outFps);\r
58 \r
59         STDMETHODIMP SetResolution(LONG width, LONG height);\r
60         STDMETHODIMP GetResolution(LONG *width, LONG *height);\r
61 \r
62         STDMETHODIMP GetFormats(LPVOID pData);\r
63         STDMETHODIMP GetFrameSizes(LPVOID pData);\r
64         STDMETHODIMP GetFrameIntervals(LPVOID pData);\r
65         STDMETHODIMP SetDefaultValues();\r
66 \r
67         STDMETHODIMP SetCallback(CallbackFn pCallback);\r
68 \r
69 private:\r
70         STDMETHODIMP GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin);\r
71 \r
72         IGraphBuilder *m_pGB ;\r
73         ICaptureGraphBuilder2 *m_pCGB;\r
74         IMediaControl *m_pMC;\r
75         IMediaEventEx *m_pME;\r
76         \r
77         IPin *m_pOutputPin;\r
78         IPin *m_pInputPin;\r
79         IBaseFilter *m_pDF;\r
80         IBaseFilter *m_pSF;\r
81 \r
82         CCallback *m_pCallback;\r
83 \r
84         HINSTANCE m_hDLL;\r
85         DWORD m_dwFourcc;\r
86         DWORD m_dwWidth;\r
87         DWORD m_dwHeight;\r
88         DWORD m_dwAvgInterval;\r
89 };\r
90 \r
91 enum {\r
92         HWC_OPEN,\r
93         HWC_CLOSE,\r
94         HWC_START,\r
95         HWC_STOP,\r
96         HWC_S_FPS,\r
97         HWC_G_FPS,\r
98         HWC_S_FMT,\r
99         HWC_G_FMT,\r
100         HWC_TRY_FMT,\r
101         HWC_ENUM_FMT,\r
102         HWC_QCTRL,\r
103         HWC_S_CTRL,\r
104         HWC_G_CTRL,\r
105         HWC_ENUM_FSIZES,\r
106         HWC_ENUM_INTERVALS\r
107 };\r
108 \r
109 typedef struct tagHWCParam {\r
110         long val1;\r
111         long val2;\r
112         long val3;\r
113         long val4;\r
114         long val5;\r
115 } HWCParam;\r
116 \r
117 HWCFILTER_API HWCCtrl(UINT nCmd, UINT nSize, LPVOID pBuf);\r
118 \r
119 HWCFILTER_API HWCSetCallback(CallbackFn pCallback);\r
120 \r
121 STDMETHODIMP HWCOpen();\r
122 STDMETHODIMP HWCClose();\r
123 STDMETHODIMP HWCStart();\r
124 STDMETHODIMP HWCStop();\r
125 \r
126 STDMETHODIMP HWCSetFPS(long num, long denom);\r
127 STDMETHODIMP HWCGetFPS(long *num, long *denom);\r
128 \r
129 STDMETHODIMP HWCSetFormat(long width, long height);\r
130 STDMETHODIMP HWCGetFormat();\r
131 STDMETHODIMP HWCTryFormat();\r
132 STDMETHODIMP HWCEnumFormat();\r
133 \r
134 STDMETHODIMP HWCQueryControl(long nProperty, long *pMin, long *pMax, long *pStep, long *pDefault);\r
135 STDMETHODIMP HWCSetControlValue(long nProperty, long value);\r
136 STDMETHODIMP HWCGetControlValue(long nProperty, long *pVal);\r
137 \r
138 STDMETHODIMP HWCEnumFrameSizes();\r
139 STDMETHODIMP HWCEnumFrameIntervals();\r
140 \r
141 #endif  // __HWCPS_H__