diff options
| author | Eino-Ville Talvala <etalvala@google.com> | 2012-10-02 18:14:49 -0700 |
|---|---|---|
| committer | Eino-Ville Talvala <etalvala@google.com> | 2012-10-02 18:47:07 -0700 |
| commit | e382ee28709b83264a46b09e8f766c5ef42efa35 (patch) | |
| tree | 21094a19c13fb1843faf11c9f348d4249e0b388a /services/camera | |
| parent | 8a42dd8cd1a245d844f96cfd67dc342d7937e353 (diff) | |
| download | frameworks_av-e382ee28709b83264a46b09e8f766c5ef42efa35.zip frameworks_av-e382ee28709b83264a46b09e8f766c5ef42efa35.tar.gz frameworks_av-e382ee28709b83264a46b09e8f766c5ef42efa35.tar.bz2 | |
Camera2: Use ZSL format quirk.
Switch service to using HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
unless ZSL quirk is set.
This is important for compatibility across multiple implementations.
Bug: 6243944
Change-Id: Iea74671cbb44890a07e4f99cd757b0a5423d447a
Diffstat (limited to 'services/camera')
4 files changed, 40 insertions, 2 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp index 1c650f6..ffb2c58 100644 --- a/services/camera/libcameraservice/Camera2Client.cpp +++ b/services/camera/libcameraservice/Camera2Client.cpp @@ -315,6 +315,21 @@ status_t Camera2Client::dump(int fd, const Vector<String16>& args) { getCaptureStreamId()); result.appendFormat(" Recording stream ID: %d\n", getRecordingStreamId()); + + result.append(" Quirks for this camera:\n"); + bool haveQuirk = false; + if (p.quirks.triggerAfWithAuto) { + result.appendFormat(" triggerAfWithAuto\n"); + haveQuirk = true; + } + if (p.quirks.useZslFormat) { + result.appendFormat(" useZslFormat\n"); + haveQuirk = true; + } + if (!haveQuirk) { + result.appendFormat(" none\n"); + } + write(fd, result.string(), result.size()); mStreamingProcessor->dump(fd, args); diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp index fd44a3e..5248e97 100644 --- a/services/camera/libcameraservice/camera2/Parameters.cpp +++ b/services/camera/libcameraservice/camera2/Parameters.cpp @@ -53,6 +53,9 @@ status_t Parameters::initialize(const CameraMetadata *info) { res = buildFastInfo(); if (res != OK) return res; + res = buildQuirks(); + if (res != OK) return res; + camera_metadata_ro_entry_t availableProcessedSizes = staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); if (!availableProcessedSizes.count) return NO_INIT; @@ -891,6 +894,21 @@ status_t Parameters::buildFastInfo() { return OK; } +status_t Parameters::buildQuirks() { + camera_metadata_ro_entry_t entry; + entry = info->find(ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO); + quirks.triggerAfWithAuto = (entry.count != 0 && entry.data.u8[0] == 1); + ALOGV_IF(quirks.triggerAfWithAuto, "Camera %d: Quirk triggerAfWithAuto enabled", + cameraId); + + entry = info->find(ANDROID_QUIRKS_USE_ZSL_FORMAT); + quirks.useZslFormat = (entry.count != 0 && entry.data.u8[0] == 1); + ALOGV_IF(quirks.useZslFormat, "Camera %d: Quirk useZslFormat enabled", + cameraId); + + return OK; +} + camera_metadata_ro_entry_t Parameters::staticInfo(uint32_t tag, size_t minCount, size_t maxCount) const { status_t res; diff --git a/services/camera/libcameraservice/camera2/Parameters.h b/services/camera/libcameraservice/camera2/Parameters.h index c587ca5..47eb993 100644 --- a/services/camera/libcameraservice/camera2/Parameters.h +++ b/services/camera/libcameraservice/camera2/Parameters.h @@ -195,8 +195,10 @@ struct Parameters { // Sets up default parameters status_t initialize(const CameraMetadata *info); - // Build fast device info + // Build fast-access device static info from static info status_t buildFastInfo(); + // Query for quirks from static info + status_t buildQuirks(); // Get entry from camera static characteristics information. min/maxCount // are used for error checking the number of values in the entry. 0 for diff --git a/services/camera/libcameraservice/camera2/ZslProcessor.cpp b/services/camera/libcameraservice/camera2/ZslProcessor.cpp index 9516f97..f462527 100644 --- a/services/camera/libcameraservice/camera2/ZslProcessor.cpp +++ b/services/camera/libcameraservice/camera2/ZslProcessor.cpp @@ -161,9 +161,12 @@ status_t ZslProcessor::updateStream(const Parameters ¶ms) { if (mZslStreamId == NO_STREAM) { // Create stream for HAL production // TODO: Sort out better way to select resolution for ZSL + int streamType = params.quirks.useZslFormat ? + (int)CAMERA2_HAL_PIXEL_FORMAT_ZSL : + (int)HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED; res = device->createStream(mZslWindow, params.fastInfo.arrayWidth, params.fastInfo.arrayHeight, - CAMERA2_HAL_PIXEL_FORMAT_ZSL, 0, + streamType, 0, &mZslStreamId); if (res != OK) { ALOGE("%s: Camera %d: Can't create output stream for ZSL: " |
