12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2021 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_MIXING_GRAPH_H_
- #define SERVICES_AUDIO_MIXING_GRAPH_H_
- #include <memory>
- #include "base/callback.h"
- #include "base/time/time.h"
- #include "media/audio/audio_io.h"
- #include "media/base/audio_bus.h"
- #include "media/base/audio_converter.h"
- #include "media/base/audio_parameters.h"
- namespace audio {
- // The graph is mixing audio provided by multiple audio sources
- // (AudioOutputStream::AudioSourceCallback instances) and represents the mix as
- // a single AudioOutputStream::AudioSourceCallback, which in turn serves as an
- // audio source providing audio buffers to AudioOutputStream for playback.
- class MixingGraph : public media::AudioOutputStream::AudioSourceCallback {
- public:
- using InputCallback = media::AudioConverter::InputCallback;
- using OnMoreDataCallback =
- base::RepeatingCallback<void(const media::AudioBus&, base::TimeDelta)>;
- using OnErrorCallback = base::RepeatingCallback<void(
- media::AudioOutputStream::AudioSourceCallback::ErrorType)>;
- // A helper class for the clients to pass MixingGraph::Create() around as a
- // callback.
- using CreateCallback = base::OnceCallback<std::unique_ptr<MixingGraph>(
- const media::AudioParameters& output_params,
- OnMoreDataCallback on_more_data_cb,
- OnErrorCallback on_error_cb)>;
- // Represents an audio source as an input to MixingGraph.
- // An adapter from AudioOutputStream::AudioSourceCallback to
- // AudioConverter::InputCallback.
- class Input : public InputCallback {
- public:
- Input() = default;
- ~Input() override = default;
- Input(const Input&) = delete;
- Input& operator=(const Input&) = delete;
- // Returns the audio source parameters.
- virtual const media::AudioParameters& GetParams() const = 0;
- // Sets the volume.
- virtual void SetVolume(double volume) = 0;
- // Starts providing audio from |source_callback| to the graph which created
- // the given Input.
- virtual void Start(
- media::AudioOutputStream::AudioSourceCallback* source_callback) = 0;
- // Stops providing audio to the graph which created the given Input.
- virtual void Stop() = 0;
- };
- // Creates a graph which will provide the audio mix formatted as
- // |output_params| each time its
- // AudioOutputStream::AudioSourceCallback::OnMoreData() method is called, and
- // will also provide the audio mix to |on_more_data_cb| callback.
- // |on_error_cb| will be used to notify the client about audio rendering
- // errors.
- static std::unique_ptr<MixingGraph> Create(
- const media::AudioParameters& output_params,
- OnMoreDataCallback on_more_data_cb,
- OnErrorCallback on_error_cb);
- MixingGraph() = default;
- MixingGraph(const MixingGraph&) = delete;
- MixingGraph& operator=(const MixingGraph&) = delete;
- // Creates a graph input with given audio source parameters.
- virtual std::unique_ptr<Input> CreateInput(
- const media::AudioParameters& params) = 0;
- protected:
- friend class SyncMixingGraphInput;
- // Adds an input to the graph. To be called by Input::Start().
- virtual void AddInput(Input* node) = 0;
- // Removes an input from the graph. To be called by Input::Stop().
- virtual void RemoveInput(Input* node) = 0;
- };
- } // namespace audio
- #endif // SERVICES_AUDIO_MIXING_GRAPH_H_
|