owning_audio_manager_accessor.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2018 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 SERVICES_AUDIO_OWNING_AUDIO_MANAGER_ACCESSOR_H_
  5. #define SERVICES_AUDIO_OWNING_AUDIO_MANAGER_ACCESSOR_H_
  6. #include <memory>
  7. #include "base/memory/raw_ptr.h"
  8. #include "base/threading/thread_checker.h"
  9. #include "build/build_config.h"
  10. #include "services/audio/service.h"
  11. #if BUILDFLAG(IS_WIN)
  12. #include "base/win/scoped_com_initializer.h"
  13. #endif
  14. namespace media {
  15. class AudioLogFactory;
  16. class AudioManager;
  17. class AudioThread;
  18. } // namespace media
  19. namespace audio {
  20. // Lazily creates AudioManager using provided factory callback and controls its
  21. // lifetime. Threading model of a created AudioManager is enforced: its main
  22. // thread is the thread OwningAudioManagerAccessor lives on.
  23. class OwningAudioManagerAccessor : public Service::AudioManagerAccessor {
  24. public:
  25. using AudioManagerFactoryCallback =
  26. base::OnceCallback<std::unique_ptr<media::AudioManager>(
  27. std::unique_ptr<media::AudioThread>,
  28. media::AudioLogFactory* audio_log_factory)>;
  29. explicit OwningAudioManagerAccessor(
  30. AudioManagerFactoryCallback audio_manager_factory_cb);
  31. OwningAudioManagerAccessor(const OwningAudioManagerAccessor&) = delete;
  32. OwningAudioManagerAccessor& operator=(const OwningAudioManagerAccessor&) =
  33. delete;
  34. ~OwningAudioManagerAccessor() override;
  35. media::AudioManager* GetAudioManager() final;
  36. void SetAudioLogFactory(media::AudioLogFactory* factory) final;
  37. void Shutdown() final;
  38. private:
  39. #if BUILDFLAG(IS_WIN)
  40. // Required to access CoreAudio.
  41. base::win::ScopedCOMInitializer com_initializer_{
  42. base::win::ScopedCOMInitializer::kMTA};
  43. #endif
  44. AudioManagerFactoryCallback audio_manager_factory_cb_;
  45. std::unique_ptr<media::AudioManager> audio_manager_;
  46. raw_ptr<media::AudioLogFactory> log_factory_ = nullptr; // not owned.
  47. THREAD_CHECKER(thread_checker_);
  48. };
  49. } // namespace audio
  50. #endif // SERVICES_AUDIO_OWNING_AUDIO_MANAGER_ACCESSOR_H_