18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * QEMU Mixing engine 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2004-2005 Vassili Karpov (malc) 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 1998 Fabrice Bellard 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a copy 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * of this software and associated documentation files (the "Software"), to deal 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * in the Software without restriction, including without limitation the rights 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * copies of the Software, and to permit persons to whom the Software is 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * furnished to do so, subject to the following conditions: 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * The above copyright notice and this permission notice shall be included in 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * all copies or substantial portions of the Software. 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE. 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "qemu-common.h" 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "audio.h" 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define AUDIO_CAP "mixeng" 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "audio_int.h" 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 8 bit */ 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION natural 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) (v) 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Signed 8 bit */ 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T int8_t 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN SCHAR_MIN 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX SCHAR_MAX 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SIGNED 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 8 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SIGNED 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Unsigned 8 bit */ 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T uint8_t 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN 0 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX UCHAR_MAX 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 8 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Signed 16 bit */ 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T int16_t 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN SHRT_MIN 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX SHRT_MAX 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SIGNED 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 16 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION natural 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) (v) 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION swap 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) bswap16 (v) 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SIGNED 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Unsigned 16 bit */ 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T uint16_t 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN 0 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX USHRT_MAX 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 16 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION natural 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) (v) 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION swap 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) bswap16 (v) 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Signed 32 bit */ 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T int32_t 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN INT32_MIN 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX INT32_MAX 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SIGNED 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 32 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION natural 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) (v) 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION swap 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) bswap32 (v) 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SIGNED 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1265d0e37bc290d1743cb5acf76eb6608f1303f27ddDavid 'Digit' Turner/* Unsigned 32 bit */ 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_T uint32_t 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MIN 0 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IN_MAX UINT32_MAX 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SHIFT 32 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION natural 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) (v) 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERSION swap 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ENDIAN_CONVERT(v) bswap32 (v) 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mixeng_template.h" 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERT 1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef ENDIAN_CONVERSION 1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MAX 1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_MIN 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef IN_T 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef SHIFT 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectt_sample *mixeng_conv[2][2][2][3] = { 1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint8_t_to_mono, 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint16_t_to_mono, 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint32_t_to_mono 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint8_t_to_mono, 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_uint16_t_to_mono, 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_uint32_t_to_mono, 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int8_t_to_mono, 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int16_t_to_mono, 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int32_t_to_mono 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int8_t_to_mono, 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_int16_t_to_mono, 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_int32_t_to_mono 1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint8_t_to_stereo, 1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint16_t_to_stereo, 1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint32_t_to_stereo 1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_uint8_t_to_stereo, 1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_uint16_t_to_stereo, 1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_uint32_t_to_stereo 1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int8_t_to_stereo, 1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int16_t_to_stereo, 1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int32_t_to_stereo 1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_natural_int8_t_to_stereo, 1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_int16_t_to_stereo, 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project conv_swap_int32_t_to_stereo, 1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectf_sample *mixeng_clip[2][2][2][3] = { 2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint8_t_from_mono, 2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint16_t_from_mono, 2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint32_t_from_mono 2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint8_t_from_mono, 2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_uint16_t_from_mono, 2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_uint32_t_from_mono 2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int8_t_from_mono, 2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int16_t_from_mono, 2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int32_t_from_mono 2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int8_t_from_mono, 2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_int16_t_from_mono, 2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_int32_t_from_mono 2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint8_t_from_stereo, 2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint16_t_from_stereo, 2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint32_t_from_stereo 2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_uint8_t_from_stereo, 2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_uint16_t_from_stereo, 2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_uint32_t_from_stereo 2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int8_t_from_stereo, 2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int16_t_from_stereo, 2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int32_t_from_stereo 2468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project }, 2478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_natural_int8_t_from_stereo, 2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_int16_t_from_stereo, 2508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project clip_swap_int32_t_from_stereo 2518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 2558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 2578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * August 21, 1998 2588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright 1998 Fabrice Bellard. 2598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * [Rewrote completly the code of Lance Norskog And Sundry 2618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Contributors with a more efficient algorithm.] 2628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This source code is freely redistributable and may be used for 2648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * any purpose. This copyright notice must be maintained. 2658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Lance Norskog And Sundry Contributors are not responsible for 2668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * the consequences of using this software. 2678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 2688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 2708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Sound Tools rate change effect file. 2718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 2728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Linear Interpolation. 2748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * The use of fractional increment allows us to use no buffer. It 2768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * avoid the problems at the end of the buffer we had with the old 2778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * method which stored a possibly big buffer of size 2788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * lcm(in_rate,out_rate). 2798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Limited to 16 bit samples and sampling frequency <= 65535 Hz. If 2818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * the input & output frequencies are equal, a delay of one sample is 2828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * introduced. Limited to processing 32-bit count worth of samples. 2838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 1 << FRAC_BITS evaluating to zero in several places. Changed with 2858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * an (unsigned long) cast to make it safe. MarkMLl 2/1/99 2868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 2878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Private data */ 2898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct rate { 2908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint64_t opos; 2918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint64_t opos_inc; 2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint32_t ipos; /* position in the input stream (integer) */ 2935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct st_sample ilast; /* last sample in the input stream */ 2948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 2958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Prepare processing. 2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 2998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *st_rate_start (int inrate, int outrate) 3008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project struct rate *rate = audio_calloc (AUDIO_FUNC, 1, sizeof (*rate)); 3028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (!rate) { 3048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project dolog ("Could not allocate resampler (%zu bytes)\n", sizeof (*rate)); 3058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return NULL; 3068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 3078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rate->opos = 0; 3098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* increment */ 3118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rate->opos_inc = ((uint64_t) inrate << 32) / outrate; 3128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rate->ipos = 0; 3148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rate->ilast.l = 0; 3158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rate->ilast.r = 0; 3168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return rate; 3178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NAME st_rate_flow_mix 3208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define OP(a, b) a += b 3218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "rate_template.h" 3228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NAME st_rate_flow 3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define OP(a, b) a = b 3258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "rate_template.h" 3268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid st_rate_stop (void *opaque) 3288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qemu_free (opaque); 3308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid mixeng_clear (struct st_sample *buf, int len) 3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner memset (buf, 0, len * sizeof (struct st_sample)); 3358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 336