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