Loading media/libaudioclient/AudioSystem.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -1281,6 +1281,20 @@ status_t AudioSystem::getMasterMono(bool *mono) return aps->getMasterMono(mono); } status_t AudioSystem::setMasterBalance(float balance) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; return af->setMasterBalance(balance); } status_t AudioSystem::getMasterBalance(float *balance) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; return af->getMasterBalance(balance); } float AudioSystem::getStreamVolumeDB(audio_stream_type_t stream, int index, audio_devices_t device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); Loading media/libaudioclient/IAudioFlinger.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,8 @@ enum { SYSTEM_READY, FRAME_COUNT_HAL, GET_MICROPHONES, SET_MASTER_BALANCE, GET_MASTER_BALANCE, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -242,6 +244,34 @@ public: return reply.readInt32(); } status_t setMasterBalance(float balance) override { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeFloat(balance); status_t status = remote()->transact(SET_MASTER_BALANCE, data, &reply); if (status != NO_ERROR) { return status; } return reply.readInt32(); } status_t getMasterBalance(float *balance) const override { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); status_t status = remote()->transact(GET_MASTER_BALANCE, data, &reply); if (status != NO_ERROR) { return status; } status = (status_t)reply.readInt32(); if (status != NO_ERROR) { return status; } *balance = reply.readFloat(); return NO_ERROR; } virtual status_t setStreamVolume(audio_stream_type_t stream, float value, audio_io_handle_t output) { Loading Loading @@ -1050,6 +1080,21 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32( masterMute() ); return NO_ERROR; } break; case SET_MASTER_BALANCE: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32( setMasterBalance(data.readFloat()) ); return NO_ERROR; } break; case GET_MASTER_BALANCE: { CHECK_INTERFACE(IAudioFlinger, data, reply); float f; const status_t status = getMasterBalance(&f); reply->writeInt32((int32_t)status); if (status == NO_ERROR) { (void)reply->writeFloat(f); } return NO_ERROR; } break; case SET_STREAM_VOLUME: { CHECK_INTERFACE(IAudioFlinger, data, reply); int stream = data.readInt32(); Loading media/libaudioclient/include/media/AudioSystem.h +3 −0 Original line number Diff line number Diff line Loading @@ -339,6 +339,9 @@ public: static status_t setMasterMono(bool mono); static status_t getMasterMono(bool *mono); static status_t setMasterBalance(float balance); static status_t getMasterBalance(float *balance); static float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device); Loading media/libaudioclient/include/media/IAudioFlinger.h +3 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,9 @@ public: virtual float masterVolume() const = 0; virtual bool masterMute() const = 0; virtual status_t setMasterBalance(float balance) = 0; virtual status_t getMasterBalance(float *balance) const = 0; /* set/get stream type state. This will probably be used by * the preference panel, mostly. */ Loading services/audioflinger/AudioFlinger.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -934,6 +934,40 @@ status_t AudioFlinger::setMasterVolume(float value) return NO_ERROR; } status_t AudioFlinger::setMasterBalance(float balance) { status_t ret = initCheck(); if (ret != NO_ERROR) { return ret; } // check calling permissions if (!settingsAllowed()) { return PERMISSION_DENIED; } // check range if (isnan(balance) || fabs(balance) > 1.f) { return BAD_VALUE; } Mutex::Autolock _l(mLock); // short cut. if (mMasterBalance == balance) return NO_ERROR; mMasterBalance = balance; for (size_t i = 0; i < mPlaybackThreads.size(); i++) { if (mPlaybackThreads.valueAt(i)->isDuplicating()) { continue; } mPlaybackThreads.valueAt(i)->setMasterBalance(balance); } return NO_ERROR; } status_t AudioFlinger::setMode(audio_mode_t mode) { status_t ret = initCheck(); Loading Loading @@ -1073,6 +1107,13 @@ float AudioFlinger::masterVolume() const return masterVolume_l(); } status_t AudioFlinger::getMasterBalance(float *balance) const { Mutex::Autolock _l(mLock); *balance = getMasterBalance_l(); return NO_ERROR; // if called through binder, may return a transactional error } bool AudioFlinger::masterMute() const { Mutex::Autolock _l(mLock); Loading @@ -1084,6 +1125,11 @@ float AudioFlinger::masterVolume_l() const return mMasterVolume; } float AudioFlinger::getMasterBalance_l() const { return mMasterBalance; } bool AudioFlinger::masterMute_l() const { return mMasterMute; Loading Loading
media/libaudioclient/AudioSystem.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -1281,6 +1281,20 @@ status_t AudioSystem::getMasterMono(bool *mono) return aps->getMasterMono(mono); } status_t AudioSystem::setMasterBalance(float balance) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; return af->setMasterBalance(balance); } status_t AudioSystem::getMasterBalance(float *balance) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; return af->getMasterBalance(balance); } float AudioSystem::getStreamVolumeDB(audio_stream_type_t stream, int index, audio_devices_t device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); Loading
media/libaudioclient/IAudioFlinger.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,8 @@ enum { SYSTEM_READY, FRAME_COUNT_HAL, GET_MICROPHONES, SET_MASTER_BALANCE, GET_MASTER_BALANCE, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -242,6 +244,34 @@ public: return reply.readInt32(); } status_t setMasterBalance(float balance) override { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeFloat(balance); status_t status = remote()->transact(SET_MASTER_BALANCE, data, &reply); if (status != NO_ERROR) { return status; } return reply.readInt32(); } status_t getMasterBalance(float *balance) const override { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); status_t status = remote()->transact(GET_MASTER_BALANCE, data, &reply); if (status != NO_ERROR) { return status; } status = (status_t)reply.readInt32(); if (status != NO_ERROR) { return status; } *balance = reply.readFloat(); return NO_ERROR; } virtual status_t setStreamVolume(audio_stream_type_t stream, float value, audio_io_handle_t output) { Loading Loading @@ -1050,6 +1080,21 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32( masterMute() ); return NO_ERROR; } break; case SET_MASTER_BALANCE: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32( setMasterBalance(data.readFloat()) ); return NO_ERROR; } break; case GET_MASTER_BALANCE: { CHECK_INTERFACE(IAudioFlinger, data, reply); float f; const status_t status = getMasterBalance(&f); reply->writeInt32((int32_t)status); if (status == NO_ERROR) { (void)reply->writeFloat(f); } return NO_ERROR; } break; case SET_STREAM_VOLUME: { CHECK_INTERFACE(IAudioFlinger, data, reply); int stream = data.readInt32(); Loading
media/libaudioclient/include/media/AudioSystem.h +3 −0 Original line number Diff line number Diff line Loading @@ -339,6 +339,9 @@ public: static status_t setMasterMono(bool mono); static status_t getMasterMono(bool *mono); static status_t setMasterBalance(float balance); static status_t getMasterBalance(float *balance); static float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device); Loading
media/libaudioclient/include/media/IAudioFlinger.h +3 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,9 @@ public: virtual float masterVolume() const = 0; virtual bool masterMute() const = 0; virtual status_t setMasterBalance(float balance) = 0; virtual status_t getMasterBalance(float *balance) const = 0; /* set/get stream type state. This will probably be used by * the preference panel, mostly. */ Loading
services/audioflinger/AudioFlinger.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -934,6 +934,40 @@ status_t AudioFlinger::setMasterVolume(float value) return NO_ERROR; } status_t AudioFlinger::setMasterBalance(float balance) { status_t ret = initCheck(); if (ret != NO_ERROR) { return ret; } // check calling permissions if (!settingsAllowed()) { return PERMISSION_DENIED; } // check range if (isnan(balance) || fabs(balance) > 1.f) { return BAD_VALUE; } Mutex::Autolock _l(mLock); // short cut. if (mMasterBalance == balance) return NO_ERROR; mMasterBalance = balance; for (size_t i = 0; i < mPlaybackThreads.size(); i++) { if (mPlaybackThreads.valueAt(i)->isDuplicating()) { continue; } mPlaybackThreads.valueAt(i)->setMasterBalance(balance); } return NO_ERROR; } status_t AudioFlinger::setMode(audio_mode_t mode) { status_t ret = initCheck(); Loading Loading @@ -1073,6 +1107,13 @@ float AudioFlinger::masterVolume() const return masterVolume_l(); } status_t AudioFlinger::getMasterBalance(float *balance) const { Mutex::Autolock _l(mLock); *balance = getMasterBalance_l(); return NO_ERROR; // if called through binder, may return a transactional error } bool AudioFlinger::masterMute() const { Mutex::Autolock _l(mLock); Loading @@ -1084,6 +1125,11 @@ float AudioFlinger::masterVolume_l() const return mMasterVolume; } float AudioFlinger::getMasterBalance_l() const { return mMasterBalance; } bool AudioFlinger::masterMute_l() const { return mMasterMute; Loading