diff options
author | Igor Murashkin <iam@google.com> | 2014-08-19 14:53:08 -0700 |
---|---|---|
committer | Igor Murashkin <iam@google.com> | 2014-08-19 15:19:58 -0700 |
commit | a858ea0495c887621a2fd9c0afc13780deccb597 (patch) | |
tree | dbe17ab6e77cfe3e40ce6c8114898e3ac5aef5b4 /services/camera/libcameraservice | |
parent | 97c7fa1b1596a062147f034a2b44781193c052cf (diff) | |
download | frameworks_av-a858ea0495c887621a2fd9c0afc13780deccb597.zip frameworks_av-a858ea0495c887621a2fd9c0afc13780deccb597.tar.gz frameworks_av-a858ea0495c887621a2fd9c0afc13780deccb597.tar.bz2 |
camera: Allow shutter sounds to be disabled from camera2 api
When using the connectLegacy binder interface (available only
through an @hide java api), then consider the camera to be in the
camera2 api legacy mode.
In legacy mode, allow disabling the shutter sound unconditionally.
Bug: 17109582
Change-Id: Ieb3fc61ff111d792cc657c018e278349c25472cf
Diffstat (limited to 'services/camera/libcameraservice')
6 files changed, 61 insertions, 32 deletions
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 7766b90..fd5a426 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -487,12 +487,12 @@ status_t CameraService::initializeShimMetadata(int cameraId) { } if (client == NULL) { needsNewClient = true; - ret = connectHelperLocked(/*cameraClient*/NULL, // Empty binder callbacks + ret = connectHelperLocked(/*out*/client, + /*cameraClient*/NULL, // Empty binder callbacks cameraId, internalPackageName, uid, - pid, - client); + pid); if (ret != OK) { // Error already logged by callee @@ -659,14 +659,17 @@ bool CameraService::canConnectUnsafe(int cameraId, return true; } -status_t CameraService::connectHelperLocked(const sp<ICameraClient>& cameraClient, - int cameraId, - const String16& clientPackageName, - int clientUid, - int callingPid, - /*out*/ - sp<Client>& client, - int halVersion) { +status_t CameraService::connectHelperLocked( + /*out*/ + sp<Client>& client, + /*in*/ + const sp<ICameraClient>& cameraClient, + int cameraId, + const String16& clientPackageName, + int clientUid, + int callingPid, + int halVersion, + bool legacyMode) { int facing = -1; int deviceVersion = getDeviceVersion(cameraId, &facing); @@ -678,7 +681,7 @@ status_t CameraService::connectHelperLocked(const sp<ICameraClient>& cameraClien case CAMERA_DEVICE_API_VERSION_1_0: client = new CameraClient(this, cameraClient, clientPackageName, cameraId, - facing, callingPid, clientUid, getpid()); + facing, callingPid, clientUid, getpid(), legacyMode); break; case CAMERA_DEVICE_API_VERSION_2_0: case CAMERA_DEVICE_API_VERSION_2_1: @@ -687,7 +690,7 @@ status_t CameraService::connectHelperLocked(const sp<ICameraClient>& cameraClien case CAMERA_DEVICE_API_VERSION_3_2: client = new Camera2Client(this, cameraClient, clientPackageName, cameraId, - facing, callingPid, clientUid, getpid()); + facing, callingPid, clientUid, getpid(), legacyMode); break; case -1: ALOGE("Invalid camera id %d", cameraId); @@ -704,7 +707,7 @@ status_t CameraService::connectHelperLocked(const sp<ICameraClient>& cameraClien // Only support higher HAL version device opened as HAL1.0 device. client = new CameraClient(this, cameraClient, clientPackageName, cameraId, - facing, callingPid, clientUid, getpid()); + facing, callingPid, clientUid, getpid(), legacyMode); } else { // Other combinations (e.g. HAL3.x open as HAL2.x) are not supported yet. ALOGE("Invalid camera HAL version %x: HAL %x device can only be" @@ -760,12 +763,12 @@ status_t CameraService::connect( return OK; } - status = connectHelperLocked(cameraClient, + status = connectHelperLocked(/*out*/client, + cameraClient, cameraId, clientPackageName, clientUid, - callingPid, - client); + callingPid); if (status != OK) { return status; } @@ -823,13 +826,14 @@ status_t CameraService::connectLegacy( return OK; } - status = connectHelperLocked(cameraClient, + status = connectHelperLocked(/*out*/client, + cameraClient, cameraId, clientPackageName, clientUid, callingPid, - client, - halVersion); + halVersion, + /*legacyMode*/true); if (status != OK) { return status; } diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h index cb98c96..a7328cf 100644 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -452,14 +452,17 @@ private: * * Returns OK on success, or a negative error code. */ - status_t connectHelperLocked(const sp<ICameraClient>& cameraClient, - int cameraId, - const String16& clientPackageName, - int clientUid, - int callingPid, - /*out*/ - sp<Client>& client, - int halVersion = CAMERA_HAL_API_VERSION_UNSPECIFIED); + status_t connectHelperLocked( + /*out*/ + sp<Client>& client, + /*in*/ + const sp<ICameraClient>& cameraClient, + int cameraId, + const String16& clientPackageName, + int clientUid, + int callingPid, + int halVersion = CAMERA_HAL_API_VERSION_UNSPECIFIED, + bool legacyMode = false); }; } // namespace android diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp index 5eb5181..bc40971 100644 --- a/services/camera/libcameraservice/api1/Camera2Client.cpp +++ b/services/camera/libcameraservice/api1/Camera2Client.cpp @@ -53,7 +53,8 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, int cameraFacing, int clientPid, uid_t clientUid, - int servicePid): + int servicePid, + bool legacyMode): Camera2ClientBase(cameraService, cameraClient, clientPackageName, cameraId, cameraFacing, clientPid, clientUid, servicePid), mParameters(cameraId, cameraFacing) @@ -62,6 +63,8 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, SharedParameters::Lock l(mParameters); l.mParameters.state = Parameters::DISCONNECTED; + + mLegacyMode = legacyMode; } status_t Camera2Client::initialize(camera_module_t *module) @@ -1449,6 +1452,13 @@ status_t Camera2Client::commandEnableShutterSoundL(bool enable) { return OK; } + // the camera2 api legacy mode can unconditionally disable the shutter sound + if (mLegacyMode) { + ALOGV("%s: Disable shutter sound in legacy mode", __FUNCTION__); + l.mParameters.playShutterSound = false; + return OK; + } + // Disabling shutter sound may not be allowed. In that case only // allow the mediaserver process to disable the sound. char value[PROPERTY_VALUE_MAX]; diff --git a/services/camera/libcameraservice/api1/Camera2Client.h b/services/camera/libcameraservice/api1/Camera2Client.h index 5ce757a..f5c3a30 100644 --- a/services/camera/libcameraservice/api1/Camera2Client.h +++ b/services/camera/libcameraservice/api1/Camera2Client.h @@ -89,7 +89,8 @@ public: int cameraFacing, int clientPid, uid_t clientUid, - int servicePid); + int servicePid, + bool legacyMode); virtual ~Camera2Client(); @@ -203,6 +204,7 @@ private: bool mAfInMotion; /** Utility members */ + bool mLegacyMode; // Wait until the camera device has received the latest control settings status_t syncWithDevice(); diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp index fb6b678..abe1235 100644 --- a/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/services/camera/libcameraservice/api1/CameraClient.cpp @@ -38,7 +38,7 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService, const String16& clientPackageName, int cameraId, int cameraFacing, int clientPid, int clientUid, - int servicePid): + int servicePid, bool legacyMode): Client(cameraService, cameraClient, clientPackageName, cameraId, cameraFacing, clientPid, clientUid, servicePid) { @@ -54,6 +54,7 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService, // Callback is disabled by default mPreviewCallbackFlag = CAMERA_FRAME_CALLBACK_FLAG_NOOP; mOrientation = getOrientation(0, mCameraFacing == CAMERA_FACING_FRONT); + mLegacyMode = legacyMode; mPlayShutterSound = true; LOG1("CameraClient::CameraClient X (pid %d, id %d)", callingPid, cameraId); } @@ -576,6 +577,13 @@ status_t CameraClient::enableShutterSound(bool enable) { return OK; } + // the camera2 api legacy mode can unconditionally disable the shutter sound + if (mLegacyMode) { + ALOGV("%s: Disable shutter sound in legacy mode", __FUNCTION__); + mPlayShutterSound = false; + return OK; + } + // Disabling shutter sound may not be allowed. In that case only // allow the mediaserver process to disable the sound. char value[PROPERTY_VALUE_MAX]; diff --git a/services/camera/libcameraservice/api1/CameraClient.h b/services/camera/libcameraservice/api1/CameraClient.h index 4b89564..6779f5e 100644 --- a/services/camera/libcameraservice/api1/CameraClient.h +++ b/services/camera/libcameraservice/api1/CameraClient.h @@ -64,7 +64,8 @@ public: int cameraFacing, int clientPid, int clientUid, - int servicePid); + int servicePid, + bool legacyMode = false); ~CameraClient(); status_t initialize(camera_module_t *module); @@ -129,6 +130,7 @@ private: int mPreviewCallbackFlag; int mOrientation; // Current display orientation bool mPlayShutterSound; + bool mLegacyMode; // camera2 api legacy mode? // Ensures atomicity among the public methods mutable Mutex mLock; |