Loading media/libaudioclient/AudioSystem.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -1286,6 +1286,24 @@ status_t AudioSystem::getMicrophones(std::vector<media::MicrophoneInfo> *microph return af->getMicrophones(microphones); } status_t AudioSystem::getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->getSurroundFormats( numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); } status_t AudioSystem::setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->setSurroundFormatEnabled(audioFormat, enabled); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading media/libaudioclient/IAudioPolicyService.cpp +98 −2 Original line number Diff line number Diff line Loading @@ -80,7 +80,9 @@ enum { SET_AUDIO_PORT_CALLBACK_ENABLED, SET_MASTER_MONO, GET_MASTER_MONO, GET_STREAM_VOLUME_DB GET_STREAM_VOLUME_DB, GET_SURROUND_FORMATS, SET_SURROUND_FORMAT_ENABLED }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -829,6 +831,54 @@ public: } return reply.readFloat(); } virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) { if (numSurroundFormats == NULL || (*numSurroundFormats != 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL))) { return BAD_VALUE; } Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); unsigned int numSurroundFormatsReq = *numSurroundFormats; data.writeUint32(numSurroundFormatsReq); data.writeBool(reported); status_t status = remote()->transact(GET_SURROUND_FORMATS, data, &reply); if (status == NO_ERROR && (status = (status_t)reply.readInt32()) == NO_ERROR) { *numSurroundFormats = reply.readUint32(); } if (status == NO_ERROR) { if (numSurroundFormatsReq > *numSurroundFormats) { numSurroundFormatsReq = *numSurroundFormats; } if (numSurroundFormatsReq > 0) { status = reply.read(surroundFormats, numSurroundFormatsReq * sizeof(audio_format_t)); if (status != NO_ERROR) { return status; } status = reply.read(surroundFormatsEnabled, numSurroundFormatsReq * sizeof(bool)); } } return status; } virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(audioFormat); data.writeBool(enabled); status_t status = remote()->transact(SET_SURROUND_FORMAT_ENABLED, data, &reply); if (status != NO_ERROR) { return status; } return reply.readInt32(); } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -883,7 +933,9 @@ status_t BnAudioPolicyService::onTransact( case REGISTER_POLICY_MIXES: case SET_MASTER_MONO: case START_AUDIO_SOURCE: case STOP_AUDIO_SOURCE: { case STOP_AUDIO_SOURCE: case GET_SURROUND_FORMATS: case SET_SURROUND_FORMAT_ENABLED: { if (multiuser_get_app_id(IPCThreadState::self()->getCallingUid()) >= AID_APP_START) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -1489,6 +1541,50 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } case GET_SURROUND_FORMATS: { CHECK_INTERFACE(IAudioPolicyService, data, reply); unsigned int numSurroundFormatsReq = data.readUint32(); if (numSurroundFormatsReq > MAX_ITEMS_PER_LIST) { numSurroundFormatsReq = MAX_ITEMS_PER_LIST; } bool reported = data.readBool(); unsigned int numSurroundFormats = numSurroundFormatsReq; audio_format_t *surroundFormats = (audio_format_t *)calloc( numSurroundFormats, sizeof(audio_format_t)); bool *surroundFormatsEnabled = (bool *)calloc(numSurroundFormats, sizeof(bool)); if (numSurroundFormatsReq > 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL)) { free(surroundFormats); free(surroundFormatsEnabled); reply->writeInt32(NO_MEMORY); return NO_ERROR; } status_t status = getSurroundFormats( &numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeUint32(numSurroundFormats); if (numSurroundFormatsReq > numSurroundFormats) { numSurroundFormatsReq = numSurroundFormats; } reply->write(surroundFormats, numSurroundFormatsReq * sizeof(audio_format_t)); reply->write(surroundFormatsEnabled, numSurroundFormatsReq * sizeof(bool)); } free(surroundFormats); free(surroundFormatsEnabled); return NO_ERROR; } case SET_SURROUND_FORMAT_ENABLED: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_format_t audioFormat = (audio_format_t) data.readInt32(); bool enabled = data.readBool(); status_t status = setSurroundFormatEnabled(audioFormat, enabled); reply->writeInt32(status); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } Loading media/libaudioclient/include/media/AudioSystem.h +9 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,15 @@ public: static status_t getMicrophones(std::vector<media::MicrophoneInfo> *microphones); // numSurroundFormats holds the maximum number of formats and bool value allowed in the array. // When numSurroundFormats is 0, surroundFormats and surroundFormatsEnabled will not be // populated. The actual number of surround formats should be returned at numSurroundFormats. static status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported); static status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled); // ---------------------------------------------------------------------------- class AudioPortCallback : public RefBase Loading media/libaudioclient/include/media/IAudioPolicyService.h +6 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,12 @@ public: virtual status_t getMasterMono(bool *mono) = 0; virtual float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device) = 0; virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; }; Loading services/audiopolicy/AudioPolicyInterface.h +6 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,12 @@ public: virtual float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device) = 0; virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; virtual void setRecordSilenced(uid_t uid, bool silenced); }; Loading Loading
media/libaudioclient/AudioSystem.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -1286,6 +1286,24 @@ status_t AudioSystem::getMicrophones(std::vector<media::MicrophoneInfo> *microph return af->getMicrophones(microphones); } status_t AudioSystem::getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->getSurroundFormats( numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); } status_t AudioSystem::setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->setSurroundFormatEnabled(audioFormat, enabled); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading
media/libaudioclient/IAudioPolicyService.cpp +98 −2 Original line number Diff line number Diff line Loading @@ -80,7 +80,9 @@ enum { SET_AUDIO_PORT_CALLBACK_ENABLED, SET_MASTER_MONO, GET_MASTER_MONO, GET_STREAM_VOLUME_DB GET_STREAM_VOLUME_DB, GET_SURROUND_FORMATS, SET_SURROUND_FORMAT_ENABLED }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -829,6 +831,54 @@ public: } return reply.readFloat(); } virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) { if (numSurroundFormats == NULL || (*numSurroundFormats != 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL))) { return BAD_VALUE; } Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); unsigned int numSurroundFormatsReq = *numSurroundFormats; data.writeUint32(numSurroundFormatsReq); data.writeBool(reported); status_t status = remote()->transact(GET_SURROUND_FORMATS, data, &reply); if (status == NO_ERROR && (status = (status_t)reply.readInt32()) == NO_ERROR) { *numSurroundFormats = reply.readUint32(); } if (status == NO_ERROR) { if (numSurroundFormatsReq > *numSurroundFormats) { numSurroundFormatsReq = *numSurroundFormats; } if (numSurroundFormatsReq > 0) { status = reply.read(surroundFormats, numSurroundFormatsReq * sizeof(audio_format_t)); if (status != NO_ERROR) { return status; } status = reply.read(surroundFormatsEnabled, numSurroundFormatsReq * sizeof(bool)); } } return status; } virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(audioFormat); data.writeBool(enabled); status_t status = remote()->transact(SET_SURROUND_FORMAT_ENABLED, data, &reply); if (status != NO_ERROR) { return status; } return reply.readInt32(); } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -883,7 +933,9 @@ status_t BnAudioPolicyService::onTransact( case REGISTER_POLICY_MIXES: case SET_MASTER_MONO: case START_AUDIO_SOURCE: case STOP_AUDIO_SOURCE: { case STOP_AUDIO_SOURCE: case GET_SURROUND_FORMATS: case SET_SURROUND_FORMAT_ENABLED: { if (multiuser_get_app_id(IPCThreadState::self()->getCallingUid()) >= AID_APP_START) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -1489,6 +1541,50 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } case GET_SURROUND_FORMATS: { CHECK_INTERFACE(IAudioPolicyService, data, reply); unsigned int numSurroundFormatsReq = data.readUint32(); if (numSurroundFormatsReq > MAX_ITEMS_PER_LIST) { numSurroundFormatsReq = MAX_ITEMS_PER_LIST; } bool reported = data.readBool(); unsigned int numSurroundFormats = numSurroundFormatsReq; audio_format_t *surroundFormats = (audio_format_t *)calloc( numSurroundFormats, sizeof(audio_format_t)); bool *surroundFormatsEnabled = (bool *)calloc(numSurroundFormats, sizeof(bool)); if (numSurroundFormatsReq > 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL)) { free(surroundFormats); free(surroundFormatsEnabled); reply->writeInt32(NO_MEMORY); return NO_ERROR; } status_t status = getSurroundFormats( &numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); reply->writeInt32(status); if (status == NO_ERROR) { reply->writeUint32(numSurroundFormats); if (numSurroundFormatsReq > numSurroundFormats) { numSurroundFormatsReq = numSurroundFormats; } reply->write(surroundFormats, numSurroundFormatsReq * sizeof(audio_format_t)); reply->write(surroundFormatsEnabled, numSurroundFormatsReq * sizeof(bool)); } free(surroundFormats); free(surroundFormatsEnabled); return NO_ERROR; } case SET_SURROUND_FORMAT_ENABLED: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_format_t audioFormat = (audio_format_t) data.readInt32(); bool enabled = data.readBool(); status_t status = setSurroundFormatEnabled(audioFormat, enabled); reply->writeInt32(status); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } Loading
media/libaudioclient/include/media/AudioSystem.h +9 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,15 @@ public: static status_t getMicrophones(std::vector<media::MicrophoneInfo> *microphones); // numSurroundFormats holds the maximum number of formats and bool value allowed in the array. // When numSurroundFormats is 0, surroundFormats and surroundFormatsEnabled will not be // populated. The actual number of surround formats should be returned at numSurroundFormats. static status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported); static status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled); // ---------------------------------------------------------------------------- class AudioPortCallback : public RefBase Loading
media/libaudioclient/include/media/IAudioPolicyService.h +6 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,12 @@ public: virtual status_t getMasterMono(bool *mono) = 0; virtual float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device) = 0; virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; }; Loading
services/audiopolicy/AudioPolicyInterface.h +6 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,12 @@ public: virtual float getStreamVolumeDB( audio_stream_type_t stream, int index, audio_devices_t device) = 0; virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; virtual void setRecordSilenced(uid_t uid, bool silenced); }; Loading