STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
{
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);// 是这样不?
谢谢!
{
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);// 是这样不?
谢谢!
内存有类型吗?搞不懂什么意思....memcpy(buffer1,pBuffer,lBufferSize);//
这个是对内存的填充...可以这么使用的....
int 型啊
float 型啊
这个是对内存的填充...可以这么使用的....内存拷贝是哪个啊?
谢谢!
你还是不明白我说的什么...我说的是内存有类型吗?你是不是只知道new int[number]这种开辟方式啊,但他的真正含义是什么,你了解了就不会问这个问题拉...
内存复制memmove比较安全,如两块内存有重叠的时候
的函数.一般缓冲区的类型多有BYTE和CHAR类型.比如你要开辟12个字节的缓冲区,用BYTE[12]
CHAR[12]就可以了.如果你用int型的话只要int[3]就可以了,因为一个int有4个字节嘛.当然
是好声明为指针,用malloc一类的函数动力分配内存最好了.
int *a; 只是声明了一个指针变量,并没有分配内存.要进行 a = new int[n]
来分配内存,或者可以用 a = (int*)malloc(size); 这是一个C函数.
现在情况是这样: bool FirstOpenBufferFlag = true; //第一次开辟缓冲的标志
LPBYTE AcceptCapBuffer;
class CSampleGrabberCB : public ISampleGrabberCB
{
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize)
{
if(FirstOpenBufferFlag) //第一次开辟缓冲的标志
{
FirstOpenBufferFlag = false; //第一次开辟缓冲的标志
AcceptCapBuffer = (LPBYTE)malloc(lBufferSize*sizeof(BYTE));
}
AcceptCapBuffer = (LPBYTE)hge->Texture_Lock(tex2,false,0,0,hge->Texture_GetWidth(tex2),hge->Texture_GetHeight(tex2)); //锁定纹理的内存地址
memcpy(AcceptCapBuffer,pBuffer,lBufferSize); //更新内存内存
hge->Texture_Unlock(tex2); //解锁
return 0;
}
}; 运行一样出现内存错误:
memcpy.asm
CopyUp:
test edi,11b ;U - destination dword aligned?
jnz short CopyLeadUp ;V - if we are not dword aligned already, align shr ecx,2 ;U - shift down to dword count
and edx,11b ;V - trailing byte count cmp ecx,8 ;U - test if small enough for unwind copy
jb short CopyUnwindUp ;V - if so, then jump rep movsd ;N - move all of our dwords 错误在 rep movsd ;N - move all of our dwords 如果把
AcceptCapBuffer = (LPBYTE)hge->Texture_Lock(tex2,false,0,0,hge->Texture_GetWidth(tex2),hge->Texture_GetHeight(tex2)); //锁定纹理的内存地址 屏蔽掉,则就没有这个错误
锁定纹理的直接路径。
DWORD *Texture_Lock(HTEXTURE texture,bool bReadOnly = true,int left = 0,int top = 0,int width = 0,int height = 0); 返回值 If successful, returns a pointer to the locked texture data.Otherwise returns 0. 如果使用成功,从锁定的纹理数据返回指针。否则返回0。
这是什么原因,是不是摄像头资源格式和纹理的不相合?
应该也不是这样的原因啊? 请各位大哥帮我看看,谢谢!