void VideoGrabber::Init() { mGrabNextFrame = FALSE; mPreviousFrameExists = FALSE; // Setup capture window and connect webcam driver camhwnd = capCreateCaptureWindow (_T("Ahtung!"), 0 , 0, 0, FRAME_WIDTH, FRAME_HEIGHT, 0, 0); SendMessage(camhwnd, WM_CAP_DRIVER_CONNECT, 0, 0); capSetCallbackOnFrame(camhwnd, FrameCallbackProc); capSetCallbackOnVideoStream(camhwnd, FrameCallbackProc); // Use same callback function, consider mGrabNextFrame flag! capSetUserData(camhwnd, this); // Callback functions may use pointer to this VideoGrabber if (mPreviousFrame != NULL) { delete[] mPreviousFrame; mPreviousFrame = NULL; } mMotionDetectedDuringLastSecond = FALSE; // TODO: Use MPEGLAYER3WAVEFORMAT instead this // Setup audio params WAVEFORMATEX wfex; wfex.wFormatTag = WAVE_FORMAT_PCM; wfex.nChannels = 1; // Use mono wfex.nSamplesPerSec = 8000; wfex.nAvgBytesPerSec = 8000; wfex.nBlockAlign = 1; wfex.wBitsPerSample = 8; wfex.cbSize = 0; capSetAudioFormat(camhwnd, &wfex, sizeof(WAVEFORMATEX)); // Setup video capturing and streaming CAPTUREPARMS parms; capCaptureGetSetup(camhwnd, &parms, sizeof(CAPTUREPARMS)); parms.fAbortLeftMouse = FALSE; parms.wPercentDropForError = 100; // Never abort capturing in case of dropped frames parms.fAbortRightMouse = FALSE; //parms.fLimitEnabled = TRUE; //parms.wTimeLimit = 0; // TODO! parms.fYield = TRUE; // TODO! capCaptureSetSetup(camhwnd, &parms, sizeof(parms)); // !!! capSetCallbackOnError(camhwnd, capErrorCallback); // Resume thread for motion detection mListenerHandle = CreateThread(0, 0, ListeningRoutine, this, CREATE_SUSPENDED, &mThreadID); SetEnabled(TRUE); ResumeThread(mListenerHandle); }
void CWinVideoGrabber::setAudioFormat(int p_channels, int p_bits_per_sample, int p_sample_rate) { if (!inited) return; WAVEFORMATEX t_wave_format; capGetAudioFormat(videowindow, &t_wave_format, sizeof(WAVEFORMATEX)); t_wave_format . nChannels = p_channels; t_wave_format . wBitsPerSample = p_bits_per_sample; t_wave_format . nSamplesPerSec = p_sample_rate; BOOL t_result; t_result = capSetAudioFormat(videowindow, &t_wave_format, sizeof(t_wave_format)); }