Loading include/media/AudioSystem.h +2 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,8 @@ public: audio_io_handle_t *handle); static status_t stopAudioSource(audio_io_handle_t handle); static status_t setMasterMono(bool mono); static status_t getMasterMono(bool *mono); // ---------------------------------------------------------------------------- Loading include/media/IAudioPolicyService.h +3 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,9 @@ public: const audio_attributes_t *attributes, audio_io_handle_t *handle) = 0; virtual status_t stopAudioSource(audio_io_handle_t handle) = 0; virtual status_t setMasterMono(bool mono) = 0; virtual status_t getMasterMono(bool *mono) = 0; }; Loading media/libmedia/AudioSystem.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,20 @@ status_t AudioSystem::stopAudioSource(audio_io_handle_t handle) return aps->stopAudioSource(handle); } status_t AudioSystem::setMasterMono(bool mono) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->setMasterMono(mono); } status_t AudioSystem::getMasterMono(bool *mono) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->getMasterMono(mono); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading media/libmedia/IAudioPolicyService.cpp +52 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ enum { START_AUDIO_SOURCE, STOP_AUDIO_SOURCE, SET_AUDIO_PORT_CALLBACK_ENABLED, SET_MASTER_MONO, GET_MASTER_MONO, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -767,6 +769,37 @@ public: status = (status_t)reply.readInt32(); return status; } virtual status_t setMasterMono(bool mono) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(static_cast<int32_t>(mono)); status_t status = remote()->transact(SET_MASTER_MONO, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getMasterMono(bool *mono) { if (mono == nullptr) { return BAD_VALUE; } Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); status_t status = remote()->transact(GET_MASTER_MONO, data, &reply); if (status != NO_ERROR) { return status; } status = static_cast<status_t>(reply.readInt32()); if (status == NO_ERROR) { *mono = static_cast<bool>(reply.readInt32()); } return status; } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1311,6 +1344,25 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } break; case SET_MASTER_MONO: { CHECK_INTERFACE(IAudioPolicyService, data, reply); bool mono = static_cast<bool>(data.readInt32()); status_t status = setMasterMono(mono); reply->writeInt32(status); return NO_ERROR; } break; case GET_MASTER_MONO: { CHECK_INTERFACE(IAudioPolicyService, data, reply); bool mono; status_t status = getMasterMono(&mono); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeInt32(static_cast<int32_t>(mono)); } return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading services/audioflinger/FastMixer.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ #include <cpustats/ThreadCpuUsage.h> #endif #endif #include <audio_utils/conversion.h> #include <audio_utils/format.h> #include "AudioMixer.h" #include "FastMixer.h" Loading Loading @@ -64,7 +65,8 @@ FastMixer::FastMixer() : FastThread(), mFastTracksGen(0), mTotalNativeFramesWritten(0), // timestamp mNativeFramesWrittenButNotPresented(0) // the = 0 is to silence the compiler mNativeFramesWrittenButNotPresented(0), // the = 0 is to silence the compiler mMasterMono(false) { // FIXME pass sInitial as parameter to base class constructor, and make it static local mPrevious = &sInitial; Loading Loading @@ -417,6 +419,10 @@ void FastMixer::onWork() memset(mMixerBuffer, 0, mMixerBufferSize); mMixerBufferState = ZEROED; } if (mMasterMono.load()) { // memory_order_seq_cst mono_blend(mMixerBuffer, mMixerBufferFormat, Format_channelCount(mFormat), frameCount); } // prepare the buffer used to write to sink void *buffer = mSinkBuffer != NULL ? mSinkBuffer : mMixerBuffer; if (mFormat.mFormat != mMixerBufferFormat) { // sink format not the same as mixer format Loading Loading
include/media/AudioSystem.h +2 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,8 @@ public: audio_io_handle_t *handle); static status_t stopAudioSource(audio_io_handle_t handle); static status_t setMasterMono(bool mono); static status_t getMasterMono(bool *mono); // ---------------------------------------------------------------------------- Loading
include/media/IAudioPolicyService.h +3 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,9 @@ public: const audio_attributes_t *attributes, audio_io_handle_t *handle) = 0; virtual status_t stopAudioSource(audio_io_handle_t handle) = 0; virtual status_t setMasterMono(bool mono) = 0; virtual status_t getMasterMono(bool *mono) = 0; }; Loading
media/libmedia/AudioSystem.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,20 @@ status_t AudioSystem::stopAudioSource(audio_io_handle_t handle) return aps->stopAudioSource(handle); } status_t AudioSystem::setMasterMono(bool mono) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->setMasterMono(mono); } status_t AudioSystem::getMasterMono(bool *mono) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->getMasterMono(mono); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading
media/libmedia/IAudioPolicyService.cpp +52 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ enum { START_AUDIO_SOURCE, STOP_AUDIO_SOURCE, SET_AUDIO_PORT_CALLBACK_ENABLED, SET_MASTER_MONO, GET_MASTER_MONO, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -767,6 +769,37 @@ public: status = (status_t)reply.readInt32(); return status; } virtual status_t setMasterMono(bool mono) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(static_cast<int32_t>(mono)); status_t status = remote()->transact(SET_MASTER_MONO, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getMasterMono(bool *mono) { if (mono == nullptr) { return BAD_VALUE; } Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); status_t status = remote()->transact(GET_MASTER_MONO, data, &reply); if (status != NO_ERROR) { return status; } status = static_cast<status_t>(reply.readInt32()); if (status == NO_ERROR) { *mono = static_cast<bool>(reply.readInt32()); } return status; } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1311,6 +1344,25 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } break; case SET_MASTER_MONO: { CHECK_INTERFACE(IAudioPolicyService, data, reply); bool mono = static_cast<bool>(data.readInt32()); status_t status = setMasterMono(mono); reply->writeInt32(status); return NO_ERROR; } break; case GET_MASTER_MONO: { CHECK_INTERFACE(IAudioPolicyService, data, reply); bool mono; status_t status = getMasterMono(&mono); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeInt32(static_cast<int32_t>(mono)); } return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading
services/audioflinger/FastMixer.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ #include <cpustats/ThreadCpuUsage.h> #endif #endif #include <audio_utils/conversion.h> #include <audio_utils/format.h> #include "AudioMixer.h" #include "FastMixer.h" Loading Loading @@ -64,7 +65,8 @@ FastMixer::FastMixer() : FastThread(), mFastTracksGen(0), mTotalNativeFramesWritten(0), // timestamp mNativeFramesWrittenButNotPresented(0) // the = 0 is to silence the compiler mNativeFramesWrittenButNotPresented(0), // the = 0 is to silence the compiler mMasterMono(false) { // FIXME pass sInitial as parameter to base class constructor, and make it static local mPrevious = &sInitial; Loading Loading @@ -417,6 +419,10 @@ void FastMixer::onWork() memset(mMixerBuffer, 0, mMixerBufferSize); mMixerBufferState = ZEROED; } if (mMasterMono.load()) { // memory_order_seq_cst mono_blend(mMixerBuffer, mMixerBufferFormat, Format_channelCount(mFormat), frameCount); } // prepare the buffer used to write to sink void *buffer = mSinkBuffer != NULL ? mSinkBuffer : mMixerBuffer; if (mFormat.mFormat != mMixerBufferFormat) { // sink format not the same as mixer format Loading