1c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh/*
2c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * Copyrightm (C) 2010 The Android Open Source Project
3c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh *
4c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License");
5c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * you may not use this file except in compliance with the License.
6c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * You may obtain a copy of the License at
7c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh *
8c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh *      http://www.apache.org/licenses/LICENSE-2.0
9c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh *
10c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * Unless required by applicable law or agreed to in writing, software
11c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS,
12c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * See the License for the specific language governing permissions and
14c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh * limitations under the License.
15c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh */
16c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
17c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh#ifndef __ECHO_SUPPRESSOR_H__
18c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh#define __ECHO_SUPPRESSOR_H__
19c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
20c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh#include <stdint.h>
21c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
22c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yehclass EchoSuppressor
23c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh{
24c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yehpublic:
25c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    // The sampleCount must be power of 2.
262e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    EchoSuppressor(int sampleCount, int tailLength);
27c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    ~EchoSuppressor();
28c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    void run(int16_t *playbacked, int16_t *recorded);
29c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
30c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yehprivate:
312e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    int mShift;
32c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mScale;
33c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mSampleCount;
34c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mWindowSize;
35c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mTailLength;
36c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mRecordLength;
37c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh    int mRecordOffset;
38c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
392e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint16_t *mXs;
402e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mXSums;
412e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mX2Sums;
422e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint16_t *mXRecords;
43c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
442e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t mYSum;
452e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t mY2Sum;
462e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mYRecords;
472e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mY2Records;
48c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
492e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mXYSums;
502e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    uint32_t *mXYRecords;
512e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh
522e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    int32_t mLastX;
532e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    int32_t mLastY;
542e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh
552e85359f74a5280ee733d35ff5f63b3943140632Chia-chi Yeh    float mWeight;
56c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh};
57c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh
58c7092775516e15983053a58b3b43ff3eb58ac46fChia-chi Yeh#endif
59