Linux unitednationsplay.com 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
nginx/1.20.1
Server IP : 188.130.139.92 & Your IP : 18.118.140.120
Domains :
Cant Read [ /etc/named.conf ]
User : web
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
doc /
alsa-lib-devel-1.1.8 /
doxygen /
html /
Delete
Unzip
Name
Size
Permission
Date
Action
search
[ DIR ]
drwxr-xr-x
2021-11-09 08:48
_2test_2latency_8c-example.html
72.63
KB
-rw-r--r--
2019-08-08 12:00
_2test_2pcm_8c-example.html
96.91
KB
-rw-r--r--
2019-08-08 12:00
_2test_2pcm_min_8c-example.html
10.46
KB
-rw-r--r--
2019-08-08 12:00
_2test_2rawmidi_8c-example.html
24.4
KB
-rw-r--r--
2019-08-08 12:00
_2test_2timer_8c-example.html
28.51
KB
-rw-r--r--
2019-08-08 12:00
annotated.html
21.21
KB
-rw-r--r--
2019-08-08 12:00
asoundef_8h.html
110.32
KB
-rw-r--r--
2019-08-08 12:00
asoundef_8h_source.html
71.83
KB
-rw-r--r--
2019-08-08 12:00
asoundlib_8h.html
7.28
KB
-rw-r--r--
2019-08-08 12:00
asoundlib_8h_source.html
13.58
KB
-rw-r--r--
2019-08-08 12:00
async_8c.html
10.67
KB
-rw-r--r--
2019-08-08 12:00
bc_s.png
676
B
-rw-r--r--
2019-08-08 12:00
bdwn.png
147
B
-rw-r--r--
2019-08-08 12:00
bug.html
5.27
KB
-rw-r--r--
2019-08-08 12:00
cards_8c.html
9.36
KB
-rw-r--r--
2019-08-08 12:00
classes.html
12.61
KB
-rw-r--r--
2019-08-08 12:00
closed.png
132
B
-rw-r--r--
2019-08-08 12:00
conf.html
14.12
KB
-rw-r--r--
2019-08-08 12:00
conf_8c.html
93.94
KB
-rw-r--r--
2019-08-08 12:00
conf_8h.html
61.32
KB
-rw-r--r--
2019-08-08 12:00
conf_8h_source.html
74.11
KB
-rw-r--r--
2019-08-08 12:00
confarg.html
7.88
KB
-rw-r--r--
2019-08-08 12:00
conffunc.html
9.26
KB
-rw-r--r--
2019-08-08 12:00
confhooks.html
6.58
KB
-rw-r--r--
2019-08-08 12:00
confmisc_8c.html
53.07
KB
-rw-r--r--
2019-08-08 12:00
control.html
7.52
KB
-rw-r--r--
2019-08-08 12:00
control_8c.html
167.94
KB
-rw-r--r--
2019-08-08 12:00
control_8h.html
231.48
KB
-rw-r--r--
2019-08-08 12:00
control_8h_source.html
278.44
KB
-rw-r--r--
2019-08-08 12:00
control__ext_8c.html
7.89
KB
-rw-r--r--
2019-08-08 12:00
control__external_8h.html
15.86
KB
-rw-r--r--
2019-08-08 12:00
control__external_8h_source.html
54.72
KB
-rw-r--r--
2019-08-08 12:00
ctl_external_plugins.html
19.15
KB
-rw-r--r--
2019-08-08 12:00
deprecated.html
6.81
KB
-rw-r--r--
2019-08-08 12:00
dir_381a0a05232d68d0a2ebe5cd502f4d69.html
7.59
KB
-rw-r--r--
2019-08-08 12:00
dir_5f851d935025f1be023c2c62bd843fe2.html
6.55
KB
-rw-r--r--
2019-08-08 12:00
dir_68267d1309a1af8e8297ef4c3efbcdba.html
12.01
KB
-rw-r--r--
2019-08-08 12:00
dir_8c35c1873c2690b478a9950d0638d637.html
7.11
KB
-rw-r--r--
2019-08-08 12:00
dir_b73df3c68338d0823ff9d736eb268d89.html
7.77
KB
-rw-r--r--
2019-08-08 12:00
dir_b81b067251166617f9d0a8c0cfc3a4a9.html
9.51
KB
-rw-r--r--
2019-08-08 12:00
dir_d0e40b335958b6212fb6f781133eecbc.html
6.11
KB
-rw-r--r--
2019-08-08 12:00
dir_d1b0f45016cd06bf2eb252bd3f501161.html
7.6
KB
-rw-r--r--
2019-08-08 12:00
dir_d3519ec5023707b37568b471096da878.html
6.3
KB
-rw-r--r--
2019-08-08 12:00
dir_d44c64559bbebec7f509842c48db8b23.html
16.06
KB
-rw-r--r--
2019-08-08 12:00
dir_e8b3d2be6db305a5d41d291dd9fd6e9c.html
18.74
KB
-rw-r--r--
2019-08-08 12:00
dlmisc_8c.html
8.68
KB
-rw-r--r--
2019-08-08 12:00
doxygen.css
23.29
KB
-rw-r--r--
2019-08-08 12:00
doxygen.png
3.69
KB
-rw-r--r--
2019-08-08 12:00
dynsections.js
2.91
KB
-rw-r--r--
2019-08-08 12:00
error_8c.html
11.62
KB
-rw-r--r--
2019-08-08 12:00
error_8h.html
15.14
KB
-rw-r--r--
2019-08-08 12:00
error_8h_source.html
17.35
KB
-rw-r--r--
2019-08-08 12:00
examples.html
5.44
KB
-rw-r--r--
2019-08-08 12:00
files.html
41.53
KB
-rw-r--r--
2019-08-08 12:00
ftv2blank.png
86
B
-rw-r--r--
2019-08-08 12:00
ftv2cl.png
453
B
-rw-r--r--
2019-08-08 12:00
ftv2doc.png
746
B
-rw-r--r--
2019-08-08 12:00
ftv2folderclosed.png
616
B
-rw-r--r--
2019-08-08 12:00
ftv2folderopen.png
597
B
-rw-r--r--
2019-08-08 12:00
ftv2lastnode.png
86
B
-rw-r--r--
2019-08-08 12:00
ftv2link.png
746
B
-rw-r--r--
2019-08-08 12:00
ftv2mlastnode.png
246
B
-rw-r--r--
2019-08-08 12:00
ftv2mnode.png
246
B
-rw-r--r--
2019-08-08 12:00
ftv2mo.png
403
B
-rw-r--r--
2019-08-08 12:00
ftv2node.png
86
B
-rw-r--r--
2019-08-08 12:00
ftv2ns.png
388
B
-rw-r--r--
2019-08-08 12:00
ftv2plastnode.png
229
B
-rw-r--r--
2019-08-08 12:00
ftv2pnode.png
229
B
-rw-r--r--
2019-08-08 12:00
ftv2splitbar.png
314
B
-rw-r--r--
2019-08-08 12:00
ftv2vertline.png
86
B
-rw-r--r--
2019-08-08 12:00
functions.html
7.92
KB
-rw-r--r--
2019-08-08 12:00
functions_0x62.html
8.16
KB
-rw-r--r--
2019-08-08 12:00
functions_0x63.html
10.88
KB
-rw-r--r--
2019-08-08 12:00
functions_0x64.html
9.97
KB
-rw-r--r--
2019-08-08 12:00
functions_0x65.html
8.63
KB
-rw-r--r--
2019-08-08 12:00
functions_0x66.html
8.8
KB
-rw-r--r--
2019-08-08 12:00
functions_0x67.html
8.44
KB
-rw-r--r--
2019-08-08 12:00
functions_0x68.html
8.59
KB
-rw-r--r--
2019-08-08 12:00
functions_0x69.html
8.96
KB
-rw-r--r--
2019-08-08 12:00
functions_0x6c.html
7.69
KB
-rw-r--r--
2019-08-08 12:00
functions_0x6d.html
8.97
KB
-rw-r--r--
2019-08-08 12:00
functions_0x6e.html
9.46
KB
-rw-r--r--
2019-08-08 12:00
functions_0x6f.html
7.45
KB
-rw-r--r--
2019-08-08 12:00
functions_0x70.html
12.97
KB
-rw-r--r--
2019-08-08 12:00
functions_0x71.html
7.81
KB
-rw-r--r--
2019-08-08 12:00
functions_0x72.html
9.93
KB
-rw-r--r--
2019-08-08 12:00
functions_0x73.html
11.55
KB
-rw-r--r--
2019-08-08 12:00
functions_0x74.html
9.51
KB
-rw-r--r--
2019-08-08 12:00
functions_0x75.html
7.57
KB
-rw-r--r--
2019-08-08 12:00
functions_0x76.html
8.66
KB
-rw-r--r--
2019-08-08 12:00
functions_0x77.html
8.02
KB
-rw-r--r--
2019-08-08 12:00
functions_vars.html
7.9
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x62.html
8.14
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x63.html
10.86
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x64.html
9.95
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x65.html
8.61
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x66.html
8.77
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x67.html
8.42
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x68.html
8.57
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x69.html
8.94
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x6c.html
7.67
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x6d.html
8.95
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x6e.html
9.44
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x6f.html
7.42
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x70.html
12.94
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x71.html
7.78
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x72.html
9.91
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x73.html
11.53
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x74.html
9.49
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x75.html
7.55
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x76.html
8.64
KB
-rw-r--r--
2019-08-08 12:00
functions_vars_0x77.html
8
KB
-rw-r--r--
2019-08-08 12:00
global_8h.html
21.49
KB
-rw-r--r--
2019-08-08 12:00
global_8h_source.html
31.54
KB
-rw-r--r--
2019-08-08 12:00
globals.html
10.13
KB
-rw-r--r--
2019-08-08 12:00
globals_0x61.html
6.53
KB
-rw-r--r--
2019-08-08 12:00
globals_0x69.html
27.15
KB
-rw-r--r--
2019-08-08 12:00
globals_0x6c.html
6.52
KB
-rw-r--r--
2019-08-08 12:00
globals_0x6d.html
19.28
KB
-rw-r--r--
2019-08-08 12:00
globals_0x70.html
6.52
KB
-rw-r--r--
2019-08-08 12:00
globals_0x73.html
399.6
KB
-rw-r--r--
2019-08-08 12:00
globals_defs.html
6.74
KB
-rw-r--r--
2019-08-08 12:00
globals_defs_0x61.html
6.28
KB
-rw-r--r--
2019-08-08 12:00
globals_defs_0x69.html
26.9
KB
-rw-r--r--
2019-08-08 12:00
globals_defs_0x6d.html
19.03
KB
-rw-r--r--
2019-08-08 12:00
globals_defs_0x73.html
41.41
KB
-rw-r--r--
2019-08-08 12:00
globals_enum.html
10.91
KB
-rw-r--r--
2019-08-08 12:00
globals_eval.html
56.84
KB
-rw-r--r--
2019-08-08 12:00
globals_func.html
8.99
KB
-rw-r--r--
2019-08-08 12:00
globals_func_0x73.html
296.89
KB
-rw-r--r--
2019-08-08 12:00
globals_type.html
16.29
KB
-rw-r--r--
2019-08-08 12:00
globals_vars.html
6.58
KB
-rw-r--r--
2019-08-08 12:00
group___config.html
167.8
KB
-rw-r--r--
2019-08-08 12:00
group___control.html
451.85
KB
-rw-r--r--
2019-08-08 12:00
group___ctl_plugin___s_d_k.html
27.25
KB
-rw-r--r--
2019-08-08 12:00
group___digital___audio___interface.html
121.36
KB
-rw-r--r--
2019-08-08 12:00
group___error.html
17.96
KB
-rw-r--r--
2019-08-08 12:00
group___global.html
35.46
KB
-rw-r--r--
2019-08-08 12:00
group___h_control.html
87.82
KB
-rw-r--r--
2019-08-08 12:00
group___hw_dep.html
103.83
KB
-rw-r--r--
2019-08-08 12:00
group___input.html
25.86
KB
-rw-r--r--
2019-08-08 12:00
group___m_i_d_i___commands.html
19.43
KB
-rw-r--r--
2019-08-08 12:00
group___m_i_d_i___controllers.html
59.49
KB
-rw-r--r--
2019-08-08 12:00
group___m_i_d_i___event.html
40.27
KB
-rw-r--r--
2019-08-08 12:00
group___m_i_d_i___interface.html
7.65
KB
-rw-r--r--
2019-08-08 12:00
group___mixer.html
111.34
KB
-rw-r--r--
2019-08-08 12:00
group___output.html
29.64
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m.html
239.96
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___access.html
25.68
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___deprecated.html
57.51
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___description.html
21.1
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___direct.html
30.64
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___dump.html
19.83
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___ext_plug.html
35.42
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___format.html
25.63
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___h_w___params.html
334.6
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___helpers.html
59.92
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___hook.html
19.18
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___i_o_plug.html
42.67
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___info.html
39.45
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___s_w___params.html
57.45
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___scope.html
36.51
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___simple.html
24.78
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___status.html
41.88
KB
-rw-r--r--
2019-08-08 12:00
group___p_c_m___sub_format.html
25.91
KB
-rw-r--r--
2019-08-08 12:00
group___plugin___s_d_k.html
16.2
KB
-rw-r--r--
2019-08-08 12:00
group___raw_midi.html
116.92
KB
-rw-r--r--
2019-08-08 12:00
group___s_control.html
13.25
KB
-rw-r--r--
2019-08-08 12:00
group___seq_client.html
103.44
KB
-rw-r--r--
2019-08-08 12:00
group___seq_ev_type.html
42.98
KB
-rw-r--r--
2019-08-08 12:00
group___seq_event.html
83.54
KB
-rw-r--r--
2019-08-08 12:00
group___seq_events.html
50.17
KB
-rw-r--r--
2019-08-08 12:00
group___seq_middle.html
138.03
KB
-rw-r--r--
2019-08-08 12:00
group___seq_misc.html
7.79
KB
-rw-r--r--
2019-08-08 12:00
group___seq_port.html
112.46
KB
-rw-r--r--
2019-08-08 12:00
group___seq_queue.html
136.55
KB
-rw-r--r--
2019-08-08 12:00
group___seq_subscribe.html
96.64
KB
-rw-r--r--
2019-08-08 12:00
group___sequencer.html
76.55
KB
-rw-r--r--
2019-08-08 12:00
group___simple_mixer.html
149.55
KB
-rw-r--r--
2019-08-08 12:00
group___timer.html
190.4
KB
-rw-r--r--
2019-08-08 12:00
group__topology.html
61.51
KB
-rw-r--r--
2019-08-08 12:00
group__ucm.html
57.08
KB
-rw-r--r--
2019-08-08 12:00
hcontrol.html
5.36
KB
-rw-r--r--
2019-08-08 12:00
hcontrol_8c.html
41.06
KB
-rw-r--r--
2019-08-08 12:00
hwdep_8c.html
44.41
KB
-rw-r--r--
2019-08-08 12:00
hwdep_8h.html
49.87
KB
-rw-r--r--
2019-08-08 12:00
hwdep_8h_source.html
70.6
KB
-rw-r--r--
2019-08-08 12:00
index.html
9.13
KB
-rw-r--r--
2019-08-08 12:00
input_8c.html
12.28
KB
-rw-r--r--
2019-08-08 12:00
input_8h.html
14.5
KB
-rw-r--r--
2019-08-08 12:00
input_8h_source.html
19.59
KB
-rw-r--r--
2019-08-08 12:00
jquery.js
102.24
KB
-rw-r--r--
2019-08-08 12:00
mixer.html
5.22
KB
-rw-r--r--
2019-08-08 12:00
mixer_8c.html
46.29
KB
-rw-r--r--
2019-08-08 12:00
mixer_8h.html
111.48
KB
-rw-r--r--
2019-08-08 12:00
mixer_8h_source.html
137.52
KB
-rw-r--r--
2019-08-08 12:00
mixer__simple_8h_source.html
14.49
KB
-rw-r--r--
2019-08-08 12:00
modules.html
18.17
KB
-rw-r--r--
2019-08-08 12:00
namehint_8c.html
8.18
KB
-rw-r--r--
2019-08-08 12:00
names_8c.html
7.6
KB
-rw-r--r--
2019-08-08 12:00
nav_f.png
153
B
-rw-r--r--
2019-08-08 12:00
nav_g.png
108
B
-rw-r--r--
2019-08-08 12:00
nav_h.png
98
B
-rw-r--r--
2019-08-08 12:00
open.png
123
B
-rw-r--r--
2019-08-08 12:00
output_8c.html
13.92
KB
-rw-r--r--
2019-08-08 12:00
output_8h.html
16.15
KB
-rw-r--r--
2019-08-08 12:00
output_8h_source.html
21.34
KB
-rw-r--r--
2019-08-08 12:00
pages.html
8.4
KB
-rw-r--r--
2019-08-08 12:00
pcm.html
47.73
KB
-rw-r--r--
2019-08-08 12:00
pcm_2pcm_8c.html
286.51
KB
-rw-r--r--
2019-08-08 12:00
pcm_8h.html
373.82
KB
-rw-r--r--
2019-08-08 12:00
pcm_8h_source.html
535.79
KB
-rw-r--r--
2019-08-08 12:00
pcm__adpcm_8c.html
13.99
KB
-rw-r--r--
2019-08-08 12:00
pcm__alaw_8c.html
13.46
KB
-rw-r--r--
2019-08-08 12:00
pcm__asym_8c.html
10.01
KB
-rw-r--r--
2019-08-08 12:00
pcm__copy_8c.html
12.94
KB
-rw-r--r--
2019-08-08 12:00
pcm__dmix_8c.html
15.19
KB
-rw-r--r--
2019-08-08 12:00
pcm__dshare_8c.html
14.16
KB
-rw-r--r--
2019-08-08 12:00
pcm__dsnoop_8c.html
14.17
KB
-rw-r--r--
2019-08-08 12:00
pcm__empty_8c.html
10
KB
-rw-r--r--
2019-08-08 12:00
pcm__external_8h.html
8.9
KB
-rw-r--r--
2019-08-08 12:00
pcm__external_8h_source.html
14.69
KB
-rw-r--r--
2019-08-08 12:00
pcm__extplug_8c.html
13.04
KB
-rw-r--r--
2019-08-08 12:00
pcm__extplug_8h.html
17.62
KB
-rw-r--r--
2019-08-08 12:00
pcm__extplug_8h_source.html
48.01
KB
-rw-r--r--
2019-08-08 12:00
pcm__file_8c.html
15.48
KB
-rw-r--r--
2019-08-08 12:00
pcm__hooks_8c.html
19.42
KB
-rw-r--r--
2019-08-08 12:00
pcm__hw_8c.html
18.07
KB
-rw-r--r--
2019-08-08 12:00
pcm__iec958_8c.html
14.06
KB
-rw-r--r--
2019-08-08 12:00
pcm__ioplug_8c.html
15.3
KB
-rw-r--r--
2019-08-08 12:00
pcm__ioplug_8h.html
21.94
KB
-rw-r--r--
2019-08-08 12:00
pcm__ioplug_8h_source.html
66.92
KB
-rw-r--r--
2019-08-08 12:00
pcm__ladspa_8c.html
14.79
KB
-rw-r--r--
2019-08-08 12:00
pcm__lfloat_8c.html
13.42
KB
-rw-r--r--
2019-08-08 12:00
pcm__linear_8c.html
13.49
KB
-rw-r--r--
2019-08-08 12:00
pcm__meter_8c.html
22.2
KB
-rw-r--r--
2019-08-08 12:00
pcm__mmap__emul_8c.html
9.84
KB
-rw-r--r--
2019-08-08 12:00
pcm__mulaw_8c.html
13.48
KB
-rw-r--r--
2019-08-08 12:00
pcm__multi_8c.html
14.84
KB
-rw-r--r--
2019-08-08 12:00
pcm__null_8c.html
12.88
KB
-rw-r--r--
2019-08-08 12:00
pcm__plugin_8c.html
6.44
KB
-rw-r--r--
2019-08-08 12:00
pcm__rate_8c.html
16.13
KB
-rw-r--r--
2019-08-08 12:00
pcm__route_8c.html
21.28
KB
-rw-r--r--
2019-08-08 12:00
pcm__share_8c.html
15.31
KB
-rw-r--r--
2019-08-08 12:00
pcm__shm_8c.html
13.27
KB
-rw-r--r--
2019-08-08 12:00
pcm__simple_8c.html
10.12
KB
-rw-r--r--
2019-08-08 12:00
pcm__softvol_8c.html
16.08
KB
-rw-r--r--
2019-08-08 12:00
pcm_external_plugins.html
24.32
KB
-rw-r--r--
2019-08-08 12:00
pcm_plugins.html
66.5
KB
-rw-r--r--
2019-08-08 12:00
rawmidi.html
11.77
KB
-rw-r--r--
2019-08-08 12:00
rawmidi_8c.html
46.77
KB
-rw-r--r--
2019-08-08 12:00
rawmidi_8h.html
54.98
KB
-rw-r--r--
2019-08-08 12:00
rawmidi_8h_source.html
65.34
KB
-rw-r--r--
2019-08-08 12:00
seq.html
57.26
KB
-rw-r--r--
2019-08-08 12:00
seq_8c.html
197.23
KB
-rw-r--r--
2019-08-08 12:00
seq_8h.html
251.24
KB
-rw-r--r--
2019-08-08 12:00
seq_8h_source.html
272.74
KB
-rw-r--r--
2019-08-08 12:00
seq__event_8c.html
6.64
KB
-rw-r--r--
2019-08-08 12:00
seq__event_8h.html
29.19
KB
-rw-r--r--
2019-08-08 12:00
seq__event_8h_source.html
96.96
KB
-rw-r--r--
2019-08-08 12:00
seq__midi__event_8c.html
14.24
KB
-rw-r--r--
2019-08-08 12:00
seq__midi__event_8h.html
15.24
KB
-rw-r--r--
2019-08-08 12:00
seq__midi__event_8h_source.html
19.92
KB
-rw-r--r--
2019-08-08 12:00
seqmid_8h.html
42.31
KB
-rw-r--r--
2019-08-08 12:00
seqmid_8h_source.html
53.43
KB
-rw-r--r--
2019-08-08 12:00
setup_8c.html
9.85
KB
-rw-r--r--
2019-08-08 12:00
simple_8c.html
60.74
KB
-rw-r--r--
2019-08-08 12:00
simple__abst_8c.html
16.27
KB
-rw-r--r--
2019-08-08 12:00
simple__none_8c.html
9.28
KB
-rw-r--r--
2019-08-08 12:00
structctl__access__elem.html
6.41
KB
-rw-r--r--
2019-08-08 12:00
structsnd__aes__iec958__t.html
8.83
KB
-rw-r--r--
2019-08-08 12:00
structsnd__ctl__ext.html
18.52
KB
-rw-r--r--
2019-08-08 12:00
structsnd__ctl__ext__callback.html
35.7
KB
-rw-r--r--
2019-08-08 12:00
structsnd__devname.html
8.06
KB
-rw-r--r--
2019-08-08 12:00
structsnd__mixer__selem__regopt.html
10.25
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__audio__tstamp__config__t.html
6.58
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__audio__tstamp__report__t.html
7.29
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__channel__area__t.html
8.58
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__chmap__query__t.html
7.82
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__chmap__t.html
7.39
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__extplug.html
17.41
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__extplug__callback.html
16.62
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__ioplug.html
22.55
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__ioplug__callback.html
27.5
KB
-rw-r--r--
2019-08-08 12:00
structsnd__pcm__scope__ops__t.html
14.9
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__addr__t.html
7.39
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__connect__t.html
7.66
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__ctrl__t.html
8.8
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__ext.html
7.41
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__note__t.html
9.79
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__queue__control__t.html
12.5
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__raw32__t.html
6.74
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__ev__raw8__t.html
6.74
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__event__t.html
19.44
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__queue__skew__t.html
7.42
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__real__time__t.html
7.43
KB
-rw-r--r--
2019-08-08 12:00
structsnd__seq__result__t.html
7.37
KB
-rw-r--r--
2019-08-08 12:00
structsnd__timer__read__t.html
7.76
KB
-rw-r--r--
2019-08-08 12:00
structsnd__timer__tread__t.html
8.42
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__bytes__template.html
11.35
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__channel__elem.html
8.65
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__channel__map__template.html
7.96
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__channel__template.html
5.92
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__ctl__template.html
9.91
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__dai__template.html
12.13
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__enum__template.html
11.45
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__graph__elem.html
8.26
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__graph__template.html
7.73
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__hw__config__template.html
13.47
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__io__ops__template.html
8.23
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__link__template.html
12.93
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__mixer__template.html
11.44
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__obj__template.html
5.87
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__obj__template__t.html
15.83
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__pcm__template.html
15.76
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__pdata__template.html
7.56
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__stream__caps__template.html
16.33
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__stream__template.html
10.33
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__tlv__dbscale__template.html
9.14
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__tlv__template.html
6.84
KB
-rw-r--r--
2019-08-08 12:00
structsnd__tplg__widget__template.html
16.21
KB
-rw-r--r--
2019-08-08 12:00
sync_off.png
853
B
-rw-r--r--
2019-08-08 12:00
sync_on.png
845
B
-rw-r--r--
2019-08-08 12:00
tab_a.png
142
B
-rw-r--r--
2019-08-08 12:00
tab_b.png
169
B
-rw-r--r--
2019-08-08 12:00
tab_h.png
177
B
-rw-r--r--
2019-08-08 12:00
tab_s.png
184
B
-rw-r--r--
2019-08-08 12:00
tabs.css
1.14
KB
-rw-r--r--
2019-08-08 12:00
timer.html
6.57
KB
-rw-r--r--
2019-08-08 12:00
timer_8c.html
48.32
KB
-rw-r--r--
2019-08-08 12:00
timer_8h.html
85.53
KB
-rw-r--r--
2019-08-08 12:00
timer_8h_source.html
108.65
KB
-rw-r--r--
2019-08-08 12:00
timer__local_8h_source.html
27.74
KB
-rw-r--r--
2019-08-08 12:00
timer__query_8c.html
31.83
KB
-rw-r--r--
2019-08-08 12:00
tlv_8c.html
11.68
KB
-rw-r--r--
2019-08-08 12:00
topology_8h_source.html
138.52
KB
-rw-r--r--
2019-08-08 12:00
unionsnd__pcm__sync__id__t.html
8.07
KB
-rw-r--r--
2019-08-08 12:00
unionsnd__seq__timestamp__t.html
7.61
KB
-rw-r--r--
2019-08-08 12:00
use-case_8h.html
26.77
KB
-rw-r--r--
2019-08-08 12:00
use-case_8h_source.html
36.97
KB
-rw-r--r--
2019-08-08 12:00
version_8h_source.html
7.33
KB
-rw-r--r--
2019-08-08 12:00
wave1.gif
1.67
KB
-rw-r--r--
2019-08-08 12:00
wave2.gif
1020
B
-rw-r--r--
2019-08-08 12:00
Save
Rename
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.5"/> <title>ALSA project - the C library reference: PCM External Plugin SDK</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">ALSA project - the C library reference </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li><a href="examples.html"><span>Examples</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <img id="MSearchSelect" src="search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> </span><span class="right"> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </span> </div> </li> </ul> </div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">PCM External Plugin SDK </div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><h1><a class="anchor" id="pcm_externals"></a> External Plugins</h1> <p>The external plugins are implemented in a shared object file located at /usr/lib/alsa-lib (the exact location depends on the build option and asoundrc configuration). It has to be the file like libasound_module_pcm_MYPLUGIN.so, where MYPLUGIN corresponds to your own plugin name.</p> <p>The entry point of the plugin is defined via <a class="el" href="group___plugin___s_d_k.html#ga3fd72ea47a7a921943b26c580b9d6c41">SND_PCM_PLUGIN_DEFINE_FUNC()</a> macro. This macro defines the function with a proper name to be referred from alsa-lib. The function takes the following 6 arguments: </p> <div class="fragment"><div class="line">int (<a class="code" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> **pcmp, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="group___config.html#ga1c20905af775ae77d04d1a5696f67985">snd_config_t</a> *root,</div> <div class="line"> <a class="code" href="group___config.html#ga1c20905af775ae77d04d1a5696f67985">snd_config_t</a> *conf, <a class="code" href="group___p_c_m.html#gac23b43ff55add78638e503b9cc892c24">snd_pcm_stream_t</a> stream, <span class="keywordtype">int</span> mode)</div> </div><!-- fragment --><p> The first argument, pcmp, is the pointer to store the resultant PCM handle. The arguments name, root, stream and mode are the parameters to be passed to the plugin constructor. The conf is the configuration tree for the plugin. The arguments above are defined in the macro itself, so don't use variables with the same names to shadow parameters.</p> <p>After parsing the configuration parameters in the given conf tree, usually you will call the external plugin API function, <a class="el" href="group___p_c_m___ext_plug.html#gab0b27889f74c83cd033062981320fd62" title="Create an extplug instance. ">snd_pcm_extplug_create()</a> or <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a>, depending on the plugin type. The PCM handle must be filled *pcmp in return. Then this function must return either a value 0 when succeeded, or a negative value as the error code.</p> <p>Finally, add <a class="el" href="group___plugin___s_d_k.html#ga73a613cc5b7b3642f53bbd5a1d78004b">SND_PCM_PLUGIN_SYMBOL()</a> with the name of your plugin as the argument at the end. This defines the proper versioned symbol as the reference.</p> <p>The typical code would look like below: </p> <div class="fragment"><div class="line"><span class="keyword">struct </span>myplug_info {</div> <div class="line"> <a class="code" href="structsnd__pcm__extplug.html">snd_pcm_extplug_t</a> ext;</div> <div class="line"> <span class="keywordtype">int</span> my_own_data;</div> <div class="line"> ...</div> <div class="line">};</div> <div class="line"></div> <div class="line"><a class="code" href="group___plugin___s_d_k.html#ga3fd72ea47a7a921943b26c580b9d6c41">SND_PCM_PLUGIN_DEFINE_FUNC</a>(myplug)</div> <div class="line">{</div> <div class="line"> <a class="code" href="group___config.html#ga6c621ab8875a222e1fcb56e9feed6ec6">snd_config_iterator_t</a> i, next;</div> <div class="line"> <a class="code" href="group___config.html#ga1c20905af775ae77d04d1a5696f67985">snd_config_t</a> *slave = NULL;</div> <div class="line"> <span class="keyword">struct </span>myplug_info *myplug;</div> <div class="line"> <span class="keywordtype">int</span> err;</div> <div class="line"></div> <div class="line"> <a class="code" href="group___config.html#gac3f21333e1f9b602cad9b06cb418fa80">snd_config_for_each</a>(i, next, conf) {</div> <div class="line"> <a class="code" href="group___config.html#ga1c20905af775ae77d04d1a5696f67985">snd_config_t</a> *n = <a class="code" href="group___config.html#gaa91fe1d926d88041ed516a6a7293f606">snd_config_iterator_entry</a>(i);</div> <div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span> *id;</div> <div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___config.html#gae366751e8ea98aeb69f9ef876f7b949c">snd_config_get_id</a>(n, &<span class="keywordtype">id</span>) < 0)</div> <div class="line"> <span class="keywordflow">continue</span>;</div> <div class="line"> <span class="keywordflow">if</span> (strcmp(<span class="keywordtype">id</span>, <span class="stringliteral">"comment"</span>) == 0 || strcmp(<span class="keywordtype">id</span>, <span class="stringliteral">"type"</span>) == 0)</div> <div class="line"> <span class="keywordflow">continue</span>;</div> <div class="line"> <span class="keywordflow">if</span> (strcmp(<span class="keywordtype">id</span>, <span class="stringliteral">"slave"</span>) == 0) {</div> <div class="line"> slave = n;</div> <div class="line"> <span class="keywordflow">continue</span>;</div> <div class="line"> }</div> <div class="line"> <span class="keywordflow">if</span> (strcmp(<span class="keywordtype">id</span>, <span class="stringliteral">"my_own_parameter"</span>) == 0) {</div> <div class="line"> ....</div> <div class="line"> <span class="keywordflow">continue</span>;</div> <div class="line"> }</div> <div class="line"> <a class="code" href="group___error.html#ga281420eb1344fe9f01d67d20c92457f0">SNDERR</a>(<span class="stringliteral">"Unknown field %s"</span>, <span class="keywordtype">id</span>);</div> <div class="line"> <span class="keywordflow">return</span> -EINVAL;</div> <div class="line"> }</div> <div class="line"></div> <div class="line"> <span class="keywordflow">if</span> (! slave) {</div> <div class="line"> <a class="code" href="group___error.html#ga281420eb1344fe9f01d67d20c92457f0">SNDERR</a>(<span class="stringliteral">"No slave defined for myplug"</span>);</div> <div class="line"> <span class="keywordflow">return</span> -EINVAL;</div> <div class="line"> }</div> <div class="line"></div> <div class="line"> myplug = calloc(1, <span class="keyword">sizeof</span>(*myplug));</div> <div class="line"> <span class="keywordflow">if</span> (myplug == NULL)</div> <div class="line"> <span class="keywordflow">return</span> -ENOMEM;</div> <div class="line"></div> <div class="line"> myplug->ext.version = <a class="code" href="group___p_c_m___ext_plug.html#ga24d0ae71d106f08685d9ba8c6cf5fe78">SND_PCM_EXTPLUG_VERSION</a>;</div> <div class="line"> myplug->ext.name = <span class="stringliteral">"My Own Plugin"</span>;</div> <div class="line"> myplug->ext.callback = &my_own_callback;</div> <div class="line"> myplug->ext.private_data = myplug;</div> <div class="line"> ....</div> <div class="line"></div> <div class="line"> err = <a class="code" href="group___p_c_m___ext_plug.html#gab0b27889f74c83cd033062981320fd62">snd_pcm_extplug_create</a>(&myplug->ext, name, root, conf, stream, mode);</div> <div class="line"> <span class="keywordflow">if</span> (err < 0) {</div> <div class="line"> myplug_free(myplug);</div> <div class="line"> <span class="keywordflow">return</span> err;</div> <div class="line"> }</div> <div class="line"></div> <div class="line"> *pcmp = myplug->ext.pcm;</div> <div class="line"> <span class="keywordflow">return</span> 0;</div> <div class="line">}</div> <div class="line"></div> <div class="line"><a class="code" href="group___plugin___s_d_k.html#ga73a613cc5b7b3642f53bbd5a1d78004b">SND_PCM_PLUGIN_SYMBOL</a>(myplug);</div> </div><!-- fragment --><p>Read the codes in alsa-plugins package for the real examples.</p> <h1><a class="anchor" id="pcm_extplug"></a> External Plugin: Filter-Type Plugin</h1> <p>The filter-type plugin is a plugin to convert the PCM signals from the input and feeds to the output. Thus, this plugin always needs a slave PCM as its output.</p> <p>The plugin can modify the format and the channels of the input/output PCM. It can <em>not</em> modify the sample rate (because of simplicity reason).</p> <p>The following fields have to be filled in extplug record before calling <a class="el" href="group___p_c_m___ext_plug.html#gab0b27889f74c83cd033062981320fd62" title="Create an extplug instance. ">snd_pcm_extplug_create()</a> : version, name, callback. Otherfields are optional and should be initialized with zero.</p> <p>The constant <a class="el" href="group___p_c_m___ext_plug.html#ga24d0ae71d106f08685d9ba8c6cf5fe78">SND_PCM_EXTPLUG_VERSION</a> must be passed to the version field for the version check in alsa-lib. A non-NULL ASCII string has to be passed to the name field. The callback field contains the table of callback functions for this plugin (defined as <a class="el" href="group___p_c_m___ext_plug.html#ga0c554fce3192586b7a5ff51d45272f44">snd_pcm_extplug_callback_t</a>).</p> <p>The driver can set an arbitrary value (pointer) to private_data field to refer its own data in the callbacks.</p> <p>The rest fields are filled by <a class="el" href="group___p_c_m___ext_plug.html#gab0b27889f74c83cd033062981320fd62" title="Create an extplug instance. ">snd_pcm_extplug_create()</a>. The pcm field is the resultant PCM handle. The others are the current status of the PCM.</p> <p>The callback functions in <a class="el" href="group___p_c_m___ext_plug.html#ga0c554fce3192586b7a5ff51d45272f44">snd_pcm_extplug_callback_t</a> define the real behavior of the driver. At least, transfer callback must be given. This callback is called at each time certain size of data block is transfered to the slave PCM. Other callbacks are optional.</p> <p>The close callback is called when the PCM is closed. If the plugin allocates private resources, this is the place to release them again. The hw_params and hw_free callbacks are called at <a class="el" href="group___p_c_m.html#ga1ca0dc120a484965e26cabf966502330" title="Install one PCM hardware configuration chosen from a configuration space and snd_pcm_prepare it...">snd_pcm_hw_params()</a> and <a class="el" href="group___p_c_m.html#ga242ad0a269c272830d30666220edbc2a" title="Remove PCM hardware configuration and free associated resources. ">snd_pcm_hw_free()</a> API calls, respectively. The last, dump callback, is called for printing the information of the given plugin.</p> <p>The init callback is called when the PCM is at prepare state or any initialization is issued. Use this callback to reset the PCM instance to a sane initial state.</p> <p>The hw_params constraints can be defined via either <a class="el" href="group___p_c_m___ext_plug.html#gabef139bbe5db265433fd5310d0faad4d" title="Set master parameter as the min/max values. ">snd_pcm_extplug_set_param_minmax()</a> and <a class="el" href="group___p_c_m___ext_plug.html#gadbf27adba1a7cd0195b6ac750bb11bf7" title="Set master parameter as the list. ">snd_pcm_extplug_set_param_list()</a> functions after calling <a class="el" href="group___p_c_m___ext_plug.html#gab0b27889f74c83cd033062981320fd62" title="Create an extplug instance. ">snd_pcm_extplug_create()</a>. The former defines the minimal and maximal acceptable values for the given hw_params parameter (SND_PCM_EXTPLUG_HW_XXX). This function can't be used for the format parameter. The latter function specifies the available parameter values as the list. As mentioned above, the rate can't be changed. Only changeable parameters are sample format and channels.</p> <p>To define the constraints of the slave PCM configuration, use either <a class="el" href="group___p_c_m___ext_plug.html#gad3cac0ee15293f349220a75cce69a51e" title="Set slave parameter as the min/max values. ">snd_pcm_extplug_set_slave_param_minmax()</a> and <a class="el" href="group___p_c_m___ext_plug.html#gad14f6746e36d556c7a7937633b965ca7" title="Set slave parameter as the list. ">snd_pcm_extplug_set_slave_param_list()</a>. The arguments are as same as former functions.</p> <p>To clear the parameter constraints, call <a class="el" href="group___p_c_m___ext_plug.html#gacef181565eb697397ce41c1aab381777" title="Reset extplug parameters. ">snd_pcm_extplug_params_reset()</a> function.</p> <p>When using snd_pcm_extplug_set_param_*() or snd_pcm_extplug_set_slave_param_*() for any parameter. This parameter is no longer linked between the client and slave PCM. Therefore it could differ and the extplug has to support conversion between all valid parameter configurations. To keep the client and slave parameter linked <a class="el" href="group___p_c_m___ext_plug.html#gadfb6033cad31a9d4fb5f76c2a0edd20d" title="Keep the client and slave format/channels the same if requested. This is for example useful if this e...">snd_pcm_extplug_set_param_link()</a> can be used for the corresponding parameter. For example if the extplug does not support channel nor format conversion the supported client parameters can be limited with snd_pcm_extplug_set_param_*() and afterwards #snd_pcm_extplug_set_param_link(ext, SND_PCM_EXTPLUG_HW_FORMAT, 1) and #snd_pcm_extplug_set_param_link(ext, SND_PCM_EXTPLUG_HW_CHANNELS, 1) should be called to keep the client and slave parameters the same.</p> <h1><a class="anchor" id="pcm_ioplug"></a> External Plugin: I/O Plugin</h1> <p>The I/O-type plugin is a PCM plugin to work as the input or output terminal point, i.e. as a user-space PCM driver.</p> <p>The new plugin is created via <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a> function. The first argument is a pointer of the pluging information. Some of this struct must be initialized in prior to call <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a>. Then the function fills other fields in return. The rest arguments, name, stream and mode, are usually identical with the values passed from the ALSA plugin constructor.</p> <p>The following fields are mandatory: version, name, callback. Otherfields are optional and should be initialized with zero.</p> <p>The constant <a class="el" href="group___p_c_m___i_o_plug.html#ga81a2273c4df9be29d91e6e2a0860d991">SND_PCM_IOPLUG_VERSION</a> must be passed to the version field for the version check in alsa-lib. A non-NULL ASCII string has to be passed to the name field. The callback field contains the table of callback functions for this plugin (defined as <a class="el" href="group___p_c_m___i_o_plug.html#ga9bbf2927f689c96faa7b6c5c89286355">snd_pcm_ioplug_callback_t</a>).</p> <p>flags field specifies the optional bit-flags. poll_fd and poll_events specify the poll file descriptor and the corresponding poll events (POLLIN, POLLOUT) for the plugin. If the plugin requires multiple poll descriptors or poll descriptor(s) dynamically varying, set poll_descriptors and poll_descriptors_count callbacks to the callback table. Then the poll_fd and poll_events field are ignored.</p> <p>mmap_rw specifies whether the plugin behaves in the pseudo mmap mode. When this value is set to 1, the plugin creates always a local buffer and performs read/write calls using this buffer as if it's mmapped. The address of local buffer can be obtained via <a class="el" href="group___p_c_m___i_o_plug.html#gac3b666ff286745c9eb24de3e3930970a" title="Get mmap area of ioplug. ">snd_pcm_ioplug_mmap_areas()</a> function. When poll_fd, poll_events and mmap_rw fields are changed after <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a>, call <a class="el" href="group___p_c_m___i_o_plug.html#gab223893226ecf78f675c89959a8c421a" title="Reinitialize the poll and mmap status. ">snd_pcm_ioplug_reinit_status()</a> to reflect the changes.</p> <p>The driver can set an arbitrary value (pointer) to private_data field to refer its own data in the callbacks.</p> <p>The rest fields are filled by <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a>. The pcm field is the resultant PCM handle. The others are the current status of the PCM.</p> <p>The callback functions in <a class="el" href="group___p_c_m___i_o_plug.html#ga9bbf2927f689c96faa7b6c5c89286355">snd_pcm_ioplug_callback_t</a> define the real behavior of the driver. At least, start, stop and pointer callbacks must be given. Other callbacks are optional. The start and stop callbacks are called when the PCM stream is started and stopped, repsectively. The pointer callback returns the current DMA position, which may be called at any time.</p> <p>The transfer callback is called when any data transfer happens. It receives the area array, offset and the size to transfer. The area array contains the array of <a class="el" href="structsnd__pcm__channel__area__t.html">snd_pcm_channel_area_t</a> with the elements of number of channels.</p> <p>When the PCM is closed, close callback is called. If the driver allocates any internal buffers, they should be released in this callback. The hw_params and hw_free callbacks are called when hw_params are set and reset, respectively. Note that they may be called multiple times according to the application. Similarly, sw_params callback is called when sw_params is set or changed.</p> <p>The prepare, drain, pause and resume callbacks are called when <a class="el" href="group___p_c_m.html#ga788d05de75f2d536f8443cb0306754d0" title="Prepare PCM for use. ">snd_pcm_prepare()</a>, <a class="el" href="group___p_c_m.html#ga49afc5b8527f30c33fafa476533c9f86" title="Stop a PCM preserving pending frames. ">snd_pcm_drain()</a>, <a class="el" href="group___p_c_m.html#gad711b582c7066bd4fffa1d08a04316b5" title="Pause/resume PCM. ">snd_pcm_pause()</a>, and <a class="el" href="group___p_c_m.html#ga13083ce2209aab9ea73831610bc61ab1" title="Resume from suspend, no samples are lost. ">snd_pcm_resume()</a> are called. The poll_descriptors_count and poll_descriptors callbacks are used to return the multiple or dynamic poll descriptors as mentioned above. The poll_revents callback is used to modify poll events. If the driver needs to mangle the native poll events to proper poll events for PCM, you can do it in this callback.</p> <p>Finally, the dump callback is used to print the status of the plugin.</p> <p>Note that some callbacks (start, stop, pointer, transfer and pause) may be called inside the internal pthread mutex, and they shouldn't call the PCM functions again unnecessarily from the callback itself; otherwise it may lead to a deadlock.</p> <p>The hw_params constraints can be defined via either <a class="el" href="group___p_c_m___i_o_plug.html#gab62d470b02661214319196394b55fb37" title="Set parameter as the min/max values. ">snd_pcm_ioplug_set_param_minmax()</a> and <a class="el" href="group___p_c_m___i_o_plug.html#ga7d713552fb846ccdf4b7ec6a9fc1b562" title="Set parameter as the list. ">snd_pcm_ioplug_set_param_list()</a> functions after calling <a class="el" href="group___p_c_m___i_o_plug.html#ga7fb5213a5e776246e2b4dc53ec8d7604" title="Create an ioplug instance. ">snd_pcm_ioplug_create()</a>. The former defines the minimal and maximal acceptable values for the given hw_params parameter (SND_PCM_IOPLUG_HW_XXX). This function can't be used for the format parameter. The latter function specifies the available parameter values as the list.</p> <p>To clear the parameter constraints, call <a class="el" href="group___p_c_m___i_o_plug.html#gad74355dfaa56fae80d49181c83eeecc4" title="Reset ioplug parameters. ">snd_pcm_ioplug_params_reset()</a> function. </p> </div></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>