Update audio_processing module
Corresponds to upstream commit 524e9b043e7e86fd72353b987c9d5f6a1ebf83e1 Update notes: * Pull in third party license file * Replace .gypi files with BUILD.gn to keep track of what changes upstream * Bunch of new filse pulled in as dependencies * Won't build yet due to changes needed on top of these
This commit is contained in:
91
webrtc/modules/audio_processing/transient/wpd_tree.h
Normal file
91
webrtc/modules/audio_processing/transient/wpd_tree.h
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_TRANSIENT_WPD_TREE_H_
|
||||
#define WEBRTC_MODULES_AUDIO_PROCESSING_TRANSIENT_WPD_TREE_H_
|
||||
|
||||
#include "webrtc/base/scoped_ptr.h"
|
||||
#include "webrtc/modules/audio_processing/transient/wpd_node.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// Tree of a Wavelet Packet Decomposition (WPD).
|
||||
//
|
||||
// The root node contains all the data provided; for each node in the tree, the
|
||||
// left child contains the approximation coefficients extracted from the node,
|
||||
// and the right child contains the detail coefficients.
|
||||
// It preserves its state, so it can be multiple-called.
|
||||
//
|
||||
// The number of nodes in the tree will be 2 ^ levels - 1.
|
||||
//
|
||||
// Implementation details: Since the tree always will be a complete binary tree,
|
||||
// it is implemented using a single linear array instead of managing the
|
||||
// relationships in each node. For convience is better to use a array that
|
||||
// starts in 1 (instead of 0). Taking that into account, the following formulas
|
||||
// apply:
|
||||
// Root node index: 1.
|
||||
// Node(Level, Index in that level): 2 ^ Level + (Index in that level).
|
||||
// Left Child: Current node index * 2.
|
||||
// Right Child: Current node index * 2 + 1.
|
||||
// Parent: Current Node Index / 2 (Integer division).
|
||||
class WPDTree {
|
||||
public:
|
||||
// Creates a WPD tree using the data length and coefficients provided.
|
||||
WPDTree(size_t data_length,
|
||||
const float* high_pass_coefficients,
|
||||
const float* low_pass_coefficients,
|
||||
size_t coefficients_length,
|
||||
int levels);
|
||||
~WPDTree();
|
||||
|
||||
// Returns the number of nodes at any given level.
|
||||
static int NumberOfNodesAtLevel(int level) {
|
||||
return 1 << level;
|
||||
}
|
||||
|
||||
// Returns a pointer to the node at the given level and index(of that level).
|
||||
// Level goes from 0 to levels().
|
||||
// Index goes from 0 to the number of NumberOfNodesAtLevel(level) - 1.
|
||||
//
|
||||
// You can use the following formulas to get any node within the tree:
|
||||
// Notation: (Level, Index of node in that level).
|
||||
// Root node: (0/0).
|
||||
// Left Child: (Current node level + 1, Current node index * 2).
|
||||
// Right Child: (Current node level + 1, Current node index * 2 + 1).
|
||||
// Parent: (Current node level - 1, Current node index / 2) (Integer division)
|
||||
//
|
||||
// If level or index are out of bounds the function will return NULL.
|
||||
WPDNode* NodeAt(int level, int index);
|
||||
|
||||
// Updates all the nodes of the tree with the new data. |data_length| must be
|
||||
// teh same that was used for the creation of the tree.
|
||||
// Returns 0 if correct, and -1 otherwise.
|
||||
int Update(const float* data, size_t data_length);
|
||||
|
||||
// Returns the total number of levels below the root. Root is cosidered level
|
||||
// 0.
|
||||
int levels() const { return levels_; }
|
||||
|
||||
// Returns the total number of nodes.
|
||||
int num_nodes() const { return num_nodes_; }
|
||||
|
||||
// Returns the total number of leaves.
|
||||
int num_leaves() const { return 1 << levels_; }
|
||||
|
||||
private:
|
||||
size_t data_length_;
|
||||
int levels_;
|
||||
int num_nodes_;
|
||||
rtc::scoped_ptr<rtc::scoped_ptr<WPDNode>[]> nodes_;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // WEBRTC_MODULES_AUDIO_PROCESSING_TRANSIENT_WPD_TREE_H_
|
Reference in New Issue
Block a user