xref: /haiku/src/apps/cortex/addons/AudioAdapter/AudioAdapterParams.cpp (revision ed24eb5ff12640d052171c6a7feba37fab8a75d1)
1 /*
2  * Copyright (c) 1999-2000, Eric Moon.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions, and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions, and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 
32 // AudioAdapterParams.cpp
33 
34 #include "AudioAdapterParams.h"
35 
36 #include <Catalog.h>
37 #include <Debug.h>
38 #include <ParameterWeb.h>
39 
40 #undef B_TRANSLATION_CONTEXT
41 #define B_TRANSLATION_CONTEXT "CortexAudioAdapter"
42 
43 status_t
44 _AudioAdapterParams::store(int32 parameterID, const void* data, size_t size)
45 {
46 	if (size < sizeof(int32))
47 		return B_NO_MEMORY;
48 
49 	const uint32 d = *(uint32*)data;
50 
51 	switch (parameterID) {
52 		// input format restrictions (0='wildcard')
53 		case P_INPUT_FORMAT:
54 			inputFormat.format = d;
55 			break;
56 
57 		case P_INPUT_CHANNEL_COUNT:
58 			inputFormat.channel_count = d;
59 			break;
60 
61 		// output format restrictions (0='wildcard')
62 		case P_OUTPUT_FORMAT:
63 			outputFormat.format = d;
64 			break;
65 
66 		case P_OUTPUT_CHANNEL_COUNT:
67 			outputFormat.channel_count = d;
68 			break;
69 
70 		default:
71 			return B_BAD_INDEX;
72 	}
73 
74 	return B_OK;
75 }
76 
77 status_t _AudioAdapterParams::retrieve(
78 	int32										parameterID,
79 	void*										data,
80 	size_t*									ioSize) {
81 
82 	if(*ioSize < sizeof(int32)) {
83 		*ioSize = sizeof(int32);
84 		return B_NO_MEMORY;
85 	}
86 
87 	switch(parameterID) {
88 		// input format restrictions (0='wildcard')
89 		case P_INPUT_FORMAT:
90 			*(uint32*)data = inputFormat.format;
91 			break;
92 
93 		case P_INPUT_CHANNEL_COUNT:
94 			*(uint32*)data = inputFormat.channel_count;
95 			break;
96 
97 		// output format restrictions (0='wildcard')
98 		case P_OUTPUT_FORMAT:
99 			*(uint32*)data = outputFormat.format;
100 			PRINT(("P_OUTPUT_FORMAT retrieved\n")); //+++++
101 			break;
102 
103 		case P_OUTPUT_CHANNEL_COUNT:
104 			*(uint32*)data = outputFormat.channel_count;
105 			break;
106 
107 		default:
108 			return B_BAD_INDEX;
109 	}
110 
111 	return B_OK;
112 }
113 
114 void _AudioAdapterParams::populateGroup(
115 	BParameterGroup* 				group) {
116 
117 	BParameterGroup* inputGroup = group->MakeGroup(B_TRANSLATE("Input format"));
118 
119 	BNullParameter* groupName;
120 	BDiscreteParameter* param;
121 
122 	groupName = inputGroup->MakeNullParameter(
123 		0, B_MEDIA_NO_TYPE, B_TRANSLATE("Input format"), B_GENERIC);
124 
125 	param = inputGroup->MakeDiscreteParameter(
126 		P_INPUT_FORMAT,
127 		B_MEDIA_NO_TYPE,
128 		B_TRANSLATE("Sample format:"),
129 		B_GENERIC);
130 	param->AddItem(
131 		0,
132 		"*");
133 	param->AddItem(
134 		media_multi_audio_format::B_AUDIO_FLOAT,
135 		"float");
136 	param->AddItem(
137 		media_multi_audio_format::B_AUDIO_SHORT,
138 		"short");
139 	param->AddItem(
140 		media_multi_audio_format::B_AUDIO_INT,
141 		"int32");
142 	param->AddItem(
143 		media_multi_audio_format::B_AUDIO_UCHAR,
144 		"uint8");
145 
146 	param = inputGroup->MakeDiscreteParameter(
147 		P_INPUT_CHANNEL_COUNT,
148 		B_MEDIA_NO_TYPE,
149 		B_TRANSLATE("Channels:"),
150 		B_GENERIC);
151 	param->AddItem(
152 		0,
153 		"*");
154 	param->AddItem(
155 		1,
156 		B_TRANSLATE("mono"));
157 	param->AddItem(
158 		2,
159 		B_TRANSLATE("stereo"));
160 	param->AddItem(
161 		4,
162 		"4");
163 	param->AddItem(
164 		8,
165 		"8");
166 
167 	BParameterGroup* outputGroup = group->MakeGroup(B_TRANSLATE("Output format"));
168 
169 	groupName = outputGroup->MakeNullParameter(
170 		0, B_MEDIA_NO_TYPE, B_TRANSLATE("Output format"), B_GENERIC);
171 
172 	param = outputGroup->MakeDiscreteParameter(
173 		P_OUTPUT_FORMAT,
174 		B_MEDIA_NO_TYPE,
175 		B_TRANSLATE("Sample format:"),
176 		B_GENERIC);
177 	param->AddItem(
178 		0,
179 		"*");
180 	param->AddItem(
181 		media_multi_audio_format::B_AUDIO_FLOAT,
182 		"float");
183 	param->AddItem(
184 		media_multi_audio_format::B_AUDIO_SHORT,
185 		"short");
186 	param->AddItem(
187 		media_multi_audio_format::B_AUDIO_INT,
188 		"int32");
189 	param->AddItem(
190 		media_multi_audio_format::B_AUDIO_UCHAR,
191 		"uint8");
192 
193 	param = outputGroup->MakeDiscreteParameter(
194 		P_OUTPUT_CHANNEL_COUNT,
195 		B_MEDIA_NO_TYPE,
196 		B_TRANSLATE("Channels:"),
197 		B_GENERIC);
198 	param->AddItem(
199 		0,
200 		"*");
201 	param->AddItem(
202 		1,
203 		B_TRANSLATE("mono"));
204 	param->AddItem(
205 		2,
206 		B_TRANSLATE("stereo"));
207 	param->AddItem(
208 		4,
209 		"4");
210 	param->AddItem(
211 		8,
212 		"8");
213 }
214 
215 // END -- AudioAdapterParams.cpp
216 
217