1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11f24ac5923cbe5e806fac59a0d15e32567553ce8epbos@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint32_t WebRtcSpl_DotProductWithScale(const int16_t* vector1, 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int16_t* vector2, 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int length, 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int scaling) { 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t sum = 0; 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int i = 0; 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Unroll the loop to improve performance. */ 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 0; i < length - 3; i += 4) { 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sum += (vector1[i + 0] * vector2[i + 0]) >> scaling; 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sum += (vector1[i + 1] * vector2[i + 1]) >> scaling; 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sum += (vector1[i + 2] * vector2[i + 2]) >> scaling; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sum += (vector1[i + 3] * vector2[i + 3]) >> scaling; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (; i < length; i++) { 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sum += (vector1[i] * vector2[i]) >> scaling; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return sum; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 33