1// Copyright 2013 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 CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_OPTIONS_H_
6#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_OPTIONS_H_
7
8#include <string>
9
10#include "base/files/file.h"
11#include "content/common/content_export.h"
12#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
13#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
14
15namespace webrtc {
16
17class AudioFrame;
18class AudioProcessing;
19class MediaConstraintsInterface;
20class TypingDetection;
21
22}
23
24namespace content {
25
26class RTCMediaConstraints;
27
28using webrtc::AudioProcessing;
29using webrtc::MediaConstraintsInterface;
30
31// A helper class to parse audio constraints from a blink::WebMediaConstraints
32// object.
33class CONTENT_EXPORT MediaAudioConstraints {
34 public:
35  // Constraint keys used by audio processing.
36  static const char kEchoCancellation[];
37  static const char kGoogEchoCancellation[];
38  static const char kGoogExperimentalEchoCancellation[];
39  static const char kGoogAutoGainControl[];
40  static const char kGoogExperimentalAutoGainControl[];
41  static const char kGoogNoiseSuppression[];
42  static const char kGoogExperimentalNoiseSuppression[];
43  static const char kGoogHighpassFilter[];
44  static const char kGoogTypingNoiseDetection[];
45  static const char kGoogAudioMirroring[];
46
47  // Merge |constraints| with |kDefaultAudioConstraints|. For any key which
48  // exists in both, the value from |constraints| is maintained, including its
49  // mandatory/optional status. New values from |kDefaultAudioConstraints| will
50  // be added with optional status.
51  static void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints);
52
53  // |effects| is the bitmasks telling whether certain platform
54  // hardware audio effects are enabled, like hardware echo cancellation. If
55  // some hardware effect is enabled, the corresponding software audio
56  // processing will be disabled.
57  MediaAudioConstraints(const blink::WebMediaConstraints& constraints,
58                        int effects);
59  virtual ~MediaAudioConstraints();
60
61  // Checks if any audio constraints are set that requires audio processing to
62  // be applied.
63  bool NeedsAudioProcessing();
64
65  // Gets the property of the constraint named by |key| in |constraints_|.
66  // Returns the constraint's value if the key is found; Otherwise returns the
67  // default value of the constraint.
68  // Note, for constraint of |kEchoCancellation| or |kGoogEchoCancellation|,
69  // clients should use GetEchoCancellationProperty().
70  bool GetProperty(const std::string& key);
71
72  // Gets the property of echo cancellation defined in |constraints_|. The
73  // returned value depends on a combination of |effects_|, |kEchoCancellation|
74  // and |kGoogEchoCancellation| in |constraints_|.
75  bool GetEchoCancellationProperty();
76
77  // Returns true if all the mandatory constraints in |constraints_| are valid;
78  // Otherwise return false.
79  bool IsValid();
80
81 private:
82  // Gets the default value of constraint named by |key| in |constraints|.
83  bool GetDefaultValueForConstraint(
84      const blink::WebMediaConstraints& constraints, const std::string& key);
85
86  const blink::WebMediaConstraints constraints_;
87  const int effects_;
88  bool default_audio_processing_constraint_value_;
89};
90
91// Enables the echo cancellation in |audio_processing|.
92void EnableEchoCancellation(AudioProcessing* audio_processing);
93
94// Enables the noise suppression in |audio_processing|.
95void EnableNoiseSuppression(AudioProcessing* audio_processing);
96
97// Enables the high pass filter in |audio_processing|.
98void EnableHighPassFilter(AudioProcessing* audio_processing);
99
100// Enables the typing detection in |audio_processing|.
101void EnableTypingDetection(AudioProcessing* audio_processing,
102                           webrtc::TypingDetection* typing_detector);
103
104// Starts the echo cancellation dump in |audio_processing|.
105void StartEchoCancellationDump(AudioProcessing* audio_processing,
106                               base::File aec_dump_file);
107
108// Stops the echo cancellation dump in |audio_processing|.
109// This method has no impact if echo cancellation dump has not been started on
110// |audio_processing|.
111void StopEchoCancellationDump(AudioProcessing* audio_processing);
112
113void EnableAutomaticGainControl(AudioProcessing* audio_processing);
114
115void GetAecStats(AudioProcessing* audio_processing,
116                 webrtc::AudioProcessorInterface::AudioProcessorStats* stats);
117
118}  // namespace content
119
120#endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_OPTIONS_H_
121