how to render the video from the camera to a Picture Control?
I don't know the whole procedure.
void tabTwo::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PICTURE, m_hWndCap);
}
void tabTwo::OnBnClickedStart()
{
DWORD fsize;
capSetCallbackOnError(m_hWndCap,(FARPROC)ErrorCallbackProc);
capSetCallbackOnStatus(m_hWndCap,(FARPROC)StatusCallbackProc);
capSetCallbackOnVideoStream(m_hWndCap,(FARPROC)VideoCallbackProc);
capDriverConnect(m_hWndCap,0);
capDriverGetCaps(m_hWndCap,&m_caps,sizeof(CAPDRIVERCAPS));
if ( m_caps.fHasOverlay )
capOverlay(m_hWndCap,TRUE);
capPreviewRate(m_hWndCap,1000/25);
capPreview(m_hWndCap,bPreview);fsize = capGetVideoFormatSize(m_hWndCap);
capGetVideoFormat(m_hWndCap,lpbiIn,fsize);CRect rect;
m_hWndCap.GetWindowRect(&rect);
HWND m_hCapWnd = capCreateCaptureWindow(_T(""),NULL,0,0,rect.Width(),rect.Height(),m_hWndCap.GetSafeHwnd(),0);
ASSERT(m_hCapWnd);if ( capDriverConnect(m_hCapWnd,0) )
{}
}
All Replies
- Modern cameras should support WIA. old cameras may have their own SDK. Contact the hardware producer for details.
The following is signature, not part of post
Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
Visual C++ MVP My camera supports WIA. I just want to know the process. Thank you.
#include "stdafx.h" #include "FTP.h" #include "tabTwo.h" #pragma comment(lib,"vfw32.lib") unsigned char bufo[XDIM*YDIM*3+40];//??? HIC hic1; HIC hic2; LPBITMAPINFO lpbiIn; LPBITMAPINFO lpbiTmp; LPBITMAPINFO lpbiOut; COMPVARS pc; BOOL IsKeyFrame; BOOL bSaveAVI=FALSE; long FrameSize; int CurrentID; BOOL bPreview = FALSE; int nStreamLength; int nOstreamSize; CFrameWnd m_wndSource; HWND m_hWndCap; CRect disRect; enum VFW_STATE{PREVIEW,ENCDEC}; VFW_STATE m_vfwSate = PREVIEW; CAPDRIVERCAPS m_caps; LRESULT CALLBACK EXPORT ErrorCallbackProc(HWND hWnd, int nErrID, LPSTR lpErrorText) { if ( nErrID == 0 ) return TRUE; MessageBox(NULL,(LPCWSTR)lpErrorText,_T(""),MB_OK); return TRUE; } LRESULT FAR PASCAL StatusCallbackProc(HWND hWnd,int nID,LPSTR lpStatusText) { if ( nID == IDS_CAP_END ) { if ( ( CurrentID == IDS_CAP_STAT_VIDEOAUDIO) || (CurrentID==IDS_CAP_STAT_VIDEOONLY) ) { return TRUE; } } CurrentID = nID; return TRUE; } LRESULT FAR PASCAL VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr) { unsigned char *bufi, *buf; bufi = new unsigned char[lpVHdr->dwBytesUsed+40]; buf = new unsigned char[lpVHdr->dwBytesUsed]; memcpy((void*)(bufi),lpVHdr->lpData,lpVHdr->dwBytesUsed); //??? unsigned char * buf1; buf1 = buf; if ( m_vfwSate == ENCDEC ) { buf1 = (unsigned char*)ICSeqCompressFrame(&pc,0,bufi,&IsKeyFrame,&FrameSize); /*if ( bSaveAVI ) { AVIStreamSetFormat(pMainFrame->ps,pMainFrame->m_Frame++,lpbiTmp,sizeof(BITMAPINFO)); AVIStreamWrite(pMainFrame->ps,pMainFrame->m_Frame,1,(LPBYTE)buf1,FrameSize,AVIIF_KEYFRAME,NULL,NULL); }*/ ICDecompress(hic2,0,&lpbiTmp->bmiHeader,buf1,&lpbiOut->bmiHeader,&bufo[40]); } else { memcpy(&buf[40],bufi,lpVHdr->dwBytesUsed); } delete bufi; delete buf; return (LRESULT) TRUE; }


