10#ifndef __SOF_AUDIO_FORMAT_H__
11#define __SOF_AUDIO_FORMAT_H__
14#include <xtensa/config/core-isa.h>
15#if XCHAL_HAVE_HIFI3 == 1
16#define __AUDIO_FORMAT_GENERIC__ 0
17#define __AUDIO_FORMAT_HIFI3__ 1
20#define __AUDIO_FORMAT_GENERIC__ 1
21#define __AUDIO_FORMAT_HIFI3__ 0
25#define __AUDIO_FORMAT_GENERIC__ 1
26#define __AUDIO_FORMAT_HIFI3__ 0
33#define INT24_MAXVALUE 8388607
34#define INT24_MINVALUE -8388608
37#define ONE_Q2_30 1073741824
38#define ONE_Q1_31 2147483647
39#define MINUS_3DB_Q1_31 1520301996
40#define MINUS_6DB_Q1_31 1076291389
41#define MINUS_10DB_Q1_31 679093957
42#define MINUS_20DB_Q1_31 214748365
43#define MINUS_30DB_Q1_31 67909396
44#define MINUS_40DB_Q1_31 21474836
45#define MINUS_50DB_Q1_31 6790940
46#define MINUS_60DB_Q1_31 2147484
47#define MINUS_70DB_Q1_31 679094
48#define MINUS_80DB_Q1_31 214748
49#define MINUS_90DB_Q1_31 67909
55#define Q_SHIFT_BITS_64(qx, qy, qz) \
56 ((qx + qy - qz) <= 63 ? (((qx + qy - qz) >= 0) ? \
57 (qx + qy - qz) : INT64_MIN) : INT64_MAX)
59#define Q_SHIFT_BITS_32(qx, qy, qz) \
60 ((qx + qy - qz) <= 31 ? (((qx + qy - qz) >= 0) ? \
61 (qx + qy - qz) : INT32_MIN) : INT32_MAX)
67#define Q_CONVERT_FLOAT(f, qy) \
68 ((int32_t)(((const double)f) * ((int64_t)1 << (const int)qy) + 0.5))
71#define Q_CONVERT_QTOF(x, ny) ((float)(x) / ((int64_t)1 << (ny)))
74#define Q_CONVERT_QTOD(x, ny) ((double)(x) / ((int64_t)1 << (ny)))
77#define Q_SHIFT(x, src_q, dst_q) ((x) >> ((src_q) - (dst_q)))
78#define Q_SHIFT_RND(x, src_q, dst_q) \
79 ((((x) >> ((src_q) - (dst_q) - 1)) + 1) >> 1)
82#define Q_SHIFT_LEFT(x, src_q, dst_q) ((x) << ((dst_q) - (src_q)))
87#define Q_MULTS_16X16(px, py, qx, qy, qp) \
88 ((px) * (py) >> (((qx) + (qy) - (qp))))
93#define Q_MULTSR_16X16(px, py, qx, qy, qp) \
94 ((((px) * (py) >> ((qx) + (qy) - (qp) - 1)) + 1) >> 1)
99#define Q_MULTS_32X32(px, py, qx, qy, qp) \
100 ((px) * (py) >> (((qx) + (qy) - (qp))))
105#define Q_MULTSR_32X32(px, py, qx, qy, qp) \
106 ((((px) * (py) >> ((qx) + (qy) - (qp) - 1)) + 1) >> 1)
109#define SATP_INT32(x) (((x) > INT32_MAX) ? INT32_MAX : (x))
110#define SATM_INT32(x) (((x) < INT32_MIN) ? INT32_MIN : (x))
114#if __AUDIO_FORMAT_GENERIC__
117#if __AUDIO_FORMAT_HIFI3__
121static inline int64_t
q_mults_32x32(int32_t x, int32_t y,
const int shift_bits)
123 return ((int64_t)x * y) >> shift_bits;
128 return ((((int64_t)x * y) >> (shift_bits - 1)) + 1) >> 1;
131static inline int32_t
q_mults_16x16(int16_t x, int32_t y,
const int shift_bits)
133 return ((int32_t)x * y) >> shift_bits;
138 return ((((int32_t)x * y) >> (shift_bits - 1)) + 1) >> 1;
143 const int shift_bits)
145 return sat_int32(((((int64_t)x * y) >> (shift_bits - 1)) + 1) >> 1);
149 const int shift_bits)
151 return sat_int24(((((int64_t)x * y) >> (shift_bits - 1)) + 1) >> 1);
155 const int shift_bits)
157 return sat_int16(((((int64_t)x * y) >> (shift_bits - 1)) + 1) >> 1);
161 const int shift_bits)
163 return sat_int16(((((int32_t)x * y) >> (shift_bits - 1)) + 1) >> 1);
168 return (x << 8) >> 8;
IPC definitions for streams.