Revert "APM: Remove the usage of AudioFrame in the AudioProcessing interface"

This reverts commit 12e2d4ddb235da6ec7a5c1c3a83ac33d394920b0.

Reason for revert: Speculative revert: breaks downstream project

Original change's description:
> APM: Remove the usage of AudioFrame in the AudioProcessing interface
> 
> This CL removes the AudioFrame-based APIs from the AudioProcessing
> interface.
> 
> Bug: webrtc:5298
> Change-Id: Iab470b26b10e06dcf29c543851ae0085bc5b66f0
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/172939
> Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> Commit-Queue: Per Åhgren <peah@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31016}

TBR=saza@webrtc.org,peah@webrtc.org

Change-Id: I82729b54c74cf1362332a28a96f598d6747b53ff
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:5298
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173091
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31022}
This commit is contained in:
Artem Titov 2020-04-07 19:37:13 +00:00 committed by Commit Bot
parent 80a1d4bdbb
commit 7e60483915
5 changed files with 38 additions and 4 deletions

View File

@ -44,6 +44,7 @@
namespace webrtc {
class ApmDataDumper;
class AudioFrame;
class AudioConverter;
class AudioProcessingImpl : public AudioProcessing {
@ -80,6 +81,9 @@ class AudioProcessingImpl : public AudioProcessing {
// Capture-side exclusive methods possibly running APM in a
// multi-threaded manner. Acquire the capture lock.
int ProcessStream(AudioFrame* frame) override {
return ProcessAudioFrame(this, frame);
}
int ProcessStream(const int16_t* const src,
const StreamConfig& input_config,
const StreamConfig& output_config,
@ -98,6 +102,9 @@ class AudioProcessingImpl : public AudioProcessing {
// Render-side exclusive methods possibly running APM in a
// multi-threaded manner. Acquire the render lock.
int ProcessReverseStream(AudioFrame* frame) override {
return ProcessReverseAudioFrame(this, frame);
}
int ProcessReverseStream(const int16_t* const src,
const StreamConfig& input_config,
const StreamConfig& output_config,

View File

@ -39,6 +39,7 @@ namespace webrtc {
class AecDump;
class AudioBuffer;
class AudioFrame;
class StreamConfig;
class ProcessingConfig;
@ -522,6 +523,18 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
// Enqueue a runtime setting.
virtual void SetRuntimeSetting(RuntimeSetting setting) = 0;
// Processes a 10 ms |frame| of the primary audio stream. On the client-side,
// this is the near-end (or captured) audio.
//
// If needed for enabled functionality, any function with the set_stream_ tag
// must be called prior to processing the current frame. Any getter function
// with the stream_ tag which is needed should be called after processing.
//
// The |sample_rate_hz_|, |num_channels_|, and |samples_per_channel_|
// members of |frame| must be valid. If changed from the previous call to this
// method, it will trigger an initialization.
virtual int ProcessStream(AudioFrame* frame) = 0;
// Accepts and produces a 10 ms frame interleaved 16 bit integer audio as
// specified in |input_config| and |output_config|. |src| and |dest| may use
// the same memory, if desired.
@ -542,6 +555,20 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
const StreamConfig& output_config,
float* const* dest) = 0;
// Processes a 10 ms |frame| of the reverse direction audio stream. The frame
// may be modified. On the client-side, this is the far-end (or to be
// rendered) audio.
//
// It is necessary to provide this if echo processing is enabled, as the
// reverse stream forms the echo reference signal. It is recommended, but not
// necessary, to provide if gain control is enabled. On the server-side this
// typically will not be used. If you're not sure what to pass in here,
// chances are you don't need to use it.
//
// The |sample_rate_hz_|, |num_channels_|, and |samples_per_channel_|
// members of |frame| must be valid.
virtual int ProcessReverseStream(AudioFrame* frame) = 0;
// Accepts and produces a 10 ms frame of interleaved 16 bit integer audio for
// the reverse direction audio stream as specified in |input_config| and
// |output_config|. |src| and |dest| may use the same memory, if desired.

View File

@ -81,6 +81,7 @@ class MockAudioProcessing : public ::testing::NiceMock<AudioProcessing> {
MOCK_CONST_METHOD0(num_reverse_channels, size_t());
MOCK_METHOD1(set_output_will_be_muted, void(bool muted));
MOCK_METHOD1(SetRuntimeSetting, void(RuntimeSetting setting));
MOCK_METHOD1(ProcessStream, int(AudioFrame* frame));
MOCK_METHOD4(ProcessStream,
int(const int16_t* const src,
const StreamConfig& input_config,
@ -99,6 +100,7 @@ class MockAudioProcessing : public ::testing::NiceMock<AudioProcessing> {
const StreamConfig& input_config,
const StreamConfig& output_config,
float* const* dest));
MOCK_METHOD1(ProcessReverseStream, int(AudioFrame* frame));
MOCK_METHOD4(ProcessReverseStream,
int(const int16_t* const src,
const StreamConfig& input_config,

View File

@ -436,7 +436,6 @@ rtc_library("audio_processing_fuzzer_helper") {
"../../api/audio:audio_frame_api",
"../../modules/audio_processing",
"../../modules/audio_processing:api",
"../../modules/audio_processing:audio_frame_proxies",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"//third_party/abseil-cpp/absl/types:optional",

View File

@ -16,7 +16,6 @@
#include <limits>
#include "api/audio/audio_frame.h"
#include "modules/audio_processing/include/audio_frame_proxies.h"
#include "modules/audio_processing/include/audio_processing.h"
#include "rtc_base/checks.h"
@ -131,9 +130,9 @@ void FuzzAudioProcessing(test::FuzzDataHelper* fuzz_data,
GenerateFixedFrame(fuzz_data, input_rate, num_channels, &fixed_frame);
if (is_capture) {
apm_return_code = ProcessAudioFrame(apm.get(), &fixed_frame);
apm_return_code = apm->ProcessStream(&fixed_frame);
} else {
apm_return_code = ProcessReverseAudioFrame(apm.get(), &fixed_frame);
apm_return_code = apm->ProcessReverseStream(&fixed_frame);
}
}