Loading media/libaudioclient/AudioSystem.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -959,7 +959,8 @@ status_t AudioSystem::getOutputForAttr(audio_attributes_t* attr, audio_output_flags_t flags, audio_port_handle_t* selectedDeviceId, audio_port_handle_t* portId, std::vector<audio_io_handle_t>* secondaryOutputs) { std::vector<audio_io_handle_t>* secondaryOutputs, bool *isSpatialized) { if (attr == nullptr) { ALOGE("%s NULL audio attributes", __func__); return BAD_VALUE; Loading Loading @@ -1012,6 +1013,7 @@ status_t AudioSystem::getOutputForAttr(audio_attributes_t* attr, *portId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(responseAidl.portId)); *secondaryOutputs = VALUE_OR_RETURN_STATUS(convertContainer<std::vector<audio_io_handle_t>>( responseAidl.secondaryOutputs, aidl2legacy_int32_t_audio_io_handle_t)); *isSpatialized = responseAidl.isSpatialized; return OK; } Loading media/libaudioclient/aidl/android/media/GetOutputForAttrResponse.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -31,4 +31,6 @@ parcelable GetOutputForAttrResponse { int portId; /** Interpreted as audio_io_handle_t[]. */ int[] secondaryOutputs; /** True if the track is connected to a spatializer mixer and actually spatialized */ boolean isSpatialized; } media/libaudioclient/include/media/AudioSystem.h +2 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,8 @@ public: audio_output_flags_t flags, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId, std::vector<audio_io_handle_t> *secondaryOutputs); std::vector<audio_io_handle_t> *secondaryOutputs, bool *isSpatialized); static status_t startOutput(audio_port_handle_t portId); static status_t stopOutput(audio_port_handle_t portId); static void releaseOutput(audio_port_handle_t portId); Loading services/audioflinger/AudioFlinger.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -585,14 +585,14 @@ status_t AudioFlinger::openMmapStream(MmapStreamInterface::stream_direction_t di fullConfig.channel_mask = config->channel_mask; fullConfig.format = config->format; std::vector<audio_io_handle_t> secondaryOutputs; bool isSpatialized; ret = AudioSystem::getOutputForAttr(&localAttr, &io, actualSessionId, &streamType, client.attributionSource, &fullConfig, (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_MMAP_NOIRQ | AUDIO_OUTPUT_FLAG_DIRECT), deviceId, &portId, &secondaryOutputs); deviceId, &portId, &secondaryOutputs, &isSpatialized); ALOGW_IF(!secondaryOutputs.empty(), "%s does not support secondary outputs, ignoring them", __func__); } else { Loading Loading @@ -1034,6 +1034,7 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, audio_stream_type_t streamType; audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE; std::vector<audio_io_handle_t> secondaryOutputs; bool isSpatialized = false;; // TODO b/182392553: refactor or make clearer pid_t clientPid = Loading Loading @@ -1077,7 +1078,8 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, output.selectedDeviceId = input.selectedDeviceId; lStatus = AudioSystem::getOutputForAttr(&localAttr, &output.outputId, sessionId, &streamType, adjAttributionSource, &input.config, input.flags, &output.selectedDeviceId, &portId, &secondaryOutputs); &output.selectedDeviceId, &portId, &secondaryOutputs, &isSpatialized); if (lStatus != NO_ERROR || output.outputId == AUDIO_IO_HANDLE_NONE) { ALOGE("createTrack() getOutputForAttr() return error %d or invalid output handle", lStatus); Loading Loading @@ -1143,7 +1145,7 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, input.notificationsPerBuffer, input.speed, input.sharedBuffer, sessionId, &output.flags, callingPid, adjAttributionSource, input.clientInfo.clientTid, &lStatus, portId, input.audioTrackCallback); &lStatus, portId, input.audioTrackCallback, isSpatialized); LOG_ALWAYS_FATAL_IF((lStatus == NO_ERROR) && (track == 0)); // we don't abort yet if lStatus != NO_ERROR; there is still work to be done regardless Loading services/audioflinger/PlaybackTracks.h +4 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,8 @@ public: /** default behaviour is to start when there are as many frames * ready as possible (aka. Buffer is full). */ size_t frameCountToBeReady = SIZE_MAX, float speed = 1.0f); float speed = 1.0f, bool isSpatialized = false); virtual ~Track(); virtual status_t initCheck() const; Loading Loading @@ -201,6 +202,7 @@ public: audio_output_flags_t getOutputFlags() const { return mFlags; } float getSpeed() const { return mSpeed; } bool isSpatialized() const override { return mIsSpatialized; } protected: // for numerous Loading Loading @@ -351,6 +353,7 @@ private: audio_output_flags_t mFlags; TeePatches mTeePatches; const float mSpeed; const bool mIsSpatialized; }; // end of Track Loading Loading
media/libaudioclient/AudioSystem.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -959,7 +959,8 @@ status_t AudioSystem::getOutputForAttr(audio_attributes_t* attr, audio_output_flags_t flags, audio_port_handle_t* selectedDeviceId, audio_port_handle_t* portId, std::vector<audio_io_handle_t>* secondaryOutputs) { std::vector<audio_io_handle_t>* secondaryOutputs, bool *isSpatialized) { if (attr == nullptr) { ALOGE("%s NULL audio attributes", __func__); return BAD_VALUE; Loading Loading @@ -1012,6 +1013,7 @@ status_t AudioSystem::getOutputForAttr(audio_attributes_t* attr, *portId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(responseAidl.portId)); *secondaryOutputs = VALUE_OR_RETURN_STATUS(convertContainer<std::vector<audio_io_handle_t>>( responseAidl.secondaryOutputs, aidl2legacy_int32_t_audio_io_handle_t)); *isSpatialized = responseAidl.isSpatialized; return OK; } Loading
media/libaudioclient/aidl/android/media/GetOutputForAttrResponse.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -31,4 +31,6 @@ parcelable GetOutputForAttrResponse { int portId; /** Interpreted as audio_io_handle_t[]. */ int[] secondaryOutputs; /** True if the track is connected to a spatializer mixer and actually spatialized */ boolean isSpatialized; }
media/libaudioclient/include/media/AudioSystem.h +2 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,8 @@ public: audio_output_flags_t flags, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId, std::vector<audio_io_handle_t> *secondaryOutputs); std::vector<audio_io_handle_t> *secondaryOutputs, bool *isSpatialized); static status_t startOutput(audio_port_handle_t portId); static status_t stopOutput(audio_port_handle_t portId); static void releaseOutput(audio_port_handle_t portId); Loading
services/audioflinger/AudioFlinger.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -585,14 +585,14 @@ status_t AudioFlinger::openMmapStream(MmapStreamInterface::stream_direction_t di fullConfig.channel_mask = config->channel_mask; fullConfig.format = config->format; std::vector<audio_io_handle_t> secondaryOutputs; bool isSpatialized; ret = AudioSystem::getOutputForAttr(&localAttr, &io, actualSessionId, &streamType, client.attributionSource, &fullConfig, (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_MMAP_NOIRQ | AUDIO_OUTPUT_FLAG_DIRECT), deviceId, &portId, &secondaryOutputs); deviceId, &portId, &secondaryOutputs, &isSpatialized); ALOGW_IF(!secondaryOutputs.empty(), "%s does not support secondary outputs, ignoring them", __func__); } else { Loading Loading @@ -1034,6 +1034,7 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, audio_stream_type_t streamType; audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE; std::vector<audio_io_handle_t> secondaryOutputs; bool isSpatialized = false;; // TODO b/182392553: refactor or make clearer pid_t clientPid = Loading Loading @@ -1077,7 +1078,8 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, output.selectedDeviceId = input.selectedDeviceId; lStatus = AudioSystem::getOutputForAttr(&localAttr, &output.outputId, sessionId, &streamType, adjAttributionSource, &input.config, input.flags, &output.selectedDeviceId, &portId, &secondaryOutputs); &output.selectedDeviceId, &portId, &secondaryOutputs, &isSpatialized); if (lStatus != NO_ERROR || output.outputId == AUDIO_IO_HANDLE_NONE) { ALOGE("createTrack() getOutputForAttr() return error %d or invalid output handle", lStatus); Loading Loading @@ -1143,7 +1145,7 @@ status_t AudioFlinger::createTrack(const media::CreateTrackRequest& _input, input.notificationsPerBuffer, input.speed, input.sharedBuffer, sessionId, &output.flags, callingPid, adjAttributionSource, input.clientInfo.clientTid, &lStatus, portId, input.audioTrackCallback); &lStatus, portId, input.audioTrackCallback, isSpatialized); LOG_ALWAYS_FATAL_IF((lStatus == NO_ERROR) && (track == 0)); // we don't abort yet if lStatus != NO_ERROR; there is still work to be done regardless Loading
services/audioflinger/PlaybackTracks.h +4 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,8 @@ public: /** default behaviour is to start when there are as many frames * ready as possible (aka. Buffer is full). */ size_t frameCountToBeReady = SIZE_MAX, float speed = 1.0f); float speed = 1.0f, bool isSpatialized = false); virtual ~Track(); virtual status_t initCheck() const; Loading Loading @@ -201,6 +202,7 @@ public: audio_output_flags_t getOutputFlags() const { return mFlags; } float getSpeed() const { return mSpeed; } bool isSpatialized() const override { return mIsSpatialized; } protected: // for numerous Loading Loading @@ -351,6 +353,7 @@ private: audio_output_flags_t mFlags; TeePatches mTeePatches; const float mSpeed; const bool mIsSpatialized; }; // end of Track Loading