Files
platform-external-webrtc/webrtc/modules/audio_processing/transient/wpd_node.cc
kjellander c8fa692ec4 Update includes for webrtc/{base => rtc_base} rename (1/3)
I used a command like this to update the paths:
perl -pi -e "s/webrtc\/base/webrtc\/rtc_base/g" `find webrtc/rtc_base -name "*.cc" -o -name "*.h"`

The only manual edit is to add an include of webrtc/rtc_base/checks.h in
webrtc/modules/audio_device/android/opensles_common.h, which likely
was needed due to changed include paths due to 'git cl format'.

BUG=webrtc:7634
NOTRY=True
NOPRESUBMIT=True

Review-Url: https://codereview.webrtc.org/2969653002
Cr-Commit-Position: refs/heads/master@{#18871}
2017-06-30 21:02:00 +00:00

73 lines
2.1 KiB
C++

/*
* Copyright (c) 2013 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/modules/audio_processing/transient/wpd_node.h"
#include <math.h>
#include <string.h>
#include "webrtc/common_audio/fir_filter.h"
#include "webrtc/modules/audio_processing/transient/dyadic_decimator.h"
#include "webrtc/rtc_base/checks.h"
namespace webrtc {
WPDNode::WPDNode(size_t length,
const float* coefficients,
size_t coefficients_length)
: // The data buffer has parent data length to be able to contain and filter
// it.
data_(new float[2 * length + 1]),
length_(length),
filter_(FIRFilter::Create(coefficients,
coefficients_length,
2 * length + 1)) {
RTC_DCHECK_GT(length, 0);
RTC_DCHECK(coefficients);
RTC_DCHECK_GT(coefficients_length, 0);
memset(data_.get(), 0.f, (2 * length + 1) * sizeof(data_[0]));
}
WPDNode::~WPDNode() {}
int WPDNode::Update(const float* parent_data, size_t parent_data_length) {
if (!parent_data || (parent_data_length / 2) != length_) {
return -1;
}
// Filter data.
filter_->Filter(parent_data, parent_data_length, data_.get());
// Decimate data.
const bool kOddSequence = true;
size_t output_samples = DyadicDecimate(
data_.get(), parent_data_length, kOddSequence, data_.get(), length_);
if (output_samples != length_) {
return -1;
}
// Get abs to all values.
for (size_t i = 0; i < length_; ++i) {
data_[i] = fabs(data_[i]);
}
return 0;
}
int WPDNode::set_data(const float* new_data, size_t length) {
if (!new_data || length != length_) {
return -1;
}
memcpy(data_.get(), new_data, length * sizeof(data_[0]));
return 0;
}
} // namespace webrtc