00001 #pragma once
00002
00003 #if defined(ENABLE_OPENNI) || defined(ENABLE_OPENNI2)
00004
00005
00006 #include "WinAudioStream.h"
00007 #include "OpenNiTool.h"
00008
00009 #include <mfapi.h>
00010 #include <wmcodecdsp.h>
00011 #include <uuids.h>
00012
00013
00014 #pragma comment(lib, "Msdmo.lib")
00015 #pragma comment(lib, "amstrmid.lib")
00016
00017
00018
00019 namespace jbxwl {
00020
00021
00022 using namespace jbxl;
00023
00024
00026
00027
00028 class COpenNiMedia : public IMediaObject
00029 {
00030 public:
00031 COpenNiMedia(void);
00032 ~COpenNiMedia(void) {}
00033
00034 public:
00036
00037
00038 STDMETHODIMP_(ULONG) AddRef() { return 2;}
00039 STDMETHODIMP_(ULONG) Release() { return 1;}
00040
00041 STDMETHODIMP QueryInterface(REFIID riid, void** ppv)
00042 {
00043 if (riid==IID_IUnknown) {
00044 AddRef();
00045 *ppv = (IUnknown*)this;
00046 return NOERROR;
00047 }
00048 else if (riid==IID_IMediaBuffer) {
00049 AddRef();
00050 *ppv = (IMediaObject*)this;
00051 return NOERROR;
00052 }
00053 else return E_NOINTERFACE;
00054 }
00055
00056 public:
00058
00059
00060 HRESULT STDMETHODCALLTYPE SetOutputType(DWORD index, const DMO_MEDIA_TYPE *pmt, DWORD flags);
00061 HRESULT STDMETHODCALLTYPE GetOutputCurrentType(DWORD index, DMO_MEDIA_TYPE *pmt);
00062 HRESULT STDMETHODCALLTYPE ProcessOutput(DWORD dwFlags, DWORD oputBufferCount, DMO_OUTPUT_DATA_BUFFER *outputBuffers, DWORD *pdwStatus);
00063
00064
00065 HRESULT STDMETHODCALLTYPE GetStreamCount(
00066 DWORD *pcInputStreams,
00067 DWORD *pcOutputStreams) { return E_NOTIMPL;}
00068
00069 HRESULT STDMETHODCALLTYPE GetInputStreamInfo(
00070 DWORD dwInputStreamIndex,
00071 DWORD *pdwFlags) { return E_NOTIMPL;}
00072
00073 HRESULT STDMETHODCALLTYPE GetOutputStreamInfo(
00074 DWORD dwOutputStreamIndex,
00075 DWORD *pdwFlags) { return E_NOTIMPL;}
00076
00077 HRESULT STDMETHODCALLTYPE GetInputType(
00078 DWORD dwInputStreamIndex,
00079 DWORD dwTypeIndex,
00080 DMO_MEDIA_TYPE *pmt) { return E_NOTIMPL;}
00081
00082 HRESULT STDMETHODCALLTYPE GetOutputType(
00083 DWORD dwOutputStreamIndex,
00084 DWORD dwTypeIndex,
00085 DMO_MEDIA_TYPE *pmt) { return E_NOTIMPL;}
00086
00087 HRESULT STDMETHODCALLTYPE SetInputType(
00088 DWORD dwInputStreamIndex,
00089 const DMO_MEDIA_TYPE *pmt,
00090 DWORD dwFlags) { return E_NOTIMPL;}
00091
00092 HRESULT STDMETHODCALLTYPE GetInputCurrentType(
00093 DWORD dwInputStreamIndex,
00094 DMO_MEDIA_TYPE *pmt) { return E_NOTIMPL;}
00095
00096 HRESULT STDMETHODCALLTYPE GetInputSizeInfo(
00097 DWORD dwInputStreamIndex,
00098 DWORD *pcbSize,
00099 DWORD *pcbMaxLookahead,
00100 DWORD *pcbAlignment) { return E_NOTIMPL;}
00101
00102 HRESULT STDMETHODCALLTYPE GetOutputSizeInfo(
00103 DWORD dwOutputStreamIndex,
00104 DWORD *pcbSize,
00105 DWORD *pcbAlignment) { return E_NOTIMPL;}
00106
00107 HRESULT STDMETHODCALLTYPE GetInputMaxLatency(
00108 DWORD dwInputStreamIndex,
00109 REFERENCE_TIME *prtMaxLatency) { return E_NOTIMPL;}
00110
00111 HRESULT STDMETHODCALLTYPE SetInputMaxLatency(
00112 DWORD dwInputStreamIndex,
00113 REFERENCE_TIME rtMaxLatency) { return E_NOTIMPL;}
00114
00115 HRESULT STDMETHODCALLTYPE Flush(void) { return E_NOTIMPL;}
00116
00117 HRESULT STDMETHODCALLTYPE Discontinuity(
00118 DWORD dwInputStreamIndex) { return E_NOTIMPL;}
00119
00120 HRESULT STDMETHODCALLTYPE AllocateStreamingResources(void) { return E_NOTIMPL;}
00121
00122 HRESULT STDMETHODCALLTYPE FreeStreamingResources(void) { return E_NOTIMPL;}
00123
00124 HRESULT STDMETHODCALLTYPE GetInputStatus(
00125 DWORD dwInputStreamIndex,
00126 DWORD *dwFlags) { return E_NOTIMPL;}
00127
00128 HRESULT STDMETHODCALLTYPE ProcessInput(
00129 DWORD dwInputStreamIndex,
00130 IMediaBuffer *pBuffer,
00131 DWORD dwFlags,
00132 REFERENCE_TIME rtTimestamp,
00133 REFERENCE_TIME rtTimelength) { return E_NOTIMPL;}
00134
00135 HRESULT STDMETHODCALLTYPE Lock(
00136 LONG bLock) { return E_NOTIMPL;}
00137 };
00138
00139
00140
00141
00143
00144
00145
00146 static const WORD OpenNiAudioFormat = WAVE_FORMAT_PCM;
00147 static const WORD OpenNiAudioChannels = 2;
00148 static const DWORD OpenNiAudioSamplesPerSec = 44100;
00149 static const WORD OpenNiAudioBitsPerSample = 16;
00150
00151
00152
00153
00154
00155
00156 class COpenNiAudio
00157 {
00158 public:
00159
00160
00161 COpenNiAudio(COpenNiTool* tool);
00162 virtual ~COpenNiAudio(void);
00163
00164
00165 BOOL init(COpenNiTool* tool);
00166 void free(void);
00167 IStream* getIStream(void) { return m_pStream;}
00168
00169 public:
00170 COpenNiMedia* m_mediaObj;
00171
00172 public:
00173
00174 BOOL setMediaType(void);
00175
00176 BOOL startCapture(void) { if (m_audioStream!=NULL) return m_audioStream->startCapture(); else return FALSE;}
00177 void stopCapture(void) { if (m_audioStream!=NULL) m_audioStream->stopCapture(); }
00178
00179 Buffer getAudioData(void) { if (m_audioStream!=NULL) return m_audioStream->input(); else return init_Buffer();}
00180 void getAudioData(Buffer* pbuf);
00181
00182
00183 BOOL openOutput(void) { if (m_audioStream!=NULL) return m_audioStream->openOutput(); else return FALSE;}
00184 void closeOutput(void) { if (m_audioStream!=NULL) m_audioStream->closeOutput();}
00185
00186 public:
00187
00188 WAVEFORMATEX getAudioFormat(void);
00189
00190 private:
00191
00192 CWinAudioStream* m_audioStream;
00193
00194
00195 IMediaObject* m_audioMedia;
00196 IStream* m_pStream;
00197
00198 private:
00199
00200 COpenNiAudio& operator = (COpenNiAudio& rhs) { return rhs;}
00201 };
00202
00203
00204 }
00205
00206
00207 #endif