audio_manager_cras.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2020 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_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_
  5. #define MEDIA_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_
  6. #include <cras_types.h>
  7. #include <memory>
  8. #include <string>
  9. #include <vector>
  10. #include "base/compiler_specific.h"
  11. #include "base/memory/ref_counted.h"
  12. #include "media/audio/cras/audio_manager_cras_base.h"
  13. #include "media/audio/cras/cras_util.h"
  14. namespace media {
  15. class MEDIA_EXPORT AudioManagerCras : public AudioManagerCrasBase {
  16. public:
  17. AudioManagerCras(std::unique_ptr<AudioThread> audio_thread,
  18. AudioLogFactory* audio_log_factory);
  19. AudioManagerCras(const AudioManagerCras&) = delete;
  20. AudioManagerCras& operator=(const AudioManagerCras&) = delete;
  21. ~AudioManagerCras() override;
  22. // AudioManager implementation.
  23. bool HasAudioOutputDevices() override;
  24. bool HasAudioInputDevices() override;
  25. void GetAudioInputDeviceNames(AudioDeviceNames* device_names) override;
  26. void GetAudioOutputDeviceNames(AudioDeviceNames* device_names) override;
  27. AudioParameters GetInputStreamParameters(
  28. const std::string& device_id) override;
  29. std::string GetDefaultInputDeviceID() override;
  30. std::string GetDefaultOutputDeviceID() override;
  31. std::string GetGroupIDInput(const std::string& device_id) override;
  32. std::string GetGroupIDOutput(const std::string& device_id) override;
  33. std::string GetAssociatedOutputDeviceID(
  34. const std::string& input_device_id) override;
  35. // AudioManagerCrasBase implementation.
  36. bool IsDefault(const std::string& device_id, bool is_input) override;
  37. enum CRAS_CLIENT_TYPE GetClientType() override;
  38. // Produces AudioParameters for the system, including audio processing
  39. // capabilities tailored for the system,
  40. AudioParameters GetStreamParametersForSystem(
  41. int user_buffer_size);
  42. protected:
  43. AudioParameters GetPreferredOutputStreamParameters(
  44. const std::string& output_device_id,
  45. const AudioParameters& input_params) override;
  46. protected:
  47. std::unique_ptr<CrasUtil> cras_util_;
  48. private:
  49. uint64_t GetPrimaryActiveInputNode();
  50. uint64_t GetPrimaryActiveOutputNode();
  51. void GetPrimaryActiveInputNodeOnMainThread(uint64_t* active_input_node_id,
  52. base::WaitableEvent* event);
  53. void GetPrimaryActiveOutputNodeOnMainThread(uint64_t* active_output_node_id,
  54. base::WaitableEvent* event);
  55. void GetDefaultOutputBufferSizeOnMainThread(int32_t* buffer_size,
  56. base::WaitableEvent* event);
  57. // Task runner of browser main thread. CrasAudioHandler should be only
  58. // accessed on this thread.
  59. scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
  60. // For posting tasks from audio thread to |main_task_runner_|.
  61. base::WeakPtr<AudioManagerCras> weak_this_;
  62. base::WeakPtrFactory<AudioManagerCras> weak_ptr_factory_;
  63. };
  64. } // namespace media
  65. #endif // MEDIA_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_