Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Unified Diff: webrtc/tools/agc/agc_manager.cc

Issue 1299143003: Remove AgcManager. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Initialize volume Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/agc/agc_manager.h ('k') | webrtc/tools/agc/agc_manager_integrationtest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/agc/agc_manager.cc
diff --git a/webrtc/tools/agc/agc_manager.cc b/webrtc/tools/agc/agc_manager.cc
deleted file mode 100644
index 36290f713cf2c6d11cf71f3de99fd10da6262aa5..0000000000000000000000000000000000000000
--- a/webrtc/tools/agc/agc_manager.cc
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * 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.
- */
-
-#include "webrtc/tools/agc/agc_manager.h"
-
-#include <assert.h>
-
-#include "webrtc/modules/audio_processing/agc/agc.h"
-#include "webrtc/modules/audio_processing/include/audio_processing.h"
-#include "webrtc/modules/interface/module_common_types.h"
-#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
-#include "webrtc/system_wrappers/interface/logging.h"
-#include "webrtc/voice_engine/include/voe_external_media.h"
-#include "webrtc/voice_engine/include/voe_volume_control.h"
-
-namespace webrtc {
-
-class AgcManagerVolume : public VolumeCallbacks {
- public:
- // AgcManagerVolume acquires ownership of |volume|.
- explicit AgcManagerVolume(VoEVolumeControl* volume)
- : volume_(volume) {
- }
-
- ~AgcManagerVolume() {
- if (volume_) {
- volume_->Release();
- }
- }
-
- virtual void SetMicVolume(int volume) {
- if (volume_->SetMicVolume(volume) != 0) {
- LOG_FERR1(LS_WARNING, SetMicVolume, volume);
- }
- }
-
- int GetMicVolume() {
- unsigned int volume = 0;
- if (volume_->GetMicVolume(volume) != 0) {
- LOG_FERR0(LS_WARNING, GetMicVolume);
- return -1;
- }
- return volume;
- }
-
- private:
- VoEVolumeControl* volume_;
-};
-
-class MediaCallback : public VoEMediaProcess {
- public:
- MediaCallback(AgcManagerDirect* direct, AudioProcessing* audioproc,
- CriticalSectionWrapper* crit)
- : direct_(direct),
- audioproc_(audioproc),
- crit_(crit),
- frame_() {
- }
-
- protected:
- virtual void Process(const int channel, const ProcessingTypes type,
- int16_t audio[], const size_t samples_per_channel,
- const int sample_rate_hz, const bool is_stereo) {
- CriticalSectionScoped cs(crit_);
- if (direct_->capture_muted()) {
- return;
- }
-
- // Extract the first channel.
- const int kMaxSampleRateHz = 48000;
- const int kMaxSamplesPerChannel = kMaxSampleRateHz / 100;
- assert(samples_per_channel < kMaxSamplesPerChannel &&
- sample_rate_hz < kMaxSampleRateHz);
- int16_t mono[kMaxSamplesPerChannel];
- int16_t* mono_ptr = audio;
- if (is_stereo) {
- for (size_t n = 0; n < samples_per_channel; n++) {
- mono[n] = audio[n * 2];
- }
- mono_ptr = mono;
- }
-
- direct_->Process(mono_ptr, samples_per_channel, sample_rate_hz);
-
- // TODO(ajm): It's unfortunate we have to memcpy to this frame here, but
- // it's needed for use with AudioProcessing.
- frame_.num_channels_ = is_stereo ? 2 : 1;
- frame_.samples_per_channel_ = samples_per_channel;
- frame_.sample_rate_hz_ = sample_rate_hz;
- const size_t length_samples = frame_.num_channels_ * samples_per_channel;
- memcpy(frame_.data_, audio, length_samples * sizeof(int16_t));
-
- // Apply compression to the audio.
- if (audioproc_->ProcessStream(&frame_) != 0) {
- LOG_FERR0(LS_ERROR, ProcessStream);
- }
-
- // Copy the compressed audio back to voice engine's array.
- memcpy(audio, frame_.data_, length_samples * sizeof(int16_t));
- }
-
- private:
- AgcManagerDirect* direct_;
- AudioProcessing* audioproc_;
- CriticalSectionWrapper* crit_;
- AudioFrame frame_;
-};
-
-class PreprocCallback : public VoEMediaProcess {
- public:
- PreprocCallback(AgcManagerDirect* direct, CriticalSectionWrapper* crit)
- : direct_(direct),
- crit_(crit) {
- }
-
- protected:
- virtual void Process(const int channel, const ProcessingTypes type,
- int16_t audio[], const size_t samples_per_channel,
- const int sample_rate_hz, const bool is_stereo) {
- CriticalSectionScoped cs(crit_);
- if (direct_->capture_muted()) {
- return;
- }
- direct_->AnalyzePreProcess(audio, is_stereo ? 2 : 1, samples_per_channel);
- }
-
- private:
- AgcManagerDirect* direct_;
- CriticalSectionWrapper* crit_;
-};
-
-AgcManager::AgcManager(VoiceEngine* voe)
- : media_(VoEExternalMedia::GetInterface(voe)),
- volume_callbacks_(new AgcManagerVolume(VoEVolumeControl::GetInterface(
- voe))),
- crit_(CriticalSectionWrapper::CreateCriticalSection()),
- enabled_(false),
- initialized_(false) {
- Config config;
- config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
- audioproc_.reset(AudioProcessing::Create(config));
- direct_.reset(new AgcManagerDirect(audioproc_->gain_control(),
- volume_callbacks_.get(),
- kAgcStartupMinVolume));
- media_callback_.reset(new MediaCallback(direct_.get(),
- audioproc_.get(),
- crit_.get()));
- preproc_callback_.reset(new PreprocCallback(direct_.get(), crit_.get()));
-}
-
-AgcManager::AgcManager(VoEExternalMedia* media,
- VoEVolumeControl* volume,
- Agc* agc,
- AudioProcessing* audioproc)
- : media_(media),
- volume_callbacks_(new AgcManagerVolume(volume)),
- crit_(CriticalSectionWrapper::CreateCriticalSection()),
- audioproc_(audioproc),
- direct_(new AgcManagerDirect(agc,
- audioproc_->gain_control(),
- volume_callbacks_.get(),
- kAgcStartupMinVolume)),
- media_callback_(
- new MediaCallback(direct_.get(), audioproc_.get(), crit_.get())),
- preproc_callback_(new PreprocCallback(direct_.get(), crit_.get())),
- enabled_(false),
- initialized_(false) {
-}
-
-AgcManager::AgcManager()
- : media_(NULL),
- enabled_(false),
- initialized_(false) {
-}
-
-AgcManager::~AgcManager() {
- if (media_) {
- if (enabled_) {
- DeregisterCallbacks();
- }
- media_->Release();
- }
-}
-
-int AgcManager::Enable(bool enable) {
- if (enable == enabled_) {
- return 0;
- }
- if (!initialized_) {
- CriticalSectionScoped cs(crit_.get());
- if (audioproc_->gain_control()->Enable(true) != 0) {
- LOG_FERR1(LS_ERROR, gain_control()->Enable, true);
- return -1;
- }
- if (direct_->Initialize() != 0) {
- assert(false);
- return -1;
- }
- initialized_ = true;
- }
-
- if (enable) {
- if (media_->RegisterExternalMediaProcessing(0, kRecordingAllChannelsMixed,
- *media_callback_) != 0) {
- LOG(LS_ERROR) << "Failed to register postproc callback";
- return -1;
- }
- if (media_->RegisterExternalMediaProcessing(0, kRecordingPreprocessing,
- *preproc_callback_) != 0) {
- LOG(LS_ERROR) << "Failed to register preproc callback";
- return -1;
- }
- } else {
- if (DeregisterCallbacks() != 0)
- return -1;
- }
- enabled_ = enable;
- return 0;
-}
-
-void AgcManager::CaptureDeviceChanged() {
- CriticalSectionScoped cs(crit_.get());
- direct_->Initialize();
-}
-
-void AgcManager::SetCaptureMuted(bool muted) {
- CriticalSectionScoped cs(crit_.get());
- direct_->SetCaptureMuted(muted);
-}
-
-int AgcManager::DeregisterCallbacks() {
- // DeRegister shares a lock with the Process() callback. This call will block
- // until the callback is finished and it's safe to continue teardown.
- int err = 0;
- if (media_->DeRegisterExternalMediaProcessing(0,
- kRecordingAllChannelsMixed) != 0) {
- LOG(LS_ERROR) << "Failed to deregister postproc callback";
- err = -1;
- }
- if (media_->DeRegisterExternalMediaProcessing(0,
- kRecordingPreprocessing) != 0) {
- LOG(LS_ERROR) << "Failed to deregister preproc callback";
- err = -1;
- }
- return err;
-}
-
-} // namespace webrtc
« no previous file with comments | « webrtc/tools/agc/agc_manager.h ('k') | webrtc/tools/agc/agc_manager_integrationtest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698