diff options
Diffstat (limited to 'services/camera/libcameraservice')
3 files changed, 18 insertions, 11 deletions
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp index 9c4f9cd..b6f6677 100644 --- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp +++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp @@ -691,15 +691,10 @@ status_t CameraDeviceClient::prepare(int streamId) { return BAD_VALUE; } - // Also returns BAD_VALUE if stream ID was not valid + // Also returns BAD_VALUE if stream ID was not valid, or stream already + // has been used res = mDevice->prepare(streamId); - if (res == BAD_VALUE) { - ALOGE("%s: Camera %d: Unexpected BAD_VALUE when preparing stream, but we" - " already checked and the stream ID (%d) should be valid.", - __FUNCTION__, mCameraId, streamId); - } - return res; } diff --git a/services/camera/libcameraservice/common/CameraModule.cpp b/services/camera/libcameraservice/common/CameraModule.cpp index 064ff71..c662853 100644 --- a/services/camera/libcameraservice/common/CameraModule.cpp +++ b/services/camera/libcameraservice/common/CameraModule.cpp @@ -31,6 +31,7 @@ void CameraModule::deriveCameraCharacteristicsKeys( // Keys added in HAL3.3 if (deviceVersion < CAMERA_DEVICE_API_VERSION_3_3) { + const size_t NUM_DERIVED_KEYS_HAL3_3 = 3; Vector<uint8_t> controlModes; uint8_t data = ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE; chars.update(ANDROID_CONTROL_AE_LOCK_AVAILABLE, &data, /*count*/1); @@ -78,6 +79,17 @@ void CameraModule::deriveCameraCharacteristicsKeys( } chars.update(ANDROID_CONTROL_AVAILABLE_MODES, controlModes); + + entry = chars.find(ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS); + Vector<int32_t> availableCharsKeys; + availableCharsKeys.setCapacity(entry.count + NUM_DERIVED_KEYS_HAL3_3); + for (size_t i = 0; i < entry.count; i++) { + availableCharsKeys.push(entry.data.i32[i]); + } + availableCharsKeys.push(ANDROID_CONTROL_AE_LOCK_AVAILABLE); + availableCharsKeys.push(ANDROID_CONTROL_AWB_LOCK_AVAILABLE_TRUE); + availableCharsKeys.push(ANDROID_CONTROL_AVAILABLE_MODES); + chars.update(ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, availableCharsKeys); } return; } diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index d2c2482..445c9c2 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -1342,6 +1342,8 @@ status_t Camera3Device::flush(int64_t *frameNumber) { status_t Camera3Device::prepare(int streamId) { ATRACE_CALL(); ALOGV("%s: Camera %d: Preparing stream %d", __FUNCTION__, mId, streamId); + Mutex::Autolock il(mInterfaceLock); + Mutex::Autolock l(mLock); sp<Camera3StreamInterface> stream; ssize_t outputStreamIdx = mOutputStreams.indexOfKey(streamId); @@ -1353,14 +1355,12 @@ status_t Camera3Device::prepare(int streamId) { stream = mOutputStreams.editValueAt(outputStreamIdx); if (stream->isUnpreparable() || stream->hasOutstandingBuffers() ) { - ALOGE("%s: Camera %d: Stream %d has already been a request target", - __FUNCTION__, mId, streamId); + CLOGE("Stream %d has already been a request target", streamId); return BAD_VALUE; } if (mRequestThread->isStreamPending(stream)) { - ALOGE("%s: Camera %d: Stream %d is already a target in a pending request", - __FUNCTION__, mId, streamId); + CLOGE("Stream %d is already a target in a pending request", streamId); return BAD_VALUE; } |