audio_manager_android.h revision 868fa2fe829687343ffae624259930155e16dbd8
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
5#ifndef MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_
6#define MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_
7
8#include "base/android/jni_android.h"
9#include "media/audio/audio_manager_base.h"
10
11namespace media {
12
13// Android implemention of AudioManager.
14class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase {
15 public:
16  AudioManagerAndroid();
17
18  // Implementation of AudioManager.
19  virtual bool HasAudioOutputDevices() OVERRIDE;
20  virtual bool HasAudioInputDevices() OVERRIDE;
21  virtual void GetAudioInputDeviceNames(media::AudioDeviceNames* device_names)
22      OVERRIDE;
23  virtual AudioParameters GetInputStreamParameters(
24      const std::string& device_id) OVERRIDE;
25
26  virtual AudioOutputStream* MakeAudioOutputStream(
27      const AudioParameters& params,
28      const std::string& input_device_id) OVERRIDE;
29  virtual AudioInputStream* MakeAudioInputStream(
30      const AudioParameters& params, const std::string& device_id) OVERRIDE;
31  virtual void ReleaseOutputStream(AudioOutputStream* stream) OVERRIDE;
32  virtual void ReleaseInputStream(AudioInputStream* stream) OVERRIDE;
33
34  // Implementation of AudioManagerBase.
35  virtual AudioOutputStream* MakeLinearOutputStream(
36      const AudioParameters& params) OVERRIDE;
37  virtual AudioOutputStream* MakeLowLatencyOutputStream(
38      const AudioParameters& params,
39      const std::string& input_device_id) OVERRIDE;
40  virtual AudioInputStream* MakeLinearInputStream(
41      const AudioParameters& params, const std::string& device_id) OVERRIDE;
42  virtual AudioInputStream* MakeLowLatencyInputStream(
43      const AudioParameters& params, const std::string& device_id) OVERRIDE;
44
45  static bool RegisterAudioManager(JNIEnv* env);
46
47 protected:
48  virtual ~AudioManagerAndroid();
49
50  virtual AudioParameters GetPreferredOutputStreamParameters(
51      const AudioParameters& input_params) OVERRIDE;
52
53 private:
54  void SetAudioMode(int mode);
55  void RegisterHeadsetReceiver();
56  void UnregisterHeadsetReceiver();
57  int GetNativeOutputSampleRate();
58  bool IsAudioLowLatencySupported();
59  int GetAudioLowLatencyOutputFrameSize();
60  int GetOptimalOutputFrameSize(int sample_rate, int channels);
61
62  // Java AudioManager instance.
63  base::android::ScopedJavaGlobalRef<jobject> j_audio_manager_;
64
65  DISALLOW_COPY_AND_ASSIGN(AudioManagerAndroid);
66};
67
68}  // namespace media
69
70#endif  // MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_
71