| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SERVICES_AUDIO_GROUP_MEMBER_H_ |
| #define SERVICES_AUDIO_GROUP_MEMBER_H_ |
| |
| #include "base/time/time.h" |
| |
| namespace base { |
| class UnguessableToken; |
| } |
| |
| namespace media { |
| class AudioBus; |
| class AudioParameters; |
| } // namespace media |
| |
| namespace audio { |
| |
| // Interface for accessing signal data and controlling a members of an audio |
| // group. A group is defined by a common group identifier that all members |
| // share. |
| // |
| // The purpose of the grouping concept is to allow a feature to identify all |
| // audio flows that come from the same logical unit, such as a browser tab. The |
| // audio flows can then be duplicated, or other group-wide control exercised on |
| // all members (such as audio muting). |
| class GroupMember { |
| public: |
| class Snooper { |
| public: |
| // Provides read-only access to the data flowing through a GroupMember. |
| virtual void OnData(const media::AudioBus& audio_bus, |
| base::TimeTicks reference_time, |
| double volume) = 0; |
| |
| protected: |
| virtual ~Snooper() = default; |
| }; |
| |
| // Returns the string identifier of the group. This must not change for the |
| // lifetime of this group member. |
| virtual const base::UnguessableToken& GetGroupId() = 0; |
| |
| // Returns the audio parameters of the snoopable audio data. The parameters |
| // must not change for the lifetime of this group member, but can be different |
| // than those of other members. |
| virtual const media::AudioParameters& GetAudioParameters() = 0; |
| |
| // Starts/Stops snooping on the audio data flowing through this group member. |
| virtual void StartSnooping(Snooper* snooper) = 0; |
| virtual void StopSnooping(Snooper* snooper) = 0; |
| |
| // Starts/Stops muting of the outbound audio signal from this group member. |
| // However, the audio data being sent to Snoopers should be the original, |
| // unmuted audio. Note that an equal number of start versus stop calls here is |
| // not required, and the implementation should ignore redundant calls. |
| virtual void StartMuting() = 0; |
| virtual void StopMuting() = 0; |
| |
| protected: |
| virtual ~GroupMember() = default; |
| }; |
| |
| } // namespace audio |
| |
| #endif // SERVICES_AUDIO_GROUP_MEMBER_H_ |