Camera: make external camera orientation configurable
Test: webcam preview has correct aspect ratio on phones Bug: 115774657 Change-Id: I8dcb1a55c4d63c9080f44b85e87d97c138bc5243
This commit is contained in:
parent
8930c48f1e
commit
1c30a5e375
3 changed files with 25 additions and 8 deletions
|
@ -378,8 +378,12 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
|
|||
const uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
|
||||
UPDATE(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE, ×tampSource, 1);
|
||||
|
||||
// Orientation probably isn't useful for external facing camera?
|
||||
const int32_t orientation = 0;
|
||||
// Orientation is a bit odd for external camera, but consider it as the orientation
|
||||
// between the external camera sensor (which is usually landscape) and the device's
|
||||
// natural display orientation. For devices with natural landscape display (ex: tablet/TV), the
|
||||
// orientation should be 0. For devices with natural portrait display (phone), the orientation
|
||||
// should be 270.
|
||||
const int32_t orientation = mCfg.orientation;
|
||||
UPDATE(ANDROID_SENSOR_ORIENTATION, &orientation, 1);
|
||||
|
||||
// android.shading
|
||||
|
|
|
@ -160,9 +160,11 @@ namespace external {
|
|||
namespace common {
|
||||
|
||||
namespace {
|
||||
const int kDefaultJpegBufSize = 5 << 20; // 5MB
|
||||
const int kDefaultNumVideoBuffer = 4;
|
||||
const int kDefaultNumStillBuffer = 2;
|
||||
const int kDefaultJpegBufSize = 5 << 20; // 5MB
|
||||
const int kDefaultNumVideoBuffer = 4;
|
||||
const int kDefaultNumStillBuffer = 2;
|
||||
const int kDefaultOrientation = 0; // suitable for natural landscape displays like tablet/TV
|
||||
// For phone devices 270 is better
|
||||
} // anonymous namespace
|
||||
|
||||
const char* ExternalCameraConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml";
|
||||
|
@ -276,10 +278,17 @@ ExternalCameraConfig ExternalCameraConfig::loadFromCfg(const char* cfgPath) {
|
|||
minStreamSize->UnsignedAttribute("height", /*Default*/0)};
|
||||
}
|
||||
|
||||
XMLElement *orientation = deviceCfg->FirstChildElement("Orientation");
|
||||
if (orientation == nullptr) {
|
||||
ALOGI("%s: no sensor orientation specified", __FUNCTION__);
|
||||
} else {
|
||||
ret.orientation = orientation->IntAttribute("degree", /*Default*/kDefaultOrientation);
|
||||
}
|
||||
|
||||
ALOGI("%s: external camera cfg loaded: maxJpgBufSize %d,"
|
||||
" num video buffers %d, num still buffers %d",
|
||||
" num video buffers %d, num still buffers %d, orientation %d",
|
||||
__FUNCTION__, ret.maxJpegBufSize,
|
||||
ret.numVideoBuffers, ret.numStillBuffers);
|
||||
ret.numVideoBuffers, ret.numStillBuffers, ret.orientation);
|
||||
for (const auto& limit : ret.fpsLimits) {
|
||||
ALOGI("%s: fpsLimitList: %dx%d@%f", __FUNCTION__,
|
||||
limit.size.width, limit.size.height, limit.fpsUpperBound);
|
||||
|
@ -292,7 +301,8 @@ ExternalCameraConfig ExternalCameraConfig::loadFromCfg(const char* cfgPath) {
|
|||
ExternalCameraConfig::ExternalCameraConfig() :
|
||||
maxJpegBufSize(kDefaultJpegBufSize),
|
||||
numVideoBuffers(kDefaultNumVideoBuffer),
|
||||
numStillBuffers(kDefaultNumStillBuffer) {
|
||||
numStillBuffers(kDefaultNumStillBuffer),
|
||||
orientation(kDefaultOrientation) {
|
||||
fpsLimits.push_back({/*Size*/{ 640, 480}, /*FPS upper bound*/30.0});
|
||||
fpsLimits.push_back({/*Size*/{1280, 720}, /*FPS upper bound*/7.5});
|
||||
fpsLimits.push_back({/*Size*/{1920, 1080}, /*FPS upper bound*/5.0});
|
||||
|
|
|
@ -80,6 +80,9 @@ struct ExternalCameraConfig {
|
|||
// Minimum output stream size
|
||||
Size minStreamSize;
|
||||
|
||||
// The value of android.sensor.orientation
|
||||
int32_t orientation;
|
||||
|
||||
private:
|
||||
ExternalCameraConfig();
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue