/* * Copyright (c) 2020 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 "modules/audio_processing/include/audio_frame_proxies.h" #include "api/audio/audio_frame.h" #include "modules/audio_processing/include/audio_processing.h" namespace webrtc { int ProcessAudioFrame(AudioProcessing* ap, AudioFrame* frame) { if (!frame || !ap) { return AudioProcessing::Error::kNullPointerError; } StreamConfig input_config(frame->sample_rate_hz_, frame->num_channels_); StreamConfig output_config(frame->sample_rate_hz_, frame->num_channels_); RTC_DCHECK_EQ(frame->samples_per_channel(), input_config.num_frames()); int result = ap->ProcessStream(frame->data(), input_config, output_config, frame->mutable_data()); AudioProcessingStats stats = ap->GetStatistics(); if (stats.voice_detected) { frame->vad_activity_ = *stats.voice_detected ? AudioFrame::VADActivity::kVadActive : AudioFrame::VADActivity::kVadPassive; } return result; } int ProcessReverseAudioFrame(AudioProcessing* ap, AudioFrame* frame) { if (!frame || !ap) { return AudioProcessing::Error::kNullPointerError; } // Must be a native rate. if (frame->sample_rate_hz_ != AudioProcessing::NativeRate::kSampleRate8kHz && frame->sample_rate_hz_ != AudioProcessing::NativeRate::kSampleRate16kHz && frame->sample_rate_hz_ != AudioProcessing::NativeRate::kSampleRate32kHz && frame->sample_rate_hz_ != AudioProcessing::NativeRate::kSampleRate48kHz) { return AudioProcessing::Error::kBadSampleRateError; } if (frame->num_channels_ <= 0) { return AudioProcessing::Error::kBadNumberChannelsError; } StreamConfig input_config(frame->sample_rate_hz_, frame->num_channels_); StreamConfig output_config(frame->sample_rate_hz_, frame->num_channels_); int result = ap->ProcessReverseStream(frame->data(), input_config, output_config, frame->mutable_data()); return result; } } // namespace webrtc