VSF Documented
vsf_audio.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_AUDIO_H__
19#define __VSF_AUDIO_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "../vsf_av_cfg.h"
24
25#if VSF_USE_AUDIO == ENABLED
26
27#include "kernel/vsf_kernel.h"
28// for VSF_HAL_USE_I2S
29#include "hal/vsf_hal.h"
30
31#undef PUBLIC_CONST
32#if defined(__VSF_AUDIO_CLASS_IMPLEMENT)
33# undef __VSF_AUDIO_CLASS_IMPLEMENT
34# define __VSF_CLASS_IMPLEMENT__
35# define PUBLIC_CONST
36#elif defined(__VSF_AUDIO_CLASS_INHERIT__)
37# undef __VSF_AUDIO_CLASS_INHERIT__
38# define __VSF_CLASS_INHERIT__
39# define PUBLIC_CONST
40#else
41# define PUBLIC_CONST const
42#endif
43
44#include "utilities/ooc_class.h"
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/*============================ MACROS ========================================*/
51
52#if VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL != ENABLED
53# error VSF_KERNEL_CFG_EDA_SUPPORT_SUB_CALL is needed to use audio
54#endif
55
56#define __describe_audio_ticktock_stream_adapter(__name, __stream_tx, __stream_rx, __frame_size)\
57 vsf_audio_ticktock_stream_adapter_t __name = { \
58 VSF_STREAM_ADAPTER_INIT((__stream_tx), (__stream_rx), (__frame_size), (__frame_size))\
59 };
60
61// prototype: describe_audio_ticktock_stream_adapter(__name, __stream_tx, __stream_rx, __frame_size)
62#define describe_audio_ticktock_stream_adapter(__name, __stream_tx, __stream_rx, __frame_size)\
63 __describe_audio_ticktock_stream_adapter(__name, (__stream_tx), (__stream_rx), __frame_size)
64
65/*============================ MACROFIED FUNCTIONS ===========================*/
66/*============================ TYPES =========================================*/
67
68typedef struct vk_audio_stream_drv_t {
73
75 protected_member(
77 )
78};
79
83#define VSF_AUDIO_DATA_TYPE_IS_FLOAT(__VALUE) ((__VALUE) & VSF_AUDIO_DATA_TYPE_FLOAT)
84#define VSF_AUDIO_DATA_TYPE_IS_INT(__VALUE) !VSF_AUDIO_DATA_TYPE_IS_FLOAT(__VALUE)
85
88#define VSF_AUDIO_DATA_TYPE_IS_SIGNED(__VALUE) ((__VALUE) & VSF_AUDIO_DATA_TYPE_SIGNED)
89#define VSF_AUDIO_DATA_TYPE_IS_UNSIGNED(__VALUE) !VSF_AUDIO_DATA_TYPE_IS_SIGNED(__VALUE)
90
93#define VSF_AUDIO_DATA_TYPE_IS_BE(__VALUE) ((__VALUE) & VSF_AUDIO_DATA_TYPE_BE)
94#define VSF_AUDIO_DATA_TYPE_IS_LE(__VALUE) !VSF_AUDIO_DATA_TYPE_IS_LE(__VALUE)
95
96// __LEN: [1 .. 64]
97#define __VSF_AUDIO_DATA_TYPE_BITLEN(__LEN) (((((__LEN) - 1) >> 1) & 0x1F) << 3)
98#define VSF_AUDIO_DATA_TYPE_BITLEN(__VALUE) (((((__VALUE) >> 3) & 0x1F) + 1) << 1)
99
100#define VSF_AUDIO_DATA_TYPE_BEUL(__LEN) (VSF_AUDIO_DATA_TYPE_BEU | __VSF_AUDIO_DATA_TYPE_BITLEN(__LEN))
101#define VSF_AUDIO_DATA_TYPE_BESL(__LEN) (VSF_AUDIO_DATA_TYPE_BES | __VSF_AUDIO_DATA_TYPE_BITLEN(__LEN))
102#define VSF_AUDIO_DATA_TYPE_LEUL(__LEN) (VSF_AUDIO_DATA_TYPE_LEU | __VSF_AUDIO_DATA_TYPE_BITLEN(__LEN))
103#define VSF_AUDIO_DATA_TYPE_LESL(__LEN) (VSF_AUDIO_DATA_TYPE_LES | __VSF_AUDIO_DATA_TYPE_BITLEN(__LEN))
125
126typedef union vk_audio_format_t {
127 struct {
128 union {
129 struct {
133 uint8_t __bitlen : 5; // please use VSF_AUDIO_DATA_TYPE_BITLEN to get real bitwidth
134 };
138 uint16_t sample_rate; // in 100Hz, eg: 441/480 means 44100/48000
140 // if value is 0, means adaptive format(from format in vk_audio_start)
143
146 public_member(
147 PUBLIC_CONST uint8_t stream_index; // index start from 0
148 PUBLIC_CONST uint8_t dir_in1out0; // 1 for capture, 0 for playback
149 PUBLIC_CONST vk_audio_format_t format; // format of audio stream buffer
151 protected_member(
152 const vk_audio_stream_drv_t *drv;
153 vsf_stream_t *stream;
154 vk_audio_dev_t *dev;
156};
157
159 public_member(
160 const vk_audio_drv_t *drv;
161 vsf_arch_prio_t hw_prio;
162 uint8_t stream_num;
163 vk_audio_stream_t *stream;
165};
166
172)
175)
178)
179
180// for playback, stream_tx should be stream of audio buffer,
181// stream_rx should be stream of ticktock buffer.
182// for capture, stream_tx should be stream of ticktock buffer,
183// stream_rx should be stream of audio buffer.
185 public_member(
186 implement(vsf_stream_adapter_t)
187 )
188 private_member(
189 // use eda to prevent pre-emptive of stream_adapter
190 vsf_eda_t eda;
191 )
192};
193
194/*============================ GLOBAL VARIABLES ==============================*/
195/*============================ PROTOTYPES ====================================*/
196
198
199extern vsf_err_t vk_audio_control(vk_audio_dev_t *pthis, uint_fast8_t stream_idx,
201extern vsf_err_t vk_audio_start(vk_audio_dev_t *pthis, uint_fast8_t stream_idx,
203extern vsf_err_t vk_audio_stop(vk_audio_dev_t *pthis, uint_fast8_t stream_idx);
204
205#if VSF_AUDIO_USE_PLAYBACK == ENABLED
207#endif
208
209#if VSF_AUDIO_USE_CAPTURE == ENABLED
211#endif
212
213#ifdef __cplusplus
214}
215#endif
216
217/*============================ INCLUDES ======================================*/
218
219#if VSF_AUDIO_USE_DECODER_WAV == ENABLED
220# include "./decoder/wav/vsf_wav.h"
221#endif
222
223#if VSF_AUDIO_USE_WINSOUND == ENABLED
225#endif
226
227#if VSF_HAL_USE_I2S == ENABLED
229
230# if VSF_AUDIO_USE_AIC1000A == ENABLED
232# endif
233#endif
234
235#endif // VSF_USE_AUDIO
236#endif // __VSF_AUDIO_H__
vsf_err_t
Definition __type.h:42
Definition vsf_audio.h:158
Definition vsf_audio.h:74
Definition vsf_audio.h:145
Definition vsf_audio.h:184
Definition vsf_eda.h:766
Definition vsf_simple_stream.h:286
Definition vsf_simple_stream.h:254
vsf_arch_prio_t
Definition cortex_a_generic.h:88
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_audio.h:68
vsf_peda_evthandler_t stop
Definition vsf_audio.h:71
vsf_peda_evthandler_t control
Definition vsf_audio.h:69
vsf_peda_evthandler_t start
Definition vsf_audio.h:70
Definition vsf_av.h:54
Definition vsf_audio.h:126
union vk_audio_format_t::@6::@7 datatype
uint8_t is_float
Definition vsf_audio.h:130
uint16_t sample_rate
Definition vsf_audio.h:138
uint8_t value
Definition vsf_audio.h:135
uint8_t is_signed
Definition vsf_audio.h:131
uint8_t channel_num
Definition vsf_audio.h:137
uint8_t __bitlen
Definition vsf_audio.h:133
uint32_t value
Definition vsf_audio.h:141
uint8_t is_be
Definition vsf_audio.h:132
struct vk_audio_format_t::@6 VSF_CAL_PACKED
vsf_err_t vk_audio_control(vk_audio_dev_t *pthis, uint_fast8_t stream_idx, vk_av_control_type_t type, vk_av_control_value_t value)
Definition vsf_audio.c:70
vsf_err_t vk_audio_stop(vk_audio_dev_t *pthis, uint_fast8_t stream_idx)
Definition vsf_audio.c:109
vk_audio_stream_t * audio_stream
Definition vsf_audio.h:169
#define VSF_AUDIO_DATA_TYPE_BESL(__LEN)
Definition vsf_audio.h:101
vk_audio_data_type_t
Definition vsf_audio.h:80
@ VSF_AUDIO_DATA_TYPE_LEU32
Definition vsf_audio.h:119
@ VSF_AUDIO_DATA_TYPE_BES32
Definition vsf_audio.h:115
@ VSF_AUDIO_DATA_TYPE_BES
Definition vsf_audio.h:105
@ VSF_AUDIO_DATA_TYPE_BEU16
Definition vsf_audio.h:109
@ VSF_AUDIO_DATA_TYPE_LES8
Definition vsf_audio.h:120
@ VSF_AUDIO_DATA_TYPE_INT
Definition vsf_audio.h:82
@ VSF_AUDIO_DATA_TYPE_BEU
Definition vsf_audio.h:104
@ VSF_AUDIO_DATA_TYPE_FLOAT
Definition vsf_audio.h:81
@ VSF_AUDIO_DATA_TYPE_BE
Definition vsf_audio.h:91
@ VSF_AUDIO_DATA_TYPE_LES
Definition vsf_audio.h:107
@ VSF_AUDIO_DATA_TYPE_LES32
Definition vsf_audio.h:123
@ VSF_AUDIO_DATA_TYPE_LEU8
Definition vsf_audio.h:116
@ VSF_AUDIO_DATA_TYPE_LEU16
Definition vsf_audio.h:117
@ VSF_AUDIO_DATA_TYPE_BEU8
Definition vsf_audio.h:108
@ VSF_AUDIO_DATA_TYPE_BES16
Definition vsf_audio.h:113
@ VSF_AUDIO_DATA_TYPE_LEU
Definition vsf_audio.h:106
@ VSF_AUDIO_DATA_TYPE_BEU24
Definition vsf_audio.h:110
@ VSF_AUDIO_DATA_TYPE_BES8
Definition vsf_audio.h:112
@ VSF_AUDIO_DATA_TYPE_BES24
Definition vsf_audio.h:114
@ VSF_AUDIO_DATA_TYPE_LE
Definition vsf_audio.h:92
@ VSF_AUDIO_DATA_TYPE_LES24
Definition vsf_audio.h:122
@ VSF_AUDIO_DATA_TYPE_BEU32
Definition vsf_audio.h:111
@ VSF_AUDIO_DATA_TYPE_LES16
Definition vsf_audio.h:121
@ VSF_AUDIO_DATA_TYPE_LEU24
Definition vsf_audio.h:118
@ VSF_AUDIO_DATA_TYPE_SIGNED
Definition vsf_audio.h:86
@ VSF_AUDIO_DATA_TYPE_UNSIGNED
Definition vsf_audio.h:87
void vsf_audio_capture_ticktock_stream_adapter_init(vsf_audio_ticktock_stream_adapter_t *adapter)
Definition vsf_audio.c:202
#define VSF_AUDIO_DATA_TYPE_LESL(__LEN)
Definition vsf_audio.h:103
#define VSF_AUDIO_DATA_TYPE_BEUL(__LEN)
Definition vsf_audio.h:100
#define PUBLIC_CONST
Definition vsf_audio.h:41
vk_av_control_value_t value
Definition vsf_audio.h:171
vk_av_control_type_t type
Definition vsf_audio.h:170
vsf_err_t vk_audio_init(vk_audio_dev_t *pthis)
Definition vsf_audio.c:56
void vsf_audio_playback_ticktock_stream_adapter_init(vsf_audio_ticktock_stream_adapter_t *adapter)
Definition vsf_audio.c:162
vsf_err_t vk_audio_start(vk_audio_dev_t *pthis, uint_fast8_t stream_idx, vsf_stream_t *stream, vk_audio_format_t *format)
Definition vsf_audio.c:88
#define VSF_AUDIO_DATA_TYPE_LEUL(__LEN)
Definition vsf_audio.h:102
vk_av_control_type_t
Definition vsf_av.h:38
#define __vsf_component_peda_ifs(__peda_name,...)
Definition vsf_component_cfg.h:62
#define vsf_peda_evthandler_t
Definition vsf_component_cfg.h:37
SDL_PixelFormat format
Definition vsf_sdl2_pixelformat.c:32