代码只是截取了功能实现部分,具体怎么应用需要根据自己的开发环境来实现。
LRESULT CALLBACK CVideoCapture::VideoStreamCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
unsigned char* RGBBuf;
unsigned char* RGBBufDis;
CVideoCapture* pCapture=(CVideoCapture*)capGetUserData(hWnd);
int Wi=pCapture->m_sBitMapInfo.bmiHeader.biWidth;
int Hi=pCapture->m_sBitMapInfo.bmiHeader.biHeight;
XL_VIDEO_MSG msg;
msg.flag=0;
if(pCapture && pCapture->m_bActive)
{
CVideoCenter * pVideoCenter=CVideoCenter::getInstance();
if ( 0x32595559 == pCapture->m_sBitMapInfo.bmiHeader.biCompression )
{
// YUY2
RGBBuf= (unsigned char*)malloc(Hi*Wi*3); //320*240
pCapture->YUY22RGB24(RGBBuf,lpVHdr->lpData);
RGBBufDis= (unsigned char*)malloc(pCapture->m_nWi*pCapture->m_nHi*3);
// dephi 320x240 -> 176*144
pCapture->ConvDephi(RGBBuf,RGBBufDis,Wi,Hi);
if(pVideoCenter->m_bVideoTransOpen)
{
pVideoCenter->m_pVideoTransmit->LocalDataDisplay(RGBBufDis,pCapture->m_nWi*pCapture->m_nHi*3);
// pVideoCenter->m_pVideoTransmit->SendVideoToRemote(RGBBufDis,pCapture->m_nWi*pCapture->m_nHi*3);
msg.length=Wi*Hi*3;
memcpy(msg.buffer,RGBBufDis,msg.length);
pVideoCenter->m_pMsgHandler->ReportEvent(&msg);
}
free(RGBBuf);
free(RGBBufDis);
}
// uncompressed RGB24 (BGR sequence)
else if ( 0 == pCapture->m_sBitMapInfo.bmiHeader.biCompression && 24 == pCapture->m_sBitMapInfo.bmiHeader.biBitCount)
{
// RGB
RGBBufDis= (unsigned char*)malloc(pCapture->m_nWi*pCapture->m_nHi*3);
pCapture->ConvDephi(lpVHdr->lpData,RGBBufDis,Wi,Hi);
// pVideoCenter->m_pVideoTransmit->LocalDataDisplay(lpVHdr->lpData,lpVHdr->dwBytesUsed);
if(pVideoCenter->m_bVideoTransOpen)
{
pVideoCenter->m_pVideoTransmit->LocalDataDisplay(RGBBufDis,pCapture->m_nWi*pCapture->m_nHi*3);
// pVideoCenter->m_pVideoTransmit->SendVideoToRemote(RGBBufDis,pCapture->m_nWi*pCapture->m_nHi*3);
msg.length=Wi*Hi*3;
memcpy(msg.buffer,RGBBufDis,msg.length);
pVideoCenter->m_pMsgHandler->ReportEvent(&msg);
}
free(RGBBufDis);
}
}
return 111;
}
//这个是转换函数,主要算法就是将像素点进行切割。
void CVideoCapture::ConvDephi(unsigned char* source, unsigned char* dest,int srcWi,int srcHi)
{
int i;
int j;
int qWi=(srcWi-m_nWi)/2;
int qHi=(srcHi-m_nHi)/2;
for(i=0;i
{
for(j=0;j
{
*(dest+i*m_nWi*3+j*3) = *(source+(qHi+i)*3*srcWi+(qWi+j)*3);
*(dest+i*m_nWi*3+j*3+1) = *(source+(qHi+i)*3*srcWi+(qWi+j)*3+1);
*(dest+i*m_nWi*3+j*3+2) = *(source+(qHi+i)*3*srcWi+(qWi+j)*3+2);
}
}
return;
}
分享: