Loading services/audiopolicy/AudioPolicyInterface.h +6 −15 Original line number Diff line number Diff line Loading @@ -124,17 +124,11 @@ public: audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId) = 0; // indicates to the audio policy manager that the output starts being used by corresponding stream. virtual status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual status_t startOutput(audio_port_handle_t portId) = 0; // indicates to the audio policy manager that the output stops being used by corresponding stream. virtual status_t stopOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual status_t stopOutput(audio_port_handle_t portId) = 0; // releases the output. virtual void releaseOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual void releaseOutput(audio_port_handle_t portId) = 0; // request an input appropriate for record from the supplied device with supplied parameters. virtual status_t getInputForAttr(const audio_attributes_t *attr, Loading @@ -147,16 +141,13 @@ public: input_type_t *inputType, audio_port_handle_t *portId) = 0; // indicates to the audio policy manager that the input starts being used. virtual status_t startInput(audio_io_handle_t input, audio_session_t session, virtual status_t startInput(audio_port_handle_t portId, bool silenced, concurrency_type__mask_t *concurrency) = 0; // indicates to the audio policy manager that the input stops being used. virtual status_t stopInput(audio_io_handle_t input, audio_session_t session) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; // releases the input. virtual void releaseInput(audio_io_handle_t input, audio_session_t session) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; // // volume control functions Loading services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h +9 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "AudioIODescriptorInterface.h" #include "AudioPort.h" #include "AudioSession.h" #include "ClientDescriptor.h" #include <utils/Errors.h> #include <system/audio.h> #include <utils/SortedVector.h> Loading Loading @@ -88,6 +89,9 @@ public: void stop(); void close(); RecordClientMap& clients() { return mClients; } RecordClientVector getClientsForSession(audio_session_t session); private: void updateSessionRecordingConfiguration(int event, const sp<AudioSession>& audioSession); Loading @@ -105,6 +109,8 @@ private: SortedVector<audio_session_t> mPreemptedSessions; AudioPolicyClientInterface *mClientInterface; uint32_t mGlobalRefCount; // non-session-specific ref count RecordClientMap mClients; }; class AudioInputCollection : Loading @@ -128,6 +134,8 @@ public: audio_devices_t getSupportedDevices(audio_io_handle_t handle) const; sp<AudioInputDescriptor> getInputForClient(audio_port_handle_t portId); status_t dump(int fd) const; }; Loading services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h +9 −3 Original line number Diff line number Diff line Loading @@ -17,14 +17,15 @@ #pragma once #include <sys/types.h> #include "AudioPort.h" #include <RoutingStrategy.h> #include <utils/Errors.h> #include <utils/Timers.h> #include <utils/KeyedVector.h> #include <system/audio.h> #include <RoutingStrategy.h> #include "AudioIODescriptorInterface.h" #include "AudioPort.h" #include "AudioSourceDescriptor.h" #include "ClientDescriptor.h" namespace android { Loading Loading @@ -78,6 +79,8 @@ public: audio_patch_handle_t getPatchHandle() const override; void setPatchHandle(audio_patch_handle_t handle) override; TrackClientMap& clients() { return mClients; } sp<AudioPort> mPort; audio_devices_t mDevice; // current device this output is routed to uint32_t mRefCount[AUDIO_STREAM_CNT]; // number of streams of each type using this output Loading @@ -91,6 +94,7 @@ public: protected: audio_patch_handle_t mPatchHandle; audio_port_handle_t mId; TrackClientMap mClients; }; // Audio output driven by a software mixer in audio flinger. Loading Loading @@ -226,6 +230,8 @@ public: audio_devices_t getSupportedDevices(audio_io_handle_t handle) const; sp<SwAudioOutputDescriptor> getOutputForClient(audio_port_handle_t portId); status_t dump(int fd) const; }; Loading services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h +14 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,15 @@ #pragma once #include <vector> #include <map> #include <unistd.h> #include <sys/types.h> #include <system/audio.h> #include <utils/Errors.h> #include <utils/RefBase.h> #include <utils/String8.h> namespace android { Loading @@ -35,7 +38,8 @@ public: mConfig(config), mPreferredDeviceId(preferredDeviceId), mActive(false) {} ~ClientDescriptor() override = default; virtual status_t dump(int fd); status_t dump(int fd, int spaces, int index); virtual status_t dump(String8& dst, int spaces, int index); audio_port_handle_t portId() const { return mPortId; } uid_t uid() const { return mUid; } Loading Loading @@ -67,7 +71,8 @@ public: mStream(stream), mFlags(flags) {} ~TrackClientDescriptor() override = default; status_t dump(int fd) override; using ClientDescriptor::dump; status_t dump(String8& dst, int spaces, int index) override; audio_output_flags_t flags() const { return mFlags; } audio_stream_type_t stream() const { return mStream; } Loading @@ -88,7 +93,8 @@ public: mSource(source), mFlags(flags) {} ~RecordClientDescriptor() override = default; status_t dump(int fd) override; using ClientDescriptor::dump; status_t dump(String8& dst, int spaces, int index) override; audio_source_t source() const { return mSource; } audio_input_flags_t flags() const { return mFlags; } Loading @@ -98,4 +104,9 @@ private: const audio_input_flags_t mFlags; }; typedef std::vector< sp<TrackClientDescriptor> > TrackClientVector; typedef std::map< audio_port_handle_t, sp<TrackClientDescriptor> > TrackClientMap; typedef std::vector< sp<RecordClientDescriptor> > RecordClientVector; typedef std::map< audio_port_handle_t, sp<RecordClientDescriptor> > RecordClientMap; } // namespace android services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,18 @@ void AudioInputDescriptor::updateSessionRecordingConfiguration( &config, mPatchHandle); } RecordClientVector AudioInputDescriptor::getClientsForSession( audio_session_t session) { RecordClientVector clients; for (const auto &client : mClients) { if (client.second->session() == session) { clients.push_back(client.second); } } return clients; } status_t AudioInputDescriptor::dump(int fd) { const size_t SIZE = 256; Loading @@ -361,6 +373,13 @@ status_t AudioInputDescriptor::dump(int fd) mSessions.dump(fd, 1); size_t index = 0; result = " AudioRecord clients:\n"; for (const auto& client: mClients) { client.second->dump(result, 2, index++); } result.append(" \n"); write(fd, result.string(), result.size()); return NO_ERROR; } Loading Loading @@ -423,6 +442,19 @@ audio_devices_t AudioInputCollection::getSupportedDevices(audio_io_handle_t hand return devices; } sp<AudioInputDescriptor> AudioInputCollection::getInputForClient(audio_port_handle_t portId) { for (size_t i = 0; i < size(); i++) { sp<AudioInputDescriptor> inputDesc = valueAt(i); for (const auto& client : inputDesc->clients()) { if (client.second->portId() == portId) { return inputDesc; } } } return 0; } status_t AudioInputCollection::dump(int fd) const { const size_t SIZE = 256; Loading Loading
services/audiopolicy/AudioPolicyInterface.h +6 −15 Original line number Diff line number Diff line Loading @@ -124,17 +124,11 @@ public: audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId) = 0; // indicates to the audio policy manager that the output starts being used by corresponding stream. virtual status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual status_t startOutput(audio_port_handle_t portId) = 0; // indicates to the audio policy manager that the output stops being used by corresponding stream. virtual status_t stopOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual status_t stopOutput(audio_port_handle_t portId) = 0; // releases the output. virtual void releaseOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) = 0; virtual void releaseOutput(audio_port_handle_t portId) = 0; // request an input appropriate for record from the supplied device with supplied parameters. virtual status_t getInputForAttr(const audio_attributes_t *attr, Loading @@ -147,16 +141,13 @@ public: input_type_t *inputType, audio_port_handle_t *portId) = 0; // indicates to the audio policy manager that the input starts being used. virtual status_t startInput(audio_io_handle_t input, audio_session_t session, virtual status_t startInput(audio_port_handle_t portId, bool silenced, concurrency_type__mask_t *concurrency) = 0; // indicates to the audio policy manager that the input stops being used. virtual status_t stopInput(audio_io_handle_t input, audio_session_t session) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; // releases the input. virtual void releaseInput(audio_io_handle_t input, audio_session_t session) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; // // volume control functions Loading
services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h +9 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include "AudioIODescriptorInterface.h" #include "AudioPort.h" #include "AudioSession.h" #include "ClientDescriptor.h" #include <utils/Errors.h> #include <system/audio.h> #include <utils/SortedVector.h> Loading Loading @@ -88,6 +89,9 @@ public: void stop(); void close(); RecordClientMap& clients() { return mClients; } RecordClientVector getClientsForSession(audio_session_t session); private: void updateSessionRecordingConfiguration(int event, const sp<AudioSession>& audioSession); Loading @@ -105,6 +109,8 @@ private: SortedVector<audio_session_t> mPreemptedSessions; AudioPolicyClientInterface *mClientInterface; uint32_t mGlobalRefCount; // non-session-specific ref count RecordClientMap mClients; }; class AudioInputCollection : Loading @@ -128,6 +134,8 @@ public: audio_devices_t getSupportedDevices(audio_io_handle_t handle) const; sp<AudioInputDescriptor> getInputForClient(audio_port_handle_t portId); status_t dump(int fd) const; }; Loading
services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h +9 −3 Original line number Diff line number Diff line Loading @@ -17,14 +17,15 @@ #pragma once #include <sys/types.h> #include "AudioPort.h" #include <RoutingStrategy.h> #include <utils/Errors.h> #include <utils/Timers.h> #include <utils/KeyedVector.h> #include <system/audio.h> #include <RoutingStrategy.h> #include "AudioIODescriptorInterface.h" #include "AudioPort.h" #include "AudioSourceDescriptor.h" #include "ClientDescriptor.h" namespace android { Loading Loading @@ -78,6 +79,8 @@ public: audio_patch_handle_t getPatchHandle() const override; void setPatchHandle(audio_patch_handle_t handle) override; TrackClientMap& clients() { return mClients; } sp<AudioPort> mPort; audio_devices_t mDevice; // current device this output is routed to uint32_t mRefCount[AUDIO_STREAM_CNT]; // number of streams of each type using this output Loading @@ -91,6 +94,7 @@ public: protected: audio_patch_handle_t mPatchHandle; audio_port_handle_t mId; TrackClientMap mClients; }; // Audio output driven by a software mixer in audio flinger. Loading Loading @@ -226,6 +230,8 @@ public: audio_devices_t getSupportedDevices(audio_io_handle_t handle) const; sp<SwAudioOutputDescriptor> getOutputForClient(audio_port_handle_t portId); status_t dump(int fd) const; }; Loading
services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h +14 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,15 @@ #pragma once #include <vector> #include <map> #include <unistd.h> #include <sys/types.h> #include <system/audio.h> #include <utils/Errors.h> #include <utils/RefBase.h> #include <utils/String8.h> namespace android { Loading @@ -35,7 +38,8 @@ public: mConfig(config), mPreferredDeviceId(preferredDeviceId), mActive(false) {} ~ClientDescriptor() override = default; virtual status_t dump(int fd); status_t dump(int fd, int spaces, int index); virtual status_t dump(String8& dst, int spaces, int index); audio_port_handle_t portId() const { return mPortId; } uid_t uid() const { return mUid; } Loading Loading @@ -67,7 +71,8 @@ public: mStream(stream), mFlags(flags) {} ~TrackClientDescriptor() override = default; status_t dump(int fd) override; using ClientDescriptor::dump; status_t dump(String8& dst, int spaces, int index) override; audio_output_flags_t flags() const { return mFlags; } audio_stream_type_t stream() const { return mStream; } Loading @@ -88,7 +93,8 @@ public: mSource(source), mFlags(flags) {} ~RecordClientDescriptor() override = default; status_t dump(int fd) override; using ClientDescriptor::dump; status_t dump(String8& dst, int spaces, int index) override; audio_source_t source() const { return mSource; } audio_input_flags_t flags() const { return mFlags; } Loading @@ -98,4 +104,9 @@ private: const audio_input_flags_t mFlags; }; typedef std::vector< sp<TrackClientDescriptor> > TrackClientVector; typedef std::map< audio_port_handle_t, sp<TrackClientDescriptor> > TrackClientMap; typedef std::vector< sp<RecordClientDescriptor> > RecordClientVector; typedef std::map< audio_port_handle_t, sp<RecordClientDescriptor> > RecordClientMap; } // namespace android
services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,18 @@ void AudioInputDescriptor::updateSessionRecordingConfiguration( &config, mPatchHandle); } RecordClientVector AudioInputDescriptor::getClientsForSession( audio_session_t session) { RecordClientVector clients; for (const auto &client : mClients) { if (client.second->session() == session) { clients.push_back(client.second); } } return clients; } status_t AudioInputDescriptor::dump(int fd) { const size_t SIZE = 256; Loading @@ -361,6 +373,13 @@ status_t AudioInputDescriptor::dump(int fd) mSessions.dump(fd, 1); size_t index = 0; result = " AudioRecord clients:\n"; for (const auto& client: mClients) { client.second->dump(result, 2, index++); } result.append(" \n"); write(fd, result.string(), result.size()); return NO_ERROR; } Loading Loading @@ -423,6 +442,19 @@ audio_devices_t AudioInputCollection::getSupportedDevices(audio_io_handle_t hand return devices; } sp<AudioInputDescriptor> AudioInputCollection::getInputForClient(audio_port_handle_t portId) { for (size_t i = 0; i < size(); i++) { sp<AudioInputDescriptor> inputDesc = valueAt(i); for (const auto& client : inputDesc->clients()) { if (client.second->portId() == portId) { return inputDesc; } } } return 0; } status_t AudioInputCollection::dump(int fd) const { const size_t SIZE = 256; Loading