loopback_audio_converter.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_BASE_LOOPBACK_AUDIO_CONVERTER_H_
  5. #define MEDIA_BASE_LOOPBACK_AUDIO_CONVERTER_H_
  6. #include "media/base/audio_converter.h"
  7. namespace media {
  8. // LoopbackAudioConverter works similar to AudioConverter and converts input
  9. // streams to different audio parameters. Then, the LoopbackAudioConverter can
  10. // be used as an input to another AudioConverter. This allows us to
  11. // use converted audio from AudioOutputStreams as input to an AudioConverter.
  12. // For example, this allows converting multiple streams into a common format and
  13. // using the converted audio as input to another AudioConverter (i.e. a mixer).
  14. class MEDIA_EXPORT LoopbackAudioConverter
  15. : public AudioConverter::InputCallback {
  16. public:
  17. LoopbackAudioConverter(const AudioParameters& input_params,
  18. const AudioParameters& output_params,
  19. bool disable_fifo);
  20. LoopbackAudioConverter(const LoopbackAudioConverter&) = delete;
  21. LoopbackAudioConverter& operator=(const LoopbackAudioConverter&) = delete;
  22. ~LoopbackAudioConverter() override;
  23. void AddInput(AudioConverter::InputCallback* input) {
  24. audio_converter_.AddInput(input);
  25. }
  26. void RemoveInput(AudioConverter::InputCallback* input) {
  27. audio_converter_.RemoveInput(input);
  28. }
  29. bool empty() { return audio_converter_.empty(); }
  30. private:
  31. double ProvideInput(AudioBus* audio_bus, uint32_t frames_delayed) override;
  32. AudioConverter audio_converter_;
  33. };
  34. } // namespace media
  35. #endif // MEDIA_BASE_LOOPBACK_AUDIO_CONVERTER_H_