1 /*
2 * Copyright (c) 2015-2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
3 *
4 * This is free software: you can redistribute it and/or modify
5 * it under the terms of the Artistic License 2.0 as published by
6 * The Perl Foundation.
7 *
8 * This source is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * Artistic License 2.0 for more details.
12 *
13 * You should have received a copy of the Artistic License 2.0
14 * along the source as a COPYING file. If not, obtain it from
15 * http://www.perlfoundation.org/artistic_license_2_0.
16 */
17
18 #include <pcmi.h>
19 #include <zita-alsa-pcmi.h>
20
21 pcmi_t *
pcmi_new(const char * play_name,const char * capt_name,uint32_t srate,uint32_t frsize,uint32_t nfrags,bool twochan,bool debug)22 pcmi_new(const char *play_name, const char *capt_name, uint32_t srate,
23 uint32_t frsize, uint32_t nfrags, bool twochan, bool debug)
24 {
25 unsigned int opts = 0;
26 if(debug)
27 opts |= Alsa_pcmi::DEBUG_ALL;
28 if(twochan) // force 2 channels
29 opts |= Alsa_pcmi::FORCE_2CH;
30
31 Alsa_pcmi *_pcmi = new Alsa_pcmi(play_name, capt_name, NULL,
32 srate, frsize, nfrags, opts);
33 if(_pcmi->state())
34 {
35 delete _pcmi;
36 return NULL;
37 }
38
39 return (pcmi_t *)_pcmi;
40 }
41
42 void
pcmi_free(pcmi_t * pcmi)43 pcmi_free(pcmi_t *pcmi)
44 {
45 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
46
47 delete _pcmi;
48 }
49
50 void
pcmi_printinfo(pcmi_t * pcmi)51 pcmi_printinfo(pcmi_t *pcmi)
52 {
53 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
54
55 _pcmi->printinfo();
56 }
57
58 int
pcmi_ncapt(pcmi_t * pcmi)59 pcmi_ncapt(pcmi_t *pcmi)
60 {
61 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
62
63 return _pcmi->ncapt();
64 }
65
66 int
pcmi_nplay(pcmi_t * pcmi)67 pcmi_nplay(pcmi_t *pcmi)
68 {
69 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
70
71 return _pcmi->nplay();
72 }
73
74 void
pcmi_pcm_start(pcmi_t * pcmi)75 pcmi_pcm_start(pcmi_t *pcmi)
76 {
77 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
78
79 _pcmi->pcm_start();
80 }
81
82 int
pcmi_pcm_wait(pcmi_t * pcmi)83 pcmi_pcm_wait(pcmi_t *pcmi)
84 {
85 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
86
87 return _pcmi->pcm_wait();
88 }
89
90 int
pcmi_pcm_idle(pcmi_t * pcmi,uint32_t frsize)91 pcmi_pcm_idle(pcmi_t *pcmi, uint32_t frsize)
92 {
93 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
94
95 return _pcmi->pcm_idle(frsize);
96 }
97
98 void
pcmi_pcm_stop(pcmi_t * pcmi)99 pcmi_pcm_stop(pcmi_t *pcmi)
100 {
101 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
102
103 _pcmi->pcm_stop();
104 }
105
106 void
pcmi_capt_init(pcmi_t * pcmi,uint32_t frsize)107 pcmi_capt_init(pcmi_t *pcmi, uint32_t frsize)
108 {
109 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
110
111 _pcmi->capt_init(frsize);
112 }
113
114 void
pcmi_capt_chan(pcmi_t * pcmi,uint32_t channel,float * dst,uint32_t frsize)115 pcmi_capt_chan(pcmi_t *pcmi, uint32_t channel, float *dst, uint32_t frsize)
116 {
117 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
118
119 _pcmi->capt_chan(channel, dst, frsize);
120 }
121
122 void
pcmi_capt_done(pcmi_t * pcmi,uint32_t frsize)123 pcmi_capt_done(pcmi_t *pcmi, uint32_t frsize)
124 {
125 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
126
127 _pcmi->capt_done(frsize);
128 }
129
130 void
pcmi_play_init(pcmi_t * pcmi,uint32_t frsize)131 pcmi_play_init(pcmi_t *pcmi, uint32_t frsize)
132 {
133 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
134
135 _pcmi->play_init(frsize);
136 }
137
138 void
pcmi_clear_chan(pcmi_t * pcmi,uint32_t channel,uint32_t frsize)139 pcmi_clear_chan(pcmi_t *pcmi, uint32_t channel, uint32_t frsize)
140 {
141 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
142
143 _pcmi->clear_chan(channel, frsize);
144 }
145
146 void
pcmi_play_chan(pcmi_t * pcmi,uint32_t channel,const float * src,uint32_t frsize)147 pcmi_play_chan(pcmi_t *pcmi, uint32_t channel, const float *src, uint32_t frsize)
148 {
149 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
150
151 _pcmi->play_chan(channel, src, frsize);
152 }
153
154 void
pcmi_play_done(pcmi_t * pcmi,uint32_t frsize)155 pcmi_play_done(pcmi_t *pcmi, uint32_t frsize)
156 {
157 Alsa_pcmi *_pcmi = (Alsa_pcmi *)pcmi;
158
159 _pcmi->play_done(frsize);
160 }
161