ALSA project - the C library reference
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
pcm_ioplug.h
Go to the documentation of this file.
1
10
/*
11
* ALSA external PCM plugin SDK
12
*
13
* Copyright (c) 2005 Takashi Iwai <tiwai@suse.de>
14
*
15
* This library is free software; you can redistribute it and/or modify
16
* it under the terms of the GNU Lesser General Public License as
17
* published by the Free Software Foundation; either version 2.1 of
18
* the License, or (at your option) any later version.
19
*
20
* This program is distributed in the hope that it will be useful,
21
* but WITHOUT ANY WARRANTY; without even the implied warranty of
22
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
* GNU Lesser General Public License for more details.
24
*
25
* You should have received a copy of the GNU Lesser General Public
26
* License along with this library; if not, write to the Free Software
27
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
28
*
29
*/
30
31
#ifndef __ALSA_PCM_IOPLUG_H
32
#define __ALSA_PCM_IOPLUG_H
33
42
enum
{
43
SND_PCM_IOPLUG_HW_ACCESS
= 0,
44
SND_PCM_IOPLUG_HW_FORMAT
,
45
SND_PCM_IOPLUG_HW_CHANNELS
,
46
SND_PCM_IOPLUG_HW_RATE
,
47
SND_PCM_IOPLUG_HW_PERIOD_BYTES
,
48
SND_PCM_IOPLUG_HW_BUFFER_BYTES
,
49
SND_PCM_IOPLUG_HW_PERIODS
,
50
SND_PCM_IOPLUG_HW_PARAMS
51
};
52
54
typedef
struct
snd_pcm_ioplug
snd_pcm_ioplug_t
;
56
typedef
struct
snd_pcm_ioplug_callback
snd_pcm_ioplug_callback_t
;
57
#ifdef DOC_HIDDEN
58
/* redefine typedefs for stupid doxygen */
59
typedef
snd_pcm_ioplug
snd_pcm_ioplug_t
;
60
typedef
snd_pcm_ioplug_callback
snd_pcm_ioplug_callback_t
;
61
#endif
62
63
/*
64
* bit flags for additional conditions
65
*/
66
#define SND_PCM_IOPLUG_FLAG_LISTED (1<<0)
67
#define SND_PCM_IOPLUG_FLAG_MONOTONIC (1<<1)
69
#define SND_PCM_IOPLUG_FLAG_BOUNDARY_WA (1<<2)
70
71
/*
72
* Protocol version
73
*/
74
#define SND_PCM_IOPLUG_VERSION_MAJOR 1
75
#define SND_PCM_IOPLUG_VERSION_MINOR 0
76
#define SND_PCM_IOPLUG_VERSION_TINY 2
80
#define SND_PCM_IOPLUG_VERSION ((SND_PCM_IOPLUG_VERSION_MAJOR<<16) |\
81
(SND_PCM_IOPLUG_VERSION_MINOR<<8) |\
82
(SND_PCM_IOPLUG_VERSION_TINY))
83
85
struct
snd_pcm_ioplug
{
90
unsigned
int
version
;
94
const
char
*
name
;
95
unsigned
int
flags
;
96
int
poll_fd
;
97
unsigned
int
poll_events
;
98
unsigned
int
mmap_rw
;
102
const
snd_pcm_ioplug_callback_t
*
callback
;
106
void
*
private_data
;
110
snd_pcm_t
*
pcm
;
111
112
snd_pcm_stream_t
stream
;
113
snd_pcm_state_t
state
;
114
volatile
snd_pcm_uframes_t
appl_ptr
;
115
volatile
snd_pcm_uframes_t
hw_ptr
;
116
int
nonblock
;
118
snd_pcm_access_t
access
;
119
snd_pcm_format_t
format
;
120
unsigned
int
channels
;
121
unsigned
int
rate
;
122
snd_pcm_uframes_t
period_size
;
123
snd_pcm_uframes_t
buffer_size
;
124
};
125
127
struct
snd_pcm_ioplug_callback
{
131
int (*
start
)(
snd_pcm_ioplug_t
*io);
135
int (*
stop
)(
snd_pcm_ioplug_t
*io);
142
snd_pcm_sframes_t
(*
pointer
)(
snd_pcm_ioplug_t
*io);
146
snd_pcm_sframes_t
(*
transfer
)(
snd_pcm_ioplug_t
*io,
147
const
snd_pcm_channel_area_t
*areas,
148
snd_pcm_uframes_t
offset,
149
snd_pcm_uframes_t
size);
153
int (*
close
)(
snd_pcm_ioplug_t
*io);
157
int (*
hw_params
)(
snd_pcm_ioplug_t
*io,
snd_pcm_hw_params_t
*params);
161
int (*
hw_free
)(
snd_pcm_ioplug_t
*io);
165
int (*
sw_params
)(
snd_pcm_ioplug_t
*io,
snd_pcm_sw_params_t
*params);
169
int (*
prepare
)(
snd_pcm_ioplug_t
*io);
173
int (*
drain
)(
snd_pcm_ioplug_t
*io);
177
int (*
pause
)(
snd_pcm_ioplug_t
*io,
int
enable);
181
int (*
resume
)(
snd_pcm_ioplug_t
*io);
185
int (*
poll_descriptors_count
)(
snd_pcm_ioplug_t
*io);
189
int (*
poll_descriptors
)(
snd_pcm_ioplug_t
*io,
struct
pollfd *pfd,
unsigned
int
space);
193
int (*
poll_revents
)(
snd_pcm_ioplug_t
*io,
struct
pollfd *pfd,
unsigned
int
nfds,
unsigned
short
*revents);
197
void (*
dump
)(
snd_pcm_ioplug_t
*io,
snd_output_t
*out);
201
int (*
delay
)(
snd_pcm_ioplug_t
*io,
snd_pcm_sframes_t
*delayp);
205
snd_pcm_chmap_query_t
**(*query_chmaps)(
snd_pcm_ioplug_t
*io);
209
snd_pcm_chmap_t
*(*get_chmap)(
snd_pcm_ioplug_t
*io);
213
int (*
set_chmap
)(
snd_pcm_ioplug_t
*io,
const
snd_pcm_chmap_t
*map);
214
};
215
216
217
int
snd_pcm_ioplug_create
(
snd_pcm_ioplug_t
*io,
const
char
*name,
218
snd_pcm_stream_t
stream,
int
mode);
219
int
snd_pcm_ioplug_delete
(
snd_pcm_ioplug_t
*io);
220
221
/* update poll_fd and mmap_rw */
222
int
snd_pcm_ioplug_reinit_status
(
snd_pcm_ioplug_t
*ioplug);
223
224
/* get a mmap area (for mmap_rw only) */
225
const
snd_pcm_channel_area_t
*
snd_pcm_ioplug_mmap_areas
(
snd_pcm_ioplug_t
*ioplug);
226
227
/* clear hw_parameter setting */
228
void
snd_pcm_ioplug_params_reset
(
snd_pcm_ioplug_t
*io);
229
230
/* hw_parameter setting */
231
int
snd_pcm_ioplug_set_param_minmax
(
snd_pcm_ioplug_t
*io,
int
type,
unsigned
int
min,
unsigned
int
max);
232
int
snd_pcm_ioplug_set_param_list
(
snd_pcm_ioplug_t
*io,
int
type,
unsigned
int
num_list,
const
unsigned
int
*list);
233
234
/* change PCM status */
235
int
snd_pcm_ioplug_set_state
(
snd_pcm_ioplug_t
*ioplug,
snd_pcm_state_t
state);
236
237
/* calucalte the available frames */
238
snd_pcm_uframes_t
snd_pcm_ioplug_avail
(
const
snd_pcm_ioplug_t
*
const
ioplug,
239
const
snd_pcm_uframes_t
hw_ptr,
240
const
snd_pcm_uframes_t
appl_ptr);
241
snd_pcm_uframes_t
snd_pcm_ioplug_hw_avail
(
const
snd_pcm_ioplug_t
*
const
ioplug,
242
const
snd_pcm_uframes_t
hw_ptr,
243
const
snd_pcm_uframes_t
appl_ptr);
244
247
#endif
/* __ALSA_PCM_IOPLUG_H */
Generated by
1.8.3.1