Merge "Camera: update camera audio restriction API"

gugelfrei
TreeHugger Robot 5 years ago committed by Android (Google) Code Review
commit eccdf2ae06

@ -347,13 +347,20 @@ status_t Camera::setPreviewCallbackTarget(
return c->setPreviewCallbackTarget(callbackProducer);
}
int32_t Camera::setAudioRestriction(int32_t mode)
status_t Camera::setAudioRestriction(int32_t mode)
{
sp <::android::hardware::ICamera> c = mCamera;
if (c == 0) return NO_INIT;
return c->setAudioRestriction(mode);
}
int32_t Camera::getGlobalAudioRestriction()
{
sp <::android::hardware::ICamera> c = mCamera;
if (c == 0) return NO_INIT;
return c->getGlobalAudioRestriction();
}
// callback from camera service
void Camera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2)
{

@ -57,6 +57,7 @@ enum {
RELEASE_RECORDING_FRAME_HANDLE,
RELEASE_RECORDING_FRAME_HANDLE_BATCH,
SET_AUDIO_RESTRICTION,
GET_GLOBAL_AUDIO_RESTRICTION,
};
class BpCamera: public BpInterface<ICamera>
@ -192,7 +193,7 @@ public:
}
}
int32_t setAudioRestriction(int32_t mode) {
status_t setAudioRestriction(int32_t mode) {
Parcel data, reply;
data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
data.writeInt32(mode);
@ -200,6 +201,13 @@ public:
return reply.readInt32();
}
int32_t getGlobalAudioRestriction() {
Parcel data, reply;
data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
remote()->transact(GET_GLOBAL_AUDIO_RESTRICTION, data, &reply);
return reply.readInt32();
}
status_t setVideoBufferMode(int32_t videoBufferMode)
{
ALOGV("setVideoBufferMode: %d", videoBufferMode);
@ -509,6 +517,11 @@ status_t BnCamera::onTransact(
reply->writeInt32(setAudioRestriction(mode));
return NO_ERROR;
} break;
case GET_GLOBAL_AUDIO_RESTRICTION: {
CHECK_INTERFACE(ICamera, data, reply);
reply->writeInt32(getGlobalAudioRestriction());
return NO_ERROR;
} break;
default:
return BBinder::onTransact(code, data, reply, flags);
}

@ -168,7 +168,13 @@ interface ICameraDeviceUser
*
* @param mode the audio restriction mode ID as above
*
* @return the resulting system-wide audio restriction mode
*/
int setCameraAudioRestriction(int mode);
void setCameraAudioRestriction(int mode);
/**
* Get global audio restriction mode for all camera clients.
*
* @return the currently applied system-wide audio restriction mode
*/
int getGlobalAudioRestriction();
}

@ -167,7 +167,8 @@ public:
sp<ICameraRecordingProxy> getRecordingProxy();
int32_t setAudioRestriction(int32_t mode);
status_t setAudioRestriction(int32_t mode);
int32_t getGlobalAudioRestriction();
// ICameraClient interface
virtual void notifyCallback(int32_t msgType, int32_t ext, int32_t ext2);

@ -142,7 +142,10 @@ public:
const sp<IGraphicBufferProducer>& bufferProducer) = 0;
// Set the audio restriction mode
virtual int32_t setAudioRestriction(int32_t mode) = 0;
virtual status_t setAudioRestriction(int32_t mode) = 0;
// Get the global audio restriction mode
virtual int32_t getGlobalAudioRestriction() = 0;
};
// ----------------------------------------------------------------------------

@ -2507,11 +2507,16 @@ bool CameraService::BasicClient::canCastToApiClient(apiLevel level) const {
return level == API_2;
}
int32_t CameraService::BasicClient::setAudioRestriction(int32_t mode) {
status_t CameraService::BasicClient::setAudioRestriction(int32_t mode) {
{
Mutex::Autolock l(mAudioRestrictionLock);
mAudioRestriction = mode;
}
sCameraService->updateAudioRestriction();
return OK;
}
int32_t CameraService::BasicClient::getServiceAudioRestriction() const {
return sCameraService->updateAudioRestriction();
}

@ -261,8 +261,13 @@ public:
// set audio restriction from client
// Will call into camera service and hold mServiceLock
virtual int32_t setAudioRestriction(int32_t mode);
virtual status_t setAudioRestriction(int32_t mode);
// Get current global audio restriction setting
// Will call into camera service and hold mServiceLock
virtual int32_t getServiceAudioRestriction() const;
// Get current audio restriction setting for this client
virtual int32_t getAudioRestriction() const;
static bool isValidAudioRestriction(int32_t mode);

@ -2258,12 +2258,18 @@ status_t Camera2Client::setVideoTarget(const sp<IGraphicBufferProducer>& bufferP
return OK;
}
int32_t Camera2Client::setAudioRestriction(int /*mode*/) {
status_t Camera2Client::setAudioRestriction(int /*mode*/) {
// Empty implementation. setAudioRestriction is hidden interface and not
// supported by android.hardware.Camera API
return INVALID_OPERATION;
}
int32_t Camera2Client::getGlobalAudioRestriction() {
// Empty implementation. getAudioRestriction is hidden interface and not
// supported by android.hardware.Camera API
return INVALID_OPERATION;
}
status_t Camera2Client::waitUntilCurrentRequestIdLocked() {
int32_t activeRequestId = mStreamingProcessor->getActiveRequestId();
if (activeRequestId != 0) {

@ -83,7 +83,8 @@ public:
virtual void notifyError(int32_t errorCode,
const CaptureResultExtras& resultExtras);
virtual status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer);
virtual int32_t setAudioRestriction(int mode);
virtual status_t setAudioRestriction(int mode);
virtual int32_t getGlobalAudioRestriction();
/**
* Interface used by CameraService

@ -1171,7 +1171,7 @@ status_t CameraClient::setVideoTarget(const sp<IGraphicBufferProducer>& bufferPr
return INVALID_OPERATION;
}
int32_t CameraClient::setAudioRestriction(int mode) {
status_t CameraClient::setAudioRestriction(int mode) {
if (!isValidAudioRestriction(mode)) {
ALOGE("%s: invalid audio restriction mode %d", __FUNCTION__, mode);
return BAD_VALUE;
@ -1184,5 +1184,12 @@ int32_t CameraClient::setAudioRestriction(int mode) {
return BasicClient::setAudioRestriction(mode);
}
int32_t CameraClient::getGlobalAudioRestriction() {
Mutex::Autolock lock(mLock);
if (checkPidAndHardware() != NO_ERROR) {
return INVALID_OPERATION;
}
return BasicClient::getServiceAudioRestriction();
}
}; // namespace android

@ -59,7 +59,8 @@ public:
virtual String8 getParameters() const;
virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
virtual status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer);
virtual int32_t setAudioRestriction(int mode);
virtual status_t setAudioRestriction(int mode);
virtual int32_t getGlobalAudioRestriction();
// Interface used by CameraService
CameraClient(const sp<CameraService>& cameraService,

@ -1870,8 +1870,7 @@ binder::Status CameraDeviceClient::finalizeOutputConfigurations(int32_t streamId
return res;
}
binder::Status CameraDeviceClient::setCameraAudioRestriction(int32_t mode,
/*out*/ int32_t* outMode) {
binder::Status CameraDeviceClient::setCameraAudioRestriction(int32_t mode) {
ATRACE_CALL();
binder::Status res;
if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res;
@ -1883,9 +1882,18 @@ binder::Status CameraDeviceClient::setCameraAudioRestriction(int32_t mode,
return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
}
Mutex::Autolock icl(mBinderSerializationLock);
BasicClient::setAudioRestriction(mode);
return binder::Status::ok();
}
binder::Status CameraDeviceClient::getGlobalAudioRestriction(/*out*/ int32_t* outMode) {
ATRACE_CALL();
binder::Status res;
if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res;
Mutex::Autolock icl(mBinderSerializationLock);
if (outMode != nullptr) {
*outMode = BasicClient::setAudioRestriction(mode);
*outMode = BasicClient::getServiceAudioRestriction();
}
return binder::Status::ok();
}

@ -152,9 +152,9 @@ public:
virtual binder::Status finalizeOutputConfigurations(int32_t streamId,
const hardware::camera2::params::OutputConfiguration &outputConfiguration) override;
virtual binder::Status setCameraAudioRestriction(int32_t mode,
/*out*/
int32_t* outMode = NULL) override;
virtual binder::Status setCameraAudioRestriction(int32_t mode) override;
virtual binder::Status getGlobalAudioRestriction(/*out*/int32_t* outMode) override;
/**
* Interface used by CameraService

Loading…
Cancel
Save