请教:
根据 mxw5495 大哥 提供的网子,找到一个程序: class CSampleGrabberCB : public ISampleGrabberCB
{
public:
long lWidth;
long lHeight;
TCHAR m_szFileName[MAX_PATH];// 位图文件名称
CSampleGrabberCB( )
{
strcpy(m_szFileName, "c:\\donaldo.bmp");
}
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; }
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv)
{
if( riid == IID_ISampleGrabberCB ¦ ¦ riid == IID_IUnknown )
{
*ppv = (void *) static_cast <ISampleGrabberCB*> ( this );
return NOERROR;
}
return E_NOINTERFACE;
}
STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample )
{
return 0;
}
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
if( !bOneShot )return 0;
if (!pBuffer)return E_POINTER;
SaveBitmap(pBuffer, lBufferSize);
bOneShot = FALSE;
return 0;
}
} CSampleGrabberCB mCB;
CComPtr <ISampleGrabber> m_pGrabber; //取得视频数据接口 HRESULT CCaptureVideo::Init(int iDeviceID, HWND hWnd)
{
hr = m_pGrabber->SetCallback( &mCB, 1 );
}
问题1:
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; } 分别表示什么意思?
为什么一个 return 2, 一个 return 1; 问题2:
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; } 这两句有什么作用,我不要这 两句可以不? 问题3:
STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample )
是什么意思? 为什么整个程序没有地方来调用这个函数呢? 问题4:
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
if( !bOneShot )return 0;
} 这是个函数吗?
为什么没有整个程序没有一个地方来调用它呢? 问题5: HRESULT CCaptureVideo::Init(int iDeviceID, HWND hWnd)
{
hr = m_pGrabber->SetCallback( &mCB, 1 );
} m_pGrabber->SetCallback( &mCB, 1 );
这个是什么意思? 执行这句后,会执行 mCB 的构造函数?
还是 执行 mCB 的什么呢? 谢谢!
根据 mxw5495 大哥 提供的网子,找到一个程序: class CSampleGrabberCB : public ISampleGrabberCB
{
public:
long lWidth;
long lHeight;
TCHAR m_szFileName[MAX_PATH];// 位图文件名称
CSampleGrabberCB( )
{
strcpy(m_szFileName, "c:\\donaldo.bmp");
}
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; }
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv)
{
if( riid == IID_ISampleGrabberCB ¦ ¦ riid == IID_IUnknown )
{
*ppv = (void *) static_cast <ISampleGrabberCB*> ( this );
return NOERROR;
}
return E_NOINTERFACE;
}
STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample )
{
return 0;
}
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
if( !bOneShot )return 0;
if (!pBuffer)return E_POINTER;
SaveBitmap(pBuffer, lBufferSize);
bOneShot = FALSE;
return 0;
}
} CSampleGrabberCB mCB;
CComPtr <ISampleGrabber> m_pGrabber; //取得视频数据接口 HRESULT CCaptureVideo::Init(int iDeviceID, HWND hWnd)
{
hr = m_pGrabber->SetCallback( &mCB, 1 );
}
问题1:
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; } 分别表示什么意思?
为什么一个 return 2, 一个 return 1; 问题2:
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; } 这两句有什么作用,我不要这 两句可以不? 问题3:
STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample )
是什么意思? 为什么整个程序没有地方来调用这个函数呢? 问题4:
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
if( !bOneShot )return 0;
} 这是个函数吗?
为什么没有整个程序没有一个地方来调用它呢? 问题5: HRESULT CCaptureVideo::Init(int iDeviceID, HWND hWnd)
{
hr = m_pGrabber->SetCallback( &mCB, 1 );
} m_pGrabber->SetCallback( &mCB, 1 );
这个是什么意思? 执行这句后,会执行 mCB 的构造函数?
还是 执行 mCB 的什么呢? 谢谢!
{
if( !bOneShot )return 0;
} 这里设置了哪个为回调函数啊?一个函数被设置为了回调函数有什么用?
{
return 0;
}
(摄像头得到的数据放在 pBuffer,指向的内存里)
我什么把 摄像头的 数据在 HGE 显示出来HGE 函数(纹理地址琐定函数)DWORD *Texture_Lock(HTEXTURE texture,bool bReadOnly = true,int left = 0,int top = 0,int width = 0,int height = 0);返回值
如果使用成功,从锁定的纹理数据返回指针。否则返回0。LPBYTE buffer1 = (LPBYTE)hge->Texture_Lock(m_hTex,false,0,0,Texture_GetWidth(m_hTex));,hge->Texture_GetHeight(m_hTex));现在只要把 pBuffer 拷贝给 buffer1 就可以了我的基础知识不行
1:首先开辟缓冲 buffer1 ,可是开辟为什么类型,开辟多大呢?2: 把摄像头得到的缓冲 BYTE * pBuffer 拷贝到 buffer1
内存拷贝:
memcpy(buffer1,pBuffer,lBufferSize);// 是这样不?
谢谢!