Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: webrtc/modules/audio_processing/aecm/aecm_core_c.cc

Issue 3005003002: Make UBSan warnings fatal and fix the existing ones (Closed)
Patch Set: Fix UBSan warnings Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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
11 #include "webrtc/modules/audio_processing/aecm/aecm_core.h" 11 #include "webrtc/modules/audio_processing/aecm/aecm_core.h"
12 12
13 #include <stddef.h> 13 #include <stddef.h>
14 #include <stdlib.h> 14 #include <stdlib.h>
15 15
16 extern "C" { 16 extern "C" {
17 #include "webrtc/common_audio/ring_buffer.h" 17 #include "webrtc/common_audio/ring_buffer.h"
18 #include "webrtc/common_audio/signal_processing/include/real_fft.h" 18 #include "webrtc/common_audio/signal_processing/include/real_fft.h"
19 } 19 }
20 #include "webrtc/modules/audio_processing/aecm/echo_control_mobile.h" 20 #include "webrtc/modules/audio_processing/aecm/echo_control_mobile.h"
21 #include "webrtc/modules/audio_processing/utility/delay_estimator_wrapper.h" 21 #include "webrtc/modules/audio_processing/utility/delay_estimator_wrapper.h"
22 extern "C" { 22 extern "C" {
23 #include "webrtc/system_wrappers/include/cpu_features_wrapper.h" 23 #include "webrtc/system_wrappers/include/cpu_features_wrapper.h"
24 } 24 }
25 25
26 #include "webrtc/rtc_base/checks.h" 26 #include "webrtc/rtc_base/checks.h"
27 #include "webrtc/rtc_base/safe_conversions.h"
27 #include "webrtc/typedefs.h" 28 #include "webrtc/typedefs.h"
28 29
29 // Square root of Hanning window in Q14. 30 // Square root of Hanning window in Q14.
30 static const ALIGN8_BEG int16_t WebRtcAecm_kSqrtHanning[] ALIGN8_END = { 31 static const ALIGN8_BEG int16_t WebRtcAecm_kSqrtHanning[] ALIGN8_END = {
31 0, 399, 798, 1196, 1594, 1990, 2386, 2780, 3172, 32 0, 399, 798, 1196, 1594, 1990, 2386, 2780, 3172,
32 3562, 3951, 4337, 4720, 5101, 5478, 5853, 6224, 33 3562, 3951, 4337, 4720, 5101, 5478, 5853, 6224,
33 6591, 6954, 7313, 7668, 8019, 8364, 8705, 9040, 34 6591, 6954, 7313, 7668, 8019, 8364, 8705, 9040,
34 9370, 9695, 10013, 10326, 10633, 10933, 11227, 11514, 35 9370, 9695, 10013, 10326, 10633, 10933, 11227, 11514,
35 11795, 12068, 12335, 12594, 12845, 13089, 13325, 13553, 36 11795, 12068, 12335, 12594, 12845, 13089, 13325, 13553,
36 13773, 13985, 14189, 14384, 14571, 14749, 14918, 15079, 37 13773, 13985, 14189, 14384, 14571, 14749, 14918, 15079,
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 echoEst32); 446 echoEst32);
446 supGain = WebRtcAecm_CalcSuppressionGain(aecm); 447 supGain = WebRtcAecm_CalcSuppressionGain(aecm);
447 448
448 449
449 // Calculate Wiener filter hnl[] 450 // Calculate Wiener filter hnl[]
450 for (i = 0; i < PART_LEN1; i++) 451 for (i = 0; i < PART_LEN1; i++)
451 { 452 {
452 // Far end signal through channel estimate in Q8 453 // Far end signal through channel estimate in Q8
453 // How much can we shift right to preserve resolution 454 // How much can we shift right to preserve resolution
454 tmp32no1 = echoEst32[i] - aecm->echoFilt[i]; 455 tmp32no1 = echoEst32[i] - aecm->echoFilt[i];
455 aecm->echoFilt[i] += (tmp32no1 * 50) >> 8; 456 aecm->echoFilt[i] += rtc::dchecked_cast<int32_t>(
457 (static_cast<int64_t>(tmp32no1) * 50) >> 8);
kwiberg-webrtc 2017/09/03 02:39:47 If you write int64_t{x} instead of static_cast<int
oprypin_webrtc 2017/09/04 08:36:07 OK thanks!
456 458
457 zeros32 = WebRtcSpl_NormW32(aecm->echoFilt[i]) + 1; 459 zeros32 = WebRtcSpl_NormW32(aecm->echoFilt[i]) + 1;
458 zeros16 = WebRtcSpl_NormW16(supGain) + 1; 460 zeros16 = WebRtcSpl_NormW16(supGain) + 1;
459 if (zeros32 + zeros16 > 16) 461 if (zeros32 + zeros16 > 16)
460 { 462 {
461 // Multiplication is safe 463 // Multiplication is safe
462 // Result in 464 // Result in
463 // Q(RESOLUTION_CHANNEL+RESOLUTION_SUPGAIN+ 465 // Q(RESOLUTION_CHANNEL+RESOLUTION_SUPGAIN+
464 // aecm->xfaQDomainBuf[diff]) 466 // aecm->xfaQDomainBuf[diff])
465 echoEst32Gained = WEBRTC_SPL_UMUL_32_16((uint32_t)aecm->echoFilt[i], 467 echoEst32Gained = WEBRTC_SPL_UMUL_32_16((uint32_t)aecm->echoFilt[i],
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 13); 762 13);
761 } 763 }
762 uImag[PART_LEN] = 0; 764 uImag[PART_LEN] = 0;
763 765
764 for (i = 0; i < PART_LEN1; i++) 766 for (i = 0; i < PART_LEN1; i++)
765 { 767 {
766 out[i].real = WebRtcSpl_AddSatW16(out[i].real, uReal[i]); 768 out[i].real = WebRtcSpl_AddSatW16(out[i].real, uReal[i]);
767 out[i].imag = WebRtcSpl_AddSatW16(out[i].imag, uImag[i]); 769 out[i].imag = WebRtcSpl_AddSatW16(out[i].imag, uImag[i]);
768 } 770 }
769 } 771 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698