diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 12bbbb0cba..bf8b01aaaa 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -669,7 +669,7 @@ ndk::ScopedAStatus Module::openInputStream(const OpenInputStreamArguments& in_ar nullptr, nullptr, &context)); context.fillDescriptor(&_aidl_return->desc); std::shared_ptr stream; - RETURN_STATUS_IF_ERROR(createInputStream(in_args.sinkMetadata, std::move(context), + RETURN_STATUS_IF_ERROR(createInputStream(std::move(context), in_args.sinkMetadata, mConfig->microphones, &stream)); StreamWrapper streamWrapper(stream); if (auto patchIt = mPatches.find(in_args.portConfigId); patchIt != mPatches.end()) { @@ -715,7 +715,7 @@ ndk::ScopedAStatus Module::openOutputStream(const OpenOutputStreamArguments& in_ in_args.eventCallback, &context)); context.fillDescriptor(&_aidl_return->desc); std::shared_ptr stream; - RETURN_STATUS_IF_ERROR(createOutputStream(in_args.sourceMetadata, std::move(context), + RETURN_STATUS_IF_ERROR(createOutputStream(std::move(context), in_args.sourceMetadata, in_args.offloadInfo, &stream)); StreamWrapper streamWrapper(stream); if (auto patchIt = mPatches.find(in_args.portConfigId); patchIt != mPatches.end()) { diff --git a/audio/aidl/default/ModulePrimary.cpp b/audio/aidl/default/ModulePrimary.cpp index f66da373f9..d8ea9e7731 100644 --- a/audio/aidl/default/ModulePrimary.cpp +++ b/audio/aidl/default/ModulePrimary.cpp @@ -43,18 +43,18 @@ ndk::ScopedAStatus ModulePrimary::getTelephony(std::shared_ptr* _aid return ndk::ScopedAStatus::ok(); } -ndk::ScopedAStatus ModulePrimary::createInputStream(const SinkMetadata& sinkMetadata, - StreamContext&& context, +ndk::ScopedAStatus ModulePrimary::createInputStream(StreamContext&& context, + const SinkMetadata& sinkMetadata, const std::vector& microphones, std::shared_ptr* result) { - return createStreamInstance(result, sinkMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sinkMetadata, microphones); } ndk::ScopedAStatus ModulePrimary::createOutputStream( - const SourceMetadata& sourceMetadata, StreamContext&& context, + StreamContext&& context, const SourceMetadata& sourceMetadata, const std::optional& offloadInfo, std::shared_ptr* result) { - return createStreamInstance(result, sourceMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sourceMetadata, offloadInfo); } diff --git a/audio/aidl/default/Stream.cpp b/audio/aidl/default/Stream.cpp index b11edff8e4..f4194d23c1 100644 --- a/audio/aidl/default/Stream.cpp +++ b/audio/aidl/default/Stream.cpp @@ -663,7 +663,7 @@ ndk::ScopedAStatus StreamCommonImpl::close() { LOG(DEBUG) << __func__ << ": joining the worker thread..."; mWorker->stop(); LOG(DEBUG) << __func__ << ": worker thread joined"; - mContext.reset(); + onClose(); mWorker->setClosed(); return ndk::ScopedAStatus::ok(); } else { @@ -727,11 +727,15 @@ static std::map transformMicrophones( } } // namespace -StreamIn::StreamIn(const std::vector& microphones) - : mMicrophones(transformMicrophones(microphones)) { +StreamIn::StreamIn(StreamContext&& context, const std::vector& microphones) + : mContext(std::move(context)), mMicrophones(transformMicrophones(microphones)) { LOG(DEBUG) << __func__; } +void StreamIn::defaultOnClose() { + mContext.reset(); +} + ndk::ScopedAStatus StreamIn::getActiveMicrophones( std::vector* _aidl_return) { std::vector result; @@ -784,11 +788,15 @@ ndk::ScopedAStatus StreamIn::setHwGain(const std::vector& in_channelGains return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); } -StreamOut::StreamOut(const std::optional& offloadInfo) - : mOffloadInfo(offloadInfo) { +StreamOut::StreamOut(StreamContext&& context, const std::optional& offloadInfo) + : mContext(std::move(context)), mOffloadInfo(offloadInfo) { LOG(DEBUG) << __func__; } +void StreamOut::defaultOnClose() { + mContext.reset(); +} + ndk::ScopedAStatus StreamOut::updateOffloadMetadata( const AudioOffloadMetadata& in_offloadMetadata) { LOG(DEBUG) << __func__; diff --git a/audio/aidl/default/alsa/StreamAlsa.cpp b/audio/aidl/default/alsa/StreamAlsa.cpp index bdbe5733b9..c7fb02248a 100644 --- a/audio/aidl/default/alsa/StreamAlsa.cpp +++ b/audio/aidl/default/alsa/StreamAlsa.cpp @@ -27,8 +27,8 @@ namespace aidl::android::hardware::audio::core { -StreamAlsa::StreamAlsa(const Metadata& metadata, StreamContext&& context, int readWriteRetries) - : StreamCommonImpl(metadata, std::move(context)), +StreamAlsa::StreamAlsa(const StreamContext& context, const Metadata& metadata, int readWriteRetries) + : StreamCommonImpl(context, metadata), mFrameSizeBytes(getContext().getFrameSize()), mIsInput(isInput(metadata)), mConfig(alsa::getPcmConfig(getContext(), mIsInput)), diff --git a/audio/aidl/default/include/core-impl/Module.h b/audio/aidl/default/include/core-impl/Module.h index ee0458be49..2de7d0f393 100644 --- a/audio/aidl/default/include/core-impl/Module.h +++ b/audio/aidl/default/include/core-impl/Module.h @@ -159,13 +159,13 @@ class Module : public BnModule { // The following virtual functions are intended for vendor extension via inheritance. virtual ndk::ScopedAStatus createInputStream( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones, std::shared_ptr* result) = 0; virtual ndk::ScopedAStatus createOutputStream( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo, std::shared_ptr* result) = 0; diff --git a/audio/aidl/default/include/core-impl/ModulePrimary.h b/audio/aidl/default/include/core-impl/ModulePrimary.h index bc808ab03d..6264237fe3 100644 --- a/audio/aidl/default/include/core-impl/ModulePrimary.h +++ b/audio/aidl/default/include/core-impl/ModulePrimary.h @@ -28,13 +28,13 @@ class ModulePrimary final : public Module { ndk::ScopedAStatus getTelephony(std::shared_ptr* _aidl_return) override; ndk::ScopedAStatus createInputStream( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones, std::shared_ptr* result) override; ndk::ScopedAStatus createOutputStream( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo, std::shared_ptr* result) override; diff --git a/audio/aidl/default/include/core-impl/ModuleRemoteSubmix.h b/audio/aidl/default/include/core-impl/ModuleRemoteSubmix.h index ccfcdd9462..e87be3d9d2 100644 --- a/audio/aidl/default/include/core-impl/ModuleRemoteSubmix.h +++ b/audio/aidl/default/include/core-impl/ModuleRemoteSubmix.h @@ -33,13 +33,13 @@ class ModuleRemoteSubmix : public Module { // Module interfaces ndk::ScopedAStatus createInputStream( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones, std::shared_ptr* result) override; ndk::ScopedAStatus createOutputStream( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo, std::shared_ptr* result) override; diff --git a/audio/aidl/default/include/core-impl/ModuleStub.h b/audio/aidl/default/include/core-impl/ModuleStub.h index 59c343f4b7..4f771611ab 100644 --- a/audio/aidl/default/include/core-impl/ModuleStub.h +++ b/audio/aidl/default/include/core-impl/ModuleStub.h @@ -30,13 +30,13 @@ class ModuleStub final : public Module { ndk::ScopedAStatus getBluetoothLe(std::shared_ptr* _aidl_return) override; ndk::ScopedAStatus createInputStream( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones, std::shared_ptr* result) override; ndk::ScopedAStatus createOutputStream( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo, std::shared_ptr* result) override; diff --git a/audio/aidl/default/include/core-impl/ModuleUsb.h b/audio/aidl/default/include/core-impl/ModuleUsb.h index e6b3e66e41..a296b8c042 100644 --- a/audio/aidl/default/include/core-impl/ModuleUsb.h +++ b/audio/aidl/default/include/core-impl/ModuleUsb.h @@ -33,13 +33,13 @@ class ModuleUsb final : public ModuleAlsa { // Module interfaces ndk::ScopedAStatus createInputStream( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones, std::shared_ptr* result) override; ndk::ScopedAStatus createOutputStream( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo, std::shared_ptr* result) override; diff --git a/audio/aidl/default/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h index b65efb26f2..355d3b4cb8 100644 --- a/audio/aidl/default/include/core-impl/Stream.h +++ b/audio/aidl/default/include/core-impl/Stream.h @@ -411,16 +411,17 @@ class StreamCommonDelegator : public BnStreamCommon { }; // The implementation of DriverInterface must be provided by each concrete stream implementation. +// Note that StreamCommonImpl does not own the context. This is to support swapping on the fly +// implementations of the stream while keeping the same IStreamIn/Out instance. It's that instance +// who must be owner of the context. class StreamCommonImpl : virtual public StreamCommonInterface, virtual public DriverInterface { public: - StreamCommonImpl(const Metadata& metadata, StreamContext&& context, + StreamCommonImpl(const StreamContext& context, const Metadata& metadata, const StreamWorkerInterface::CreateInstance& createWorker) - : mMetadata(metadata), - mContext(std::move(context)), - mWorker(createWorker(mContext, this)) {} - StreamCommonImpl(const Metadata& metadata, StreamContext&& context) + : mContext(context), mMetadata(metadata), mWorker(createWorker(mContext, this)) {} + StreamCommonImpl(const StreamContext& context, const Metadata& metadata) : StreamCommonImpl( - metadata, std::move(context), + context, metadata, isInput(metadata) ? getDefaultInWorkerCreator() : getDefaultOutWorkerCreator()) {} ~StreamCommonImpl(); @@ -462,10 +463,11 @@ class StreamCommonImpl : virtual public StreamCommonInterface, virtual public Dr }; } + virtual void onClose() = 0; void stopWorker(); + const StreamContext& mContext; Metadata mMetadata; - StreamContext mContext; std::unique_ptr mWorker; ChildInterface mCommon; ConnectedDevices mConnectedDevices; @@ -475,6 +477,8 @@ class StreamCommonImpl : virtual public StreamCommonInterface, virtual public Dr // concrete input/output stream implementations. class StreamIn : virtual public StreamCommonInterface, public BnStreamIn { protected: + void defaultOnClose(); + ndk::ScopedAStatus getStreamCommon(std::shared_ptr* _aidl_return) override { return getStreamCommonCommon(_aidl_return); } @@ -494,14 +498,17 @@ class StreamIn : virtual public StreamCommonInterface, public BnStreamIn { friend class ndk::SharedRefBase; - explicit StreamIn( - const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones); + StreamIn(StreamContext&& context, + const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones); + StreamContext mContext; const std::map<::aidl::android::media::audio::common::AudioDevice, std::string> mMicrophones; }; class StreamOut : virtual public StreamCommonInterface, public BnStreamOut { protected: + void defaultOnClose(); + ndk::ScopedAStatus getStreamCommon(std::shared_ptr* _aidl_return) override { return getStreamCommonCommon(_aidl_return); } @@ -535,10 +542,12 @@ class StreamOut : virtual public StreamCommonInterface, public BnStreamOut { friend class ndk::SharedRefBase; - explicit StreamOut(const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& - offloadInfo); + StreamOut(StreamContext&& context, + const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& + offloadInfo); - std::optional<::aidl::android::media::audio::common::AudioOffloadInfo> mOffloadInfo; + StreamContext mContext; + const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo> mOffloadInfo; std::optional<::aidl::android::hardware::audio::common::AudioOffloadMetadata> mOffloadMetadata; }; diff --git a/audio/aidl/default/include/core-impl/StreamAlsa.h b/audio/aidl/default/include/core-impl/StreamAlsa.h index 700573f1da..90d2e36df7 100644 --- a/audio/aidl/default/include/core-impl/StreamAlsa.h +++ b/audio/aidl/default/include/core-impl/StreamAlsa.h @@ -31,7 +31,7 @@ namespace aidl::android::hardware::audio::core { // provide necessary overrides for all interface methods omitted here. class StreamAlsa : public StreamCommonImpl { public: - StreamAlsa(const Metadata& metadata, StreamContext&& context, int readWriteRetries); + StreamAlsa(const StreamContext& context, const Metadata& metadata, int readWriteRetries); // Methods of 'DriverInterface'. ::android::status_t init() override; ::android::status_t drain(StreamDescriptor::DrainMode) override; diff --git a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h index 1bca910995..4c984afff9 100644 --- a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h +++ b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h @@ -29,7 +29,7 @@ using aidl::android::hardware::audio::core::r_submix::SubmixRoute; class StreamRemoteSubmix : public StreamCommonImpl { public: - StreamRemoteSubmix(const Metadata& metadata, StreamContext&& context); + StreamRemoteSubmix(const StreamContext& context, const Metadata& metadata); ::android::status_t init() override; ::android::status_t drain(StreamDescriptor::DrainMode) override; @@ -72,28 +72,32 @@ class StreamRemoteSubmix : public StreamCommonImpl { static constexpr int kReadAttemptSleepUs = 5000; }; -class StreamInRemoteSubmix final : public StreamRemoteSubmix, public StreamIn { +class StreamInRemoteSubmix final : public StreamIn, public StreamRemoteSubmix { public: friend class ndk::SharedRefBase; StreamInRemoteSubmix( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones); private: + void onClose() override { defaultOnClose(); } ndk::ScopedAStatus getActiveMicrophones( std::vector<::aidl::android::media::audio::common::MicrophoneDynamicInfo>* _aidl_return) override; }; -class StreamOutRemoteSubmix final : public StreamRemoteSubmix, public StreamOut { +class StreamOutRemoteSubmix final : public StreamOut, public StreamRemoteSubmix { public: friend class ndk::SharedRefBase; StreamOutRemoteSubmix( - const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo); + + private: + void onClose() override { defaultOnClose(); } }; } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/include/core-impl/StreamStub.h b/audio/aidl/default/include/core-impl/StreamStub.h index 6b1b2ddc89..2a92deb07c 100644 --- a/audio/aidl/default/include/core-impl/StreamStub.h +++ b/audio/aidl/default/include/core-impl/StreamStub.h @@ -22,7 +22,7 @@ namespace aidl::android::hardware::audio::core { class StreamStub : public StreamCommonImpl { public: - StreamStub(const Metadata& metadata, StreamContext&& context); + StreamStub(const StreamContext& context, const Metadata& metadata); // Methods of 'DriverInterface'. ::android::status_t init() override; ::android::status_t drain(StreamDescriptor::DrainMode) override; @@ -43,22 +43,28 @@ class StreamStub : public StreamCommonImpl { bool mIsStandby = true; // Used for validating the state machine logic. }; -class StreamInStub final : public StreamStub, public StreamIn { +class StreamInStub final : public StreamIn, public StreamStub { public: friend class ndk::SharedRefBase; StreamInStub( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones); + + private: + void onClose() override { defaultOnClose(); } }; -class StreamOutStub final : public StreamStub, public StreamOut { +class StreamOutStub final : public StreamOut, public StreamStub { public: friend class ndk::SharedRefBase; - StreamOutStub(const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, - StreamContext&& context, + StreamOutStub(StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo); + + private: + void onClose() override { defaultOnClose(); } }; } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/include/core-impl/StreamUsb.h b/audio/aidl/default/include/core-impl/StreamUsb.h index 0189b6b7ed..7dc7296399 100644 --- a/audio/aidl/default/include/core-impl/StreamUsb.h +++ b/audio/aidl/default/include/core-impl/StreamUsb.h @@ -28,7 +28,7 @@ namespace aidl::android::hardware::audio::core { class StreamUsb : public StreamAlsa { public: - StreamUsb(const Metadata& metadata, StreamContext&& context); + StreamUsb(const StreamContext& context, const Metadata& metadata); // Methods of 'DriverInterface'. ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount, int32_t* latencyMs) override; @@ -44,29 +44,31 @@ class StreamUsb : public StreamAlsa { std::atomic mConnectedDevicesUpdated = false; }; -class StreamInUsb final : public StreamUsb, public StreamIn { +class StreamInUsb final : public StreamIn, public StreamUsb { public: friend class ndk::SharedRefBase; StreamInUsb( - const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, StreamContext&& context, + const ::aidl::android::hardware::audio::common::SinkMetadata& sinkMetadata, const std::vector<::aidl::android::media::audio::common::MicrophoneInfo>& microphones); private: + void onClose() override { defaultOnClose(); } ndk::ScopedAStatus getActiveMicrophones( std::vector<::aidl::android::media::audio::common::MicrophoneDynamicInfo>* _aidl_return) override; }; -class StreamOutUsb final : public StreamUsb, public StreamOut { +class StreamOutUsb final : public StreamOut, public StreamUsb { public: friend class ndk::SharedRefBase; - StreamOutUsb(const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, - StreamContext&& context, + StreamOutUsb(StreamContext&& context, + const ::aidl::android::hardware::audio::common::SourceMetadata& sourceMetadata, const std::optional<::aidl::android::media::audio::common::AudioOffloadInfo>& offloadInfo); private: + void onClose() override { defaultOnClose(); } ndk::ScopedAStatus getHwVolume(std::vector* _aidl_return) override; ndk::ScopedAStatus setHwVolume(const std::vector& in_channelVolumes) override; diff --git a/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp b/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp index 2b79f51117..9be783758d 100644 --- a/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp +++ b/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp @@ -56,16 +56,16 @@ ndk::ScopedAStatus ModuleRemoteSubmix::setMicMute(bool in_mute __unused) { } ndk::ScopedAStatus ModuleRemoteSubmix::createInputStream( - const SinkMetadata& sinkMetadata, StreamContext&& context, + StreamContext&& context, const SinkMetadata& sinkMetadata, const std::vector& microphones, std::shared_ptr* result) { - return createStreamInstance(result, sinkMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sinkMetadata, microphones); } ndk::ScopedAStatus ModuleRemoteSubmix::createOutputStream( - const SourceMetadata& sourceMetadata, StreamContext&& context, + StreamContext&& context, const SourceMetadata& sourceMetadata, const std::optional& offloadInfo, std::shared_ptr* result) { - return createStreamInstance(result, sourceMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sourceMetadata, offloadInfo); } diff --git a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp index 6d5185b346..53d4aa61ab 100644 --- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp +++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp @@ -29,8 +29,8 @@ using aidl::android::media::audio::common::MicrophoneInfo; namespace aidl::android::hardware::audio::core { -StreamRemoteSubmix::StreamRemoteSubmix(const Metadata& metadata, StreamContext&& context) - : StreamCommonImpl(metadata, std::move(context)), +StreamRemoteSubmix::StreamRemoteSubmix(const StreamContext& context, const Metadata& metadata) + : StreamCommonImpl(context, metadata), mPortId(context.getPortId()), mIsInput(isInput(metadata)) { mStreamConfig.frameSize = context.getFrameSize(); @@ -353,10 +353,11 @@ size_t StreamRemoteSubmix::getStreamPipeSizeInFrames() { return ::android::OK; } -StreamInRemoteSubmix::StreamInRemoteSubmix(const SinkMetadata& sinkMetadata, - StreamContext&& context, +StreamInRemoteSubmix::StreamInRemoteSubmix(StreamContext&& context, + const SinkMetadata& sinkMetadata, const std::vector& microphones) - : StreamRemoteSubmix(sinkMetadata, std::move(context)), StreamIn(microphones) {} + : StreamIn(std::move(context), microphones), + StreamRemoteSubmix(StreamIn::mContext, sinkMetadata) {} ndk::ScopedAStatus StreamInRemoteSubmix::getActiveMicrophones( std::vector* _aidl_return) { @@ -365,9 +366,10 @@ ndk::ScopedAStatus StreamInRemoteSubmix::getActiveMicrophones( return ndk::ScopedAStatus::ok(); } -StreamOutRemoteSubmix::StreamOutRemoteSubmix(const SourceMetadata& sourceMetadata, - StreamContext&& context, +StreamOutRemoteSubmix::StreamOutRemoteSubmix(StreamContext&& context, + const SourceMetadata& sourceMetadata, const std::optional& offloadInfo) - : StreamRemoteSubmix(sourceMetadata, std::move(context)), StreamOut(offloadInfo) {} + : StreamOut(std::move(context), offloadInfo), + StreamRemoteSubmix(StreamOut::mContext, sourceMetadata) {} } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/stub/ModuleStub.cpp b/audio/aidl/default/stub/ModuleStub.cpp index 72f2241c03..5e4cd88ff6 100644 --- a/audio/aidl/default/stub/ModuleStub.cpp +++ b/audio/aidl/default/stub/ModuleStub.cpp @@ -63,18 +63,18 @@ ndk::ScopedAStatus ModuleStub::getBluetoothLe(std::shared_ptr* _ai return ndk::ScopedAStatus::ok(); } -ndk::ScopedAStatus ModuleStub::createInputStream(const SinkMetadata& sinkMetadata, - StreamContext&& context, +ndk::ScopedAStatus ModuleStub::createInputStream(StreamContext&& context, + const SinkMetadata& sinkMetadata, const std::vector& microphones, std::shared_ptr* result) { - return createStreamInstance(result, sinkMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sinkMetadata, microphones); } ndk::ScopedAStatus ModuleStub::createOutputStream( - const SourceMetadata& sourceMetadata, StreamContext&& context, + StreamContext&& context, const SourceMetadata& sourceMetadata, const std::optional& offloadInfo, std::shared_ptr* result) { - return createStreamInstance(result, sourceMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sourceMetadata, offloadInfo); } diff --git a/audio/aidl/default/stub/StreamStub.cpp b/audio/aidl/default/stub/StreamStub.cpp index 2dcf4d4d42..e916fea0fd 100644 --- a/audio/aidl/default/stub/StreamStub.cpp +++ b/audio/aidl/default/stub/StreamStub.cpp @@ -31,8 +31,8 @@ using aidl::android::media::audio::common::MicrophoneInfo; namespace aidl::android::hardware::audio::core { -StreamStub::StreamStub(const Metadata& metadata, StreamContext&& context) - : StreamCommonImpl(metadata, std::move(context)), +StreamStub::StreamStub(const StreamContext& context, const Metadata& metadata) + : StreamCommonImpl(context, metadata), mFrameSizeBytes(getContext().getFrameSize()), mSampleRate(getContext().getSampleRate()), mIsAsynchronous(!!getContext().getAsyncCallback()), @@ -118,12 +118,12 @@ void StreamStub::shutdown() { mIsInitialized = false; } -StreamInStub::StreamInStub(const SinkMetadata& sinkMetadata, StreamContext&& context, +StreamInStub::StreamInStub(StreamContext&& context, const SinkMetadata& sinkMetadata, const std::vector& microphones) - : StreamStub(sinkMetadata, std::move(context)), StreamIn(microphones) {} + : StreamIn(std::move(context), microphones), StreamStub(StreamIn::mContext, sinkMetadata) {} -StreamOutStub::StreamOutStub(const SourceMetadata& sourceMetadata, StreamContext&& context, +StreamOutStub::StreamOutStub(StreamContext&& context, const SourceMetadata& sourceMetadata, const std::optional& offloadInfo) - : StreamStub(sourceMetadata, std::move(context)), StreamOut(offloadInfo) {} + : StreamOut(std::move(context), offloadInfo), StreamStub(StreamOut::mContext, sourceMetadata) {} } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/usb/ModuleUsb.cpp b/audio/aidl/default/usb/ModuleUsb.cpp index a812e4d3a1..f926e09399 100644 --- a/audio/aidl/default/usb/ModuleUsb.cpp +++ b/audio/aidl/default/usb/ModuleUsb.cpp @@ -68,22 +68,22 @@ ndk::ScopedAStatus ModuleUsb::setMicMute(bool in_mute __unused) { return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); } -ndk::ScopedAStatus ModuleUsb::createInputStream(const SinkMetadata& sinkMetadata, - StreamContext&& context, +ndk::ScopedAStatus ModuleUsb::createInputStream(StreamContext&& context, + const SinkMetadata& sinkMetadata, const std::vector& microphones, std::shared_ptr* result) { - return createStreamInstance(result, sinkMetadata, std::move(context), microphones); + return createStreamInstance(result, std::move(context), sinkMetadata, microphones); } -ndk::ScopedAStatus ModuleUsb::createOutputStream(const SourceMetadata& sourceMetadata, - StreamContext&& context, +ndk::ScopedAStatus ModuleUsb::createOutputStream(StreamContext&& context, + const SourceMetadata& sourceMetadata, const std::optional& offloadInfo, std::shared_ptr* result) { if (offloadInfo.has_value()) { LOG(ERROR) << __func__ << ": offload is not supported"; return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); } - return createStreamInstance(result, sourceMetadata, std::move(context), + return createStreamInstance(result, std::move(context), sourceMetadata, offloadInfo); } diff --git a/audio/aidl/default/usb/StreamUsb.cpp b/audio/aidl/default/usb/StreamUsb.cpp index f6642450c8..def12e094c 100644 --- a/audio/aidl/default/usb/StreamUsb.cpp +++ b/audio/aidl/default/usb/StreamUsb.cpp @@ -35,8 +35,8 @@ using aidl::android::media::audio::common::MicrophoneInfo; namespace aidl::android::hardware::audio::core { -StreamUsb::StreamUsb(const Metadata& metadata, StreamContext&& context) - : StreamAlsa(metadata, std::move(context), 1 /*readWriteRetries*/) {} +StreamUsb::StreamUsb(const StreamContext& context, const Metadata& metadata) + : StreamAlsa(context, metadata, 1 /*readWriteRetries*/) {} ndk::ScopedAStatus StreamUsb::setConnectedDevices( const std::vector& connectedDevices) { @@ -55,7 +55,7 @@ ndk::ScopedAStatus StreamUsb::setConnectedDevices( } connectedDeviceProfiles.push_back(*profile); } - RETURN_STATUS_IF_ERROR(StreamCommonImpl::setConnectedDevices(connectedDevices)); + RETURN_STATUS_IF_ERROR(setConnectedDevices(connectedDevices)); std::lock_guard guard(mLock); mConnectedDeviceProfiles = std::move(connectedDeviceProfiles); mConnectedDevicesUpdated.store(true, std::memory_order_release); @@ -83,9 +83,9 @@ std::vector StreamUsb::getDeviceProfiles() { return connectedDevices; } -StreamInUsb::StreamInUsb(const SinkMetadata& sinkMetadata, StreamContext&& context, +StreamInUsb::StreamInUsb(StreamContext&& context, const SinkMetadata& sinkMetadata, const std::vector& microphones) - : StreamUsb(sinkMetadata, std::move(context)), StreamIn(microphones) {} + : StreamIn(std::move(context), microphones), StreamUsb(StreamIn::mContext, sinkMetadata) {} ndk::ScopedAStatus StreamInUsb::getActiveMicrophones( std::vector* _aidl_return __unused) { @@ -93,10 +93,10 @@ ndk::ScopedAStatus StreamInUsb::getActiveMicrophones( return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); } -StreamOutUsb::StreamOutUsb(const SourceMetadata& sourceMetadata, StreamContext&& context, +StreamOutUsb::StreamOutUsb(StreamContext&& context, const SourceMetadata& sourceMetadata, const std::optional& offloadInfo) - : StreamUsb(sourceMetadata, std::move(context)), - StreamOut(offloadInfo), + : StreamOut(std::move(context), offloadInfo), + StreamUsb(StreamOut::mContext, sourceMetadata), mChannelCount(getChannelCount(getContext().getChannelLayout())) {} ndk::ScopedAStatus StreamOutUsb::getHwVolume(std::vector* _aidl_return) {