150b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org/*
250b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
350b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *
450b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
550b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
650b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
750b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
850b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
950b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org */
1050b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
1150b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org#include "webrtc/common_audio/include/audio_util.h"
1250b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
1350b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org#include "webrtc/typedefs.h"
1450b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
1550b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.orgnamespace webrtc {
1650b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
174fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.orgvoid FloatToS16(const float* src, size_t size, int16_t* dest) {
18efb81d8d1f6510ff10ca34a2ee243a7ab5fbd2cdkwiberg@webrtc.org  for (size_t i = 0; i < size; ++i)
194fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org    dest[i] = FloatToS16(src[i]);
2050b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org}
2150b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
224fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.orgvoid S16ToFloat(const int16_t* src, size_t size, float* dest) {
23efb81d8d1f6510ff10ca34a2ee243a7ab5fbd2cdkwiberg@webrtc.org  for (size_t i = 0; i < size; ++i)
244fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org    dest[i] = S16ToFloat(src[i]);
2517e40641b30559602e26382e500bd9708bad37e3andrew@webrtc.org}
2617e40641b30559602e26382e500bd9708bad37e3andrew@webrtc.org
274fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.orgvoid FloatS16ToS16(const float* src, size_t size, int16_t* dest) {
28efb81d8d1f6510ff10ca34a2ee243a7ab5fbd2cdkwiberg@webrtc.org  for (size_t i = 0; i < size; ++i)
294fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org    dest[i] = FloatS16ToS16(src[i]);
304fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org}
314fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org
324fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.orgvoid FloatToFloatS16(const float* src, size_t size, float* dest) {
334fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org  for (size_t i = 0; i < size; ++i)
344fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org    dest[i] = FloatToFloatS16(src[i]);
354fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org}
364fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org
374fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.orgvoid FloatS16ToFloat(const float* src, size_t size, float* dest) {
384fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org  for (size_t i = 0; i < size; ++i)
394fc4addc815379c6cc1d04f4853a528390fe09baandrew@webrtc.org    dest[i] = FloatS16ToFloat(src[i]);
4050b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org}
4150b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org
4286c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczyktemplate <>
4386c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczykvoid DownmixInterleavedToMono<int16_t>(const int16_t* interleaved,
44dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                                       size_t num_frames,
4586c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczyk                                       int num_channels,
4686c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczyk                                       int16_t* deinterleaved) {
477a1c24fce5d8cfaa56d548fe72b496a8c6e4e99eandrew  DownmixInterleavedToMonoImpl<int16_t, int32_t>(interleaved, num_frames,
487a1c24fce5d8cfaa56d548fe72b496a8c6e4e99eandrew                                                 num_channels, deinterleaved);
4986c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczyk}
5086c6d33aec684d08189d498912e47cbc17c4d2dbMichael Graczyk
5150b2efef6ecb51a9d5818345c58533c5d236ec29andrew@webrtc.org}  // namespace webrtc
52