void FWCamera::startCapture() { #ifdef AVG_ENABLE_1394_2 int err = dc1394_video_set_transmission(m_pCamera, DC1394_ON); AVG_ASSERT(err == DC1394_SUCCESS); dc1394switch_t status = DC1394_OFF; int i = 0; while (status == DC1394_OFF && i++ < 5) { usleep(50000); err = dc1394_video_get_transmission(m_pCamera, &status); AVG_ASSERT(err == DC1394_SUCCESS); } if (i == 5) { AVG_ASSERT(false); } // Default to turning off any camera sharpness manipulation. setFeature(CAM_FEATURE_SHARPNESS, 0); // Turn off possible auto exposure. dc1394_feature_set_mode(m_pCamera, DC1394_FEATURE_EXPOSURE, DC1394_FEATURE_MODE_MANUAL); dc1394_feature_set_power(m_pCamera, DC1394_FEATURE_EXPOSURE, DC1394_OFF); AVG_TRACE(Logger::category::CONFIG, Logger::severity::INFO, "Firewire camera opened."); for (FeatureMap::iterator it=m_Features.begin(); it != m_Features.end(); it++) { setFeature(it->first, it->second, true); } setWhitebalance(m_WhitebalanceU, m_WhitebalanceV, true); if (getCamPF() == BAYER8) { if (strcmp(m_pCamera->model, "DFx 31BF03") == 0) { AVG_TRACE(Logger::category::CONFIG, Logger::severity::INFO, "Applying bayer pattern fixup for IS DFx31BF03 camera"); setCamPF(BAYER8_GRBG); } else if (strcmp(m_pCamera->vendor, "Point Grey Research") == 0) { AVG_TRACE(Logger::category::CONFIG, Logger::severity::INFO, "Applying bayer pattern fixup for PointGrey cameras"); enablePtGreyBayer(); } } #endif }
CMUCamera::CMUCamera(long long guid, bool bFW800, IntPoint size, PixelFormat camPF, PixelFormat destPF, float frameRate) : Camera(camPF, destPF, size, frameRate), m_WhitebalanceU(-1), m_WhitebalanceV(-1), m_pCamera(0) { m_pCamera = new C1394Camera(); int err; unsigned long videoFormat, videoMode; getVideoFormatAndMode(getImgSize(), getCamPF(), &videoFormat, &videoMode); // Find and open camera if (m_pCamera->RefreshCameraList() <= 0) { throw Exception(AVG_ERR_CAMERA_NONFATAL, "No Firewire cameras found"); } int i = getCamIndex(guid); err = m_pCamera->SelectCamera(i); err = m_pCamera->InitCamera(TRUE); AVG_ASSERT(err == CAM_SUCCESS); if (bFW800) { m_pCamera->Set1394b(true); } // Setup video format and rate err = m_pCamera->SetVideoFormat(videoFormat); checkCMUError(err, AVG_ERR_CAMERA_NONFATAL, string("CMUCamera: Error setting video format ") + toString(videoFormat) + ", mode: " + toString(videoMode)); err = m_pCamera->SetVideoMode(videoMode); checkCMUError(err, AVG_ERR_CAMERA_NONFATAL, string("CMUCamera: Error setting video mode ") + toString(videoMode) + ", format: " + toString(videoFormat)); err = m_pCamera->SetVideoFrameRate(getFrameRateConst(getFrameRate())); checkCMUError(err, AVG_ERR_CAMERA_NONFATAL, "Error setting frame rate"); // Start capturing images err = m_pCamera->StartImageAcquisition(); if (err != CAM_SUCCESS) { throw Exception(AVG_ERR_CAMERA_NONFATAL, "CMUCamera: Could not start image acquisition. " + CMUErrorToString(err)); } // Set camera features for (FeatureMap::iterator it=m_Features.begin(); it != m_Features.end(); it++) { setFeature(it->first, it->second, true); } setWhitebalance(m_WhitebalanceU, m_WhitebalanceV, true); if (camPF == BAYER8) { char sModel[256], sVendor[256]; m_pCamera->GetCameraName(sModel, 256); m_pCamera->GetCameraVendor(sVendor, 256); if (strcmp(sModel, "DFx 31BF03") == 0) { AVG_TRACE(Logger::CONFIG, "Applying bayer pattern fixup for IS DFx31BF03 camera"); setCamPF(BAYER8_GRBG); } else if (strcmp(sVendor, "Point Grey Research") == 0) { AVG_TRACE(Logger::CONFIG, "Applying bayer pattern fixup for PointGrey cameras"); enablePtGreyBayer(); } } }