
And the follow-up fix in r8198 that was not sufficient. Reason: breaks Chromium bots runhooks (GYP). I will have to try some more to make sure I don't include test code, since include_tests==0 in Chromium. TBR=andrew@webrtc.org, tina.legrand@webrtc.org Review URL: https://webrtc-codereview.appspot.com/37039004 Cr-Commit-Position: refs/heads/master@{#8200} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8200 4adac7df-926f-26a2-2b94-8c16560cd09d
82 lines
2.9 KiB
C++
82 lines
2.9 KiB
C++
/*
|
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AGC_TEST_AGC_MANAGER_H_
|
|
#define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_TEST_AGC_MANAGER_H_
|
|
|
|
#include "webrtc/modules/audio_processing/agc/agc_manager_direct.h"
|
|
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class Agc;
|
|
class AudioProcessing;
|
|
class CriticalSectionWrapper;
|
|
class MediaCallback;
|
|
class PreprocCallback;
|
|
class VoEExternalMedia;
|
|
class VoEVolumeControl;
|
|
class VoiceEngine;
|
|
class VolumeCallbacks;
|
|
|
|
// Handles the interaction between VoiceEngine and the internal AGC. It hooks
|
|
// into the capture stream through VoiceEngine's external media interface and
|
|
// sends the audio to the AGC for analysis. It forwards requests for a capture
|
|
// volume change from the AGC to the VoiceEngine volume interface.
|
|
class AgcManager {
|
|
public:
|
|
explicit AgcManager(VoiceEngine* voe);
|
|
// Dependency injection for testing. Don't delete |agc| or |audioproc| as the
|
|
// memory is owned by the manager. If |media| or |volume| are non-fake
|
|
// reference counted classes, don't release them as this is handled by the
|
|
// manager.
|
|
AgcManager(VoEExternalMedia* media, VoEVolumeControl* volume, Agc* agc,
|
|
AudioProcessing* audioproc);
|
|
virtual ~AgcManager();
|
|
|
|
// When enabled, registers external media processing callbacks with
|
|
// VoiceEngine to hook into the capture stream. Disabling deregisters the
|
|
// callbacks.
|
|
virtual int Enable(bool enable);
|
|
virtual bool enabled() const { return enabled_; }
|
|
|
|
// Call when the capture device has changed. This will trigger a retrieval of
|
|
// the initial capture volume on the next audio frame.
|
|
virtual void CaptureDeviceChanged();
|
|
|
|
// Call when the capture stream has been muted/unmuted. This causes the
|
|
// manager to disregard all incoming audio; chances are good it's background
|
|
// noise to which we'd like to avoid adapting.
|
|
virtual void SetCaptureMuted(bool muted);
|
|
virtual bool capture_muted() const { return direct_->capture_muted(); }
|
|
|
|
protected:
|
|
// Provide a default constructor for testing.
|
|
AgcManager();
|
|
|
|
private:
|
|
int DeregisterCallbacks();
|
|
int CheckVolumeAndReset();
|
|
|
|
VoEExternalMedia* media_;
|
|
scoped_ptr<VolumeCallbacks> volume_callbacks_;
|
|
scoped_ptr<CriticalSectionWrapper> crit_;
|
|
scoped_ptr<AudioProcessing> audioproc_;
|
|
scoped_ptr<AgcManagerDirect> direct_;
|
|
scoped_ptr<MediaCallback> media_callback_;
|
|
scoped_ptr<PreprocCallback> preproc_callback_;
|
|
bool enabled_;
|
|
bool initialized_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_TEST_AGC_MANAGER_H_
|