| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 int16_t reported_delay_ms, | 111 int16_t reported_delay_ms, |
| 112 int32_t skew); | 112 int32_t skew); |
| 113 static void ProcessExtended(Aec* self, | 113 static void ProcessExtended(Aec* self, |
| 114 const float* const* near, | 114 const float* const* near, |
| 115 int num_bands, | 115 int num_bands, |
| 116 float* const* out, | 116 float* const* out, |
| 117 int16_t num_samples, | 117 int16_t num_samples, |
| 118 int16_t reported_delay_ms, | 118 int16_t reported_delay_ms, |
| 119 int32_t skew); | 119 int32_t skew); |
| 120 | 120 |
| 121 int32_t WebRtcAec_Create(void** aecInst) { | 121 void* WebRtcAec_Create() { |
| 122 Aec* aecpc; | 122 Aec* aecpc = malloc(sizeof(Aec)); |
| 123 if (aecInst == NULL) { | 123 |
| 124 return -1; | 124 if (!aecpc) { |
| 125 return NULL; |
| 125 } | 126 } |
| 126 | 127 |
| 127 aecpc = malloc(sizeof(Aec)); | 128 aecpc->aec = WebRtcAec_CreateAec(); |
| 128 *aecInst = aecpc; | 129 if (!aecpc->aec) { |
| 129 if (aecpc == NULL) { | 130 WebRtcAec_Free(aecpc); |
| 130 return -1; | 131 return NULL; |
| 131 } | 132 } |
| 132 | 133 aecpc->resampler = WebRtcAec_CreateResampler(); |
| 133 if (WebRtcAec_CreateAec(&aecpc->aec) == -1) { | 134 if (!aecpc->resampler) { |
| 134 WebRtcAec_Free(aecpc); | 135 WebRtcAec_Free(aecpc); |
| 135 aecpc = NULL; | 136 return NULL; |
| 136 return -1; | |
| 137 } | |
| 138 | |
| 139 if (WebRtcAec_CreateResampler(&aecpc->resampler) == -1) { | |
| 140 WebRtcAec_Free(aecpc); | |
| 141 aecpc = NULL; | |
| 142 return -1; | |
| 143 } | 137 } |
| 144 // Create far-end pre-buffer. The buffer size has to be large enough for | 138 // Create far-end pre-buffer. The buffer size has to be large enough for |
| 145 // largest possible drift compensation (kResamplerBufferSize) + "almost" an | 139 // largest possible drift compensation (kResamplerBufferSize) + "almost" an |
| 146 // FFT buffer (PART_LEN2 - 1). | 140 // FFT buffer (PART_LEN2 - 1). |
| 147 aecpc->far_pre_buf = | 141 aecpc->far_pre_buf = |
| 148 WebRtc_CreateBuffer(PART_LEN2 + kResamplerBufferSize, sizeof(float)); | 142 WebRtc_CreateBuffer(PART_LEN2 + kResamplerBufferSize, sizeof(float)); |
| 149 if (!aecpc->far_pre_buf) { | 143 if (!aecpc->far_pre_buf) { |
| 150 WebRtcAec_Free(aecpc); | 144 WebRtcAec_Free(aecpc); |
| 151 aecpc = NULL; | 145 return NULL; |
| 152 return -1; | |
| 153 } | 146 } |
| 154 | 147 |
| 155 aecpc->initFlag = 0; | 148 aecpc->initFlag = 0; |
| 156 aecpc->lastError = 0; | 149 aecpc->lastError = 0; |
| 157 | 150 |
| 158 #ifdef WEBRTC_AEC_DEBUG_DUMP | 151 #ifdef WEBRTC_AEC_DEBUG_DUMP |
| 159 { | 152 { |
| 160 char filename[64]; | 153 char filename[64]; |
| 161 sprintf(filename, "aec_buf%d.dat", webrtc_aec_instance_count); | 154 sprintf(filename, "aec_buf%d.dat", webrtc_aec_instance_count); |
| 162 aecpc->bufFile = fopen(filename, "wb"); | 155 aecpc->bufFile = fopen(filename, "wb"); |
| 163 sprintf(filename, "aec_skew%d.dat", webrtc_aec_instance_count); | 156 sprintf(filename, "aec_skew%d.dat", webrtc_aec_instance_count); |
| 164 aecpc->skewFile = fopen(filename, "wb"); | 157 aecpc->skewFile = fopen(filename, "wb"); |
| 165 sprintf(filename, "aec_delay%d.dat", webrtc_aec_instance_count); | 158 sprintf(filename, "aec_delay%d.dat", webrtc_aec_instance_count); |
| 166 aecpc->delayFile = fopen(filename, "wb"); | 159 aecpc->delayFile = fopen(filename, "wb"); |
| 167 webrtc_aec_instance_count++; | 160 webrtc_aec_instance_count++; |
| 168 } | 161 } |
| 169 #endif | 162 #endif |
| 170 | 163 |
| 171 return 0; | 164 return aecpc; |
| 172 } | 165 } |
| 173 | 166 |
| 174 void WebRtcAec_Free(void* aecInst) { | 167 void WebRtcAec_Free(void* aecInst) { |
| 175 Aec* aecpc = aecInst; | 168 Aec* aecpc = aecInst; |
| 176 | 169 |
| 177 if (aecpc == NULL) { | 170 if (aecpc == NULL) { |
| 178 return; | 171 return; |
| 179 } | 172 } |
| 180 | 173 |
| 181 WebRtc_FreeBuffer(aecpc->far_pre_buf); | 174 WebRtc_FreeBuffer(aecpc->far_pre_buf); |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 } | 914 } |
| 922 } else { | 915 } else { |
| 923 self->timeForDelayChange = 0; | 916 self->timeForDelayChange = 0; |
| 924 } | 917 } |
| 925 self->lastDelayDiff = delay_difference; | 918 self->lastDelayDiff = delay_difference; |
| 926 | 919 |
| 927 if (self->timeForDelayChange > 25) { | 920 if (self->timeForDelayChange > 25) { |
| 928 self->knownDelay = WEBRTC_SPL_MAX((int)self->filtDelay - 256, 0); | 921 self->knownDelay = WEBRTC_SPL_MAX((int)self->filtDelay - 256, 0); |
| 929 } | 922 } |
| 930 } | 923 } |
| OLD | NEW |