const char* CameraHal::getPixelFormatConstant(const char* parametersFormat) { const char *pixelFormat = NULL; if ( NULL != parametersFormat ) { if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV422I) ) { CAMHAL_LOGVA("CbYCrY format selected"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV422I; } else if ( (0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP)) || (0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420P)) ) { // TODO(XXX): We are treating YV12 the same as YUV420SP CAMHAL_LOGVA("YUV420SP format selected"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_RGB565) ) { CAMHAL_LOGVA("RGB565 format selected"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_RGB565; } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ) { CAMHAL_LOGVA("BAYER format selected"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB; } else if ( 0 == strcmp(parametersFormat, android::CameraParameters::PIXEL_FORMAT_JPEG) ) { CAMHAL_LOGVA("JPEG format selected"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_JPEG; } else { CAMHAL_LOGEA("Invalid format, NV12 format selected as default"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; } } else { CAMHAL_LOGEA("Preview format is NULL, defaulting to NV12"); pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; } return pixelFormat; }
static int sensor_events_listener(int fd, int events, void* data) { SensorListener* listener = (SensorListener*) data; ssize_t num_sensors; ASensorEvent sen_events[8]; while ((num_sensors = listener->mSensorEventQueue->read(sen_events, 8)) > 0) { for (int i = 0; i < num_sensors; i++) { if (sen_events[i].type == Sensor::TYPE_ACCELEROMETER) { float x = sen_events[i].vector.azimuth; float y = sen_events[i].vector.pitch; float z = sen_events[i].vector.roll; float radius = 0; int tilt = 0, orient = 0; CAMHAL_LOGVA("ACCELEROMETER EVENT"); CAMHAL_LOGVB(" azimuth = %f pitch = %f roll = %f", sen_events[i].vector.azimuth, sen_events[i].vector.pitch, sen_events[i].vector.roll); // see http://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates // about conversion from cartesian to spherical for orientation calculations radius = (float) sqrt(x * x + y * y + z * z); tilt = (int) asinf(z / radius) * RADIANS_2_DEG; orient = (int) atan2f(-x, y) * RADIANS_2_DEG; if (orient < 0) { orient += 360; } if (orient >= DEGREES_270_THRESH) { orient = 270; } else if (orient >= DEGREES_180_THRESH) { orient = 180; } else if (orient >= DEGREES_90_THRESH) { orient = 90; } else { orient = 0; } listener->handleOrientation(orient, tilt); CAMHAL_LOGVB(" tilt = %d orientation = %d", tilt, orient); } else if (sen_events[i].type == Sensor::TYPE_GYROSCOPE) { CAMHAL_LOGVA("GYROSCOPE EVENT"); } } } if (num_sensors < 0 && num_sensors != -EAGAIN) { CAMHAL_LOGEB("reading events failed: %s", strerror(-num_sensors)); } return 1; }