diff options
Diffstat (limited to 'services')
7 files changed, 47 insertions, 13 deletions
diff --git a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp index 2c51e25..b212ca6 100644 --- a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp @@ -80,9 +80,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state) Mutex::Autolock _l(mLock); mAudioPolicyManager->setPhoneState(state); + mPhoneState = state; return NO_ERROR; } +audio_mode_t AudioPolicyService::getPhoneState() +{ + Mutex::Autolock _l(mLock); + return mPhoneState; +} + status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { diff --git a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp index f20c070..1e40bc3 100644 --- a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp +++ b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp @@ -84,9 +84,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state) Mutex::Autolock _l(mLock); mpAudioPolicy->set_phone_state(mpAudioPolicy, state); + mPhoneState = state; return NO_ERROR; } +audio_mode_t AudioPolicyService::getPhoneState() +{ + Mutex::Autolock _l(mLock); + return mPhoneState; +} + status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp index 50bb8c7..647cda4 100644 --- a/services/audiopolicy/AudioPolicyService.cpp +++ b/services/audiopolicy/AudioPolicyService.cpp @@ -59,7 +59,7 @@ namespace { AudioPolicyService::AudioPolicyService() : BnAudioPolicyService(), mpAudioPolicyDev(NULL), mpAudioPolicy(NULL), - mAudioPolicyManager(NULL), mAudioPolicyClient(NULL) + mAudioPolicyManager(NULL), mAudioPolicyClient(NULL), mPhoneState(AUDIO_MODE_INVALID) { char value[PROPERTY_VALUE_MAX]; const struct hw_module_t *module; diff --git a/services/audiopolicy/AudioPolicyService.h b/services/audiopolicy/AudioPolicyService.h index 0044e7a..2cea40b 100644 --- a/services/audiopolicy/AudioPolicyService.h +++ b/services/audiopolicy/AudioPolicyService.h @@ -174,6 +174,8 @@ public: virtual status_t releaseSoundTriggerSession(audio_session_t session); + virtual audio_mode_t getPhoneState(); + status_t doStopOutput(audio_io_handle_t output, audio_stream_type_t stream, int session = 0); @@ -493,6 +495,7 @@ private: // Manage all effects configured in audio_effects.conf sp<AudioPolicyEffects> mAudioPolicyEffects; + audio_mode_t mPhoneState; }; }; // namespace android diff --git a/services/camera/libcameraservice/api1/client2/Parameters.cpp b/services/camera/libcameraservice/api1/client2/Parameters.cpp index aa9d746..9818c96 100644 --- a/services/camera/libcameraservice/api1/client2/Parameters.cpp +++ b/services/camera/libcameraservice/api1/client2/Parameters.cpp @@ -643,11 +643,10 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, supportedFlashModes); } else { - flashMode = Parameters::FLASH_MODE_OFF; - params.set(CameraParameters::KEY_FLASH_MODE, - CameraParameters::FLASH_MODE_OFF); - params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, - CameraParameters::FLASH_MODE_OFF); + // No flash means null flash mode and supported flash modes keys, so + // remove them just to be safe + params.remove(CameraParameters::KEY_FLASH_MODE); + params.remove(CameraParameters::KEY_SUPPORTED_FLASH_MODES); } camera_metadata_ro_entry_t minFocusDistance = @@ -1617,7 +1616,9 @@ status_t Parameters::set(const String8& paramString) { if (validatedParams.flashMode != flashMode) { camera_metadata_ro_entry_t flashAvailable = staticInfo(ANDROID_FLASH_INFO_AVAILABLE, 1, 1); - if (!flashAvailable.data.u8[0] && + bool isFlashAvailable = + flashAvailable.data.u8[0] == ANDROID_FLASH_INFO_AVAILABLE_TRUE; + if (!isFlashAvailable && validatedParams.flashMode != Parameters::FLASH_MODE_OFF) { ALOGE("%s: Requested flash mode \"%s\" is not supported: " "No flash on device", __FUNCTION__, @@ -1642,9 +1643,11 @@ status_t Parameters::set(const String8& paramString) { newParams.get(CameraParameters::KEY_FLASH_MODE)); return BAD_VALUE; } - // Update in case of override - newParams.set(CameraParameters::KEY_FLASH_MODE, - flashModeEnumToString(validatedParams.flashMode)); + // Update in case of override, but only if flash is supported + if (isFlashAvailable) { + newParams.set(CameraParameters::KEY_FLASH_MODE, + flashModeEnumToString(validatedParams.flashMode)); + } } // WHITE_BALANCE @@ -2386,7 +2389,7 @@ Parameters::Parameters::flashMode_t Parameters::flashModeStringToEnum( const char *flashMode) { return !flashMode ? - Parameters::FLASH_MODE_INVALID : + Parameters::FLASH_MODE_OFF : !strcmp(flashMode, CameraParameters::FLASH_MODE_OFF) ? Parameters::FLASH_MODE_OFF : !strcmp(flashMode, CameraParameters::FLASH_MODE_AUTO) ? diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp index 169eb82..77ad503 100644 --- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp +++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp @@ -37,7 +37,8 @@ Camera3OutputStream::Camera3OutputStream(int id, Camera3IOStreamBase(id, CAMERA3_STREAM_OUTPUT, width, height, /*maxSize*/0, format), mConsumer(consumer), - mTransform(0) { + mTransform(0), + mTraceFirstBuffer(true) { if (mConsumer == NULL) { ALOGE("%s: Consumer is NULL!", __FUNCTION__); @@ -51,7 +52,8 @@ Camera3OutputStream::Camera3OutputStream(int id, Camera3IOStreamBase(id, CAMERA3_STREAM_OUTPUT, width, height, maxSize, format), mConsumer(consumer), - mTransform(0) { + mTransform(0), + mTraceFirstBuffer(true) { if (format != HAL_PIXEL_FORMAT_BLOB) { ALOGE("%s: Bad format for size-only stream: %d", __FUNCTION__, @@ -202,6 +204,15 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( " %s (%d)", __FUNCTION__, mId, strerror(-res), res); } } else { + if (mTraceFirstBuffer && (stream_type == CAMERA3_STREAM_OUTPUT)) { + { + char traceLog[48]; + snprintf(traceLog, sizeof(traceLog), "Stream %d: first full buffer\n", mId); + ATRACE_NAME(traceLog); + } + mTraceFirstBuffer = false; + } + res = currentConsumer->queueBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); @@ -257,6 +268,7 @@ status_t Camera3OutputStream::setTransformLocked(int transform) { status_t Camera3OutputStream::configureQueueLocked() { status_t res; + mTraceFirstBuffer = true; if ((res = Camera3IOStreamBase::configureQueueLocked()) != OK) { return res; } diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.h b/services/camera/libcameraservice/device3/Camera3OutputStream.h index f963326..be278c5 100644 --- a/services/camera/libcameraservice/device3/Camera3OutputStream.h +++ b/services/camera/libcameraservice/device3/Camera3OutputStream.h @@ -84,6 +84,8 @@ class Camera3OutputStream : virtual status_t setTransformLocked(int transform); + bool mTraceFirstBuffer; + /** * Internal Camera3Stream interface */ |