A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2011 by Michael Sevakis
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef DSP_UTIL_H
22#define DSP_UTIL_H
23
24#include "gcc_extensions.h"
25
26/** Clip sample to signed 16 bit range **/
27
28#ifdef CPU_ARM
29#if ARM_ARCH >= 6
30static FORCE_INLINE int32_t clip_sample_16(int32_t sample)
31{
32 int32_t out;
33 asm ("ssat %0, #16, %1"
34 : "=r" (out) : "r"(sample));
35 return out;
36}
37#define CLIP_SAMPLE_16_DEFINED
38#endif /* ARM_ARCH */
39#endif /* CPU_ARM */
40
41#ifndef CLIP_SAMPLE_16_DEFINED
42/* Generic implementation */
43static FORCE_INLINE int32_t clip_sample_16(int32_t sample)
44{
45 if ((int16_t)sample != sample)
46 sample = 0x7fff ^ (sample >> 31);
47 return sample;
48}
49#endif /* CLIP_SAMPLE_16_DEFINED */
50
51#undef CLIP_SAMPLE_16_DEFINED
52
53/* Absolute difference of signed 32-bit numbers which must be dealt with
54 * in the unsigned 32-bit range */
55static FORCE_INLINE uint32_t ad_s32(int32_t a, int32_t b)
56{
57 return (a >= b) ? (a - b) : (b - a);
58}
59
60#endif /* DSP_UTIL_H */