void CameraHardwareStub::initDefaultParameters() { CameraParameters p; p.setPreviewSize(176, 144); p.setPreviewFrameRate(15); p.setPreviewFormat("yuv422sp"); p.setPictureSize(kCannedJpegWidth, kCannedJpegHeight); p.setPictureFormat("jpeg"); if (setParameters(p) != NO_ERROR) { LOGE("Failed to set default parameters?!"); } }
void CameraHandler::setProperty(int propIdx, double value) { LOGD("CameraHandler::setProperty(%d, %f)", propIdx, value); switch (propIdx) { case ANDROID_CAMERA_PROPERTY_FRAMEWIDTH: { int w,h; params.getPreviewSize(&w, &h); w = (int)value; params.setPreviewSize(w, h); } break; case ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT: { int w,h; params.getPreviewSize(&w, &h); h = (int)value; params.setPreviewSize(w, h); } break; }; }
void CameraHardware::initDefaultParameters() { CameraParameters p; p.setPreviewSize(160, 120); p.setPreviewFrameRate(15); p.setPreviewFormat("rgb565"); p.setPictureSize(640, 480); p.setPictureFormat("rgb565"); if (setParameters(p) != NO_ERROR) { LOGE("Failed to set default parameters?!"); } }
void CameraHardwareStub::initDefaultParameters() { CameraParameters p; p.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, "320x240"); p.setPreviewSize(320, 240); p.setPreviewFrameRate(15); p.setPreviewFormat(CameraParameters::PIXEL_FORMAT_YUV420SP); p.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, "320x240"); p.setPictureSize(320, 240); p.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); if (setParameters(p) != NO_ERROR) { LOGE("Failed to set default parameters?!"); } }
void CameraHandler::setProperty(int propIdx, double value) { LOGD("CameraHandler::setProperty(%d, %f)", propIdx, value); switch (propIdx) { case ANDROID_CAMERA_PROPERTY_FRAMEWIDTH: { int w,h; params.getPreviewSize(&w, &h); w = (int)value; params.setPreviewSize(w, h); } break; case ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT: { int w,h; params.getPreviewSize(&w, &h); h = (int)value; params.setPreviewSize(w, h); } break; case ANDROID_CAMERA_PROPERTY_EXPOSURE: { int max_exposure = params.getInt("max-exposure-compensation"); int min_exposure = params.getInt("min-exposure-compensation"); if(max_exposure && min_exposure){ int exposure = (int)value; if(exposure >= min_exposure && exposure <= max_exposure){ params.set("exposure-compensation", exposure); } else { LOGE("Exposure compensation not in valid range (%i,%i).", min_exposure, max_exposure); } } else { LOGE("Exposure compensation adjust is not supported."); } } break; case ANDROID_CAMERA_PROPERTY_FLASH_MODE: { int new_val = (int)value; if(new_val >= 0 && new_val < ANDROID_CAMERA_FLASH_MODES_NUM){ const char* mode_name = flashModesNames[new_val]; if(is_supported(CameraParameters::KEY_SUPPORTED_FLASH_MODES, mode_name)) params.set(CameraParameters::KEY_FLASH_MODE, mode_name); else LOGE("Flash mode %s is not supported.", mode_name); } else { LOGE("Flash mode value not in valid range."); } } break; case ANDROID_CAMERA_PROPERTY_FOCUS_MODE: { int new_val = (int)value; if(new_val >= 0 && new_val < ANDROID_CAMERA_FOCUS_MODES_NUM){ const char* mode_name = focusModesNames[new_val]; if(is_supported(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, mode_name)) params.set(CameraParameters::KEY_FOCUS_MODE, mode_name); else LOGE("Focus mode %s is not supported.", mode_name); } else { LOGE("Focus mode value not in valid range."); } } break; case ANDROID_CAMERA_PROPERTY_WHITE_BALANCE: { int new_val = (int)value; if(new_val >= 0 && new_val < ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM){ const char* mode_name = whiteBalanceModesNames[new_val]; if(is_supported(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, mode_name)) params.set(CameraParameters::KEY_WHITE_BALANCE, mode_name); else LOGE("White balance mode %s is not supported.", mode_name); } else { LOGE("White balance mode value not in valid range."); } } break; case ANDROID_CAMERA_PROPERTY_ANTIBANDING: { int new_val = (int)value; if(new_val >= 0 && new_val < ANDROID_CAMERA_ANTIBANDING_MODES_NUM){ const char* mode_name = antibandingModesNames[new_val]; if(is_supported(CameraParameters::KEY_SUPPORTED_ANTIBANDING, mode_name)) params.set(CameraParameters::KEY_ANTIBANDING, mode_name); else LOGE("Antibanding mode %s is not supported.", mode_name); } else { LOGE("Antibanding mode value not in valid range."); } } break; default: LOGW("CameraHandler::setProperty - Unsupported property."); }; }
/*! \return 0 on success, otherwise error code */ int camera_open(void) { LOGE("%s",__FUNCTION__); CameraParameters params; status_t rtn; /* Open video device */ #ifdef CAMERA_FOR_SCANNER //pCamera = CameraScanner::connect(0); #ifdef CAMERA_FOR_SCANNER fd = open("/sys/devices/platform/image_sensor/currDrvIndex",O_RDWR); if(fd<0) { LOGE("Cannot open currDrvIndex\n"); return -1; } int temp = 20002; write(fd,"20002",5); fd_scanner1 = open(SE955_CHANNEL_NAME, O_RDONLY); #endif pCamera = Camera::connect(1); #else pCamera = CameraScanner::connect(ANDROID_CAMERA_ID); //pCamera = CameraScanner::connect(0); #endif if( pCamera == 0) { LOGE("Cannot connect to camera %d of: %i, %s\n", ANDROID_CAMERA_ID, errno, strerror(errno)); return -errno; } LOGE("Camera %d \n", ANDROID_CAMERA_ID); #ifdef CAMERA_FOR_SCANNER pCamera->setListener(&scannerListener); //enable data callback #else pCamera->setScannerListener(&scannerListener); //enable data callback #endif #ifdef VIDEO_SUBDEV /* Open subdevice */ video_subdev_handle = ::open(VIDEO_SUBDEV, O_RDWR); if (video_subdev_handle == -1) { LOGE("ERROR opening %s: %d\n", VIDEO_SUBDEV, errno); return -errno; } LOGE("Subdevice: %s, handle = %d\n", VIDEO_SUBDEV, video_subdev_handle); #endif ImagerProps.width = 256; ImagerProps.height = 64; #ifdef CAMERA_FOR_SCANNER //ImagerProps.width = 624; //ImagerProps.height = 474; ImagerProps.width = 640; ImagerProps.height = 480; ImagerProps.mount = 2; ImagerProps.i2c_addr_sensor = 0x48; ImagerProps.i2c_addr_psoc = 0x40; ImagerProps.i2c_addr_clock = 0x69; #else if( 0 != camera_ioctl(HSM_GET_PROPERTIES, &ImagerProps) ) { pCamera->disconnect(); LOGE("HSM_GET_PROPERTIES error %d\n", errno); return -1; } #endif #ifdef CAMERA_FOR_SCANNER #else LOGE("Image size = %dx%d\n", ImagerProps.width, ImagerProps.height); #endif cbBufLength = ImagerProps.height * ImagerProps.width; params.unflatten(pCamera->getParameters()); params.set("mtk-cam-mode", 1); #if 0 //def CAMERA_FOR_SCANNER #else params.set("scanner-mode", "on"); #endif params.setPreviewSize(ImagerProps.width, ImagerProps.height); //params.setPreviewFormat("yuv422i-yuyv"); // FIXME: "raw" //params.setPreviewFormat("yuv420sp"); // FIXME: "raw" rtn = pCamera->setParameters(params.flatten()); if( rtn != OK ) { LOGE("setParameters error %d\n", rtn); } #ifdef CAMERA_FOR_SCANNER if(fd>=0)write(fd,"20001",5); #endif #if 0 rtn = pCamera->setPreviewTexture(dummy_texture); // FIXME: Is there a dummy texture? if( rtn != OK ) { KIL_ERR("setPreviewDisplay error %d\n", rtn); } #endif return 0; }
NS_IMETHODIMP GonkCameraInputStream::Init(nsACString& aContentType, nsCaptureParams* aParams) { if (XRE_GetProcessType() != GeckoProcessType_Default) return NS_ERROR_NOT_IMPLEMENTED; mContentType = aContentType; mWidth = aParams->width; mHeight = aParams->height; mCamera = aParams->camera; PRUint32 maxNumCameras = getNumberOfCameras(); if (maxNumCameras == 0) return NS_ERROR_FAILURE; if (mCamera >= maxNumCameras) mCamera = 0; mHardware = CameraHardwareInterface::openCamera(mCamera); if (!mHardware) return NS_ERROR_FAILURE; mHardware->setCallbacks(NULL, GonkCameraInputStream::DataCallback, NULL, this); mHardware->enableMsgType(CAMERA_MSG_PREVIEW_FRAME); CameraParameters params = mHardware->getParameters(); printf_stderr("Preview format : %s\n", params.get(params.KEY_SUPPORTED_PREVIEW_FORMATS)); Vector<Size> previewSizes; params.getSupportedPreviewSizes(previewSizes); // find the available preview size closest to the requested size. PRUint32 minSizeDelta = PR_UINT32_MAX; PRUint32 bestWidth = mWidth; PRUint32 bestHeight = mHeight; for (PRUint32 i = 0; i < previewSizes.size(); i++) { Size size = previewSizes[i]; PRUint32 delta = abs(size.width * size.height - mWidth * mHeight); if (delta < minSizeDelta) { minSizeDelta = delta; bestWidth = size.width; bestHeight = size.height; } } mWidth = bestWidth; mHeight = bestHeight; params.setPreviewSize(mWidth, mHeight); // try to set preferred image format params.setPreviewFormat("yuv420p"); params.setPreviewFrameRate(mFps); mHardware->setParameters(params); params = mHardware->getParameters(); mFps = params.getPreviewFrameRate(); mIs420p = !strcmp(params.getPreviewFormat(), "yuv420p"); mHardware->startPreview(); mClosed = false; return NS_OK; }