blob: 1275db39b0a9cbca8e8c9b480d09ee2e791486a6 [file] [log] [blame]
codeworkxf1be2fe2012-03-24 17:38:29 +01001/*
2 * Copyright@ Samsung Electronics Co. LTD
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#ifndef _AUDIO_H_
18#define _AUDIO_H_
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#ifndef __HDMI_AUDIO_HDMIAUDIOPORT__
25#define __HDMI_AUDIO_HDMIAUDIOPORT__
26/**
27 * @enum HDMIAudioPort
28 * Available audio inputs on HDMI HW module.
29 */
30enum HDMIAudioPort {
31 /** I2S input port */
32 I2S_PORT,
33 /** SPDIF input port */
34 SPDIF_PORT,
35 /** DSD input port */
36 DSD_PORT,
37};
38#endif /* __HDMI_AUDIO_HDMIAUDIOPORT__ */
39
40#ifndef __HDMI_AUDIO_AUDIOFORMAT__
41#define __HDMI_AUDIO_AUDIOFORMAT__
42/**
43 * @enum AudioFormat
44 * The encoding format of audio stream
45 */
46enum AudioFormat {
47 /** LPCM encoding format */
48 LPCM_FORMAT = 1,
49 /** AC3 encoding format */
50 AC3_FORMAT,
51 /** MPEG1 encoding format */
52 MPEG1_FORMAT,
53 /** MP3 encoding format */
54 MP3_FORMAT,
55 /** MPEG2 encoding format */
56 MPEG2_FORMAT,
57 /** AAC encoding format */
58 AAC_FORMAT,
59 /** DTS encoding format */
60 DTS_FORMAT,
61 /** ATRAC encoding format */
62 ATRAC_FORMAT,
63 /** DSD encoding format */
64 DSD_FORMAT,
65 /** Dolby Digital+ encoding format */
66 Dolby_Digital_Plus_FORMAT,
67 /** DTS HD encoding format */
68 DTS_HD_FORMAT,
69 /** MAT encoding format */
70 MAT_FORMAT,
71 /** DST encoding format */
72 DST_FORMAT,
73 /** WAM_Pro encoding format */
74 WAM_Pro_FORMAT
75};
76#endif /* __HDMI_AUDIO_AUDIOFORMAT__ */
77
78#ifndef __HDMI_AUDIO_LPCMWORDLENGTH__
79#define __HDMI_AUDIO_LPCMWORDLENGTH__
80/**
81 * @enum LPCM_WordLen
82 * Word length of LPCM audio stream.
83 */
84enum LPCM_WordLen {
85 /** 16bit word length */
86 WORD_16 = 0,
87 /** 17bit word length */
88 WORD_17,
89 /** 18bit word length */
90 WORD_18,
91 /** 19bit word length */
92 WORD_19,
93 /** 20bit word length */
94 WORD_20,
95 /** 21bit word length */
96 WORD_21,
97 /** 22bit word length */
98 WORD_22,
99 /** 23bit word length */
100 WORD_23,
101 /** 24bit word length */
102 WORD_24
103};
104#endif /* __HDMI_AUDIO_LPCMWORDLENGTH__ */
105
106#ifndef __HDMI_AUDIO_SAMPLINGFREQUENCY__
107#define __HDMI_AUDIO_SAMPLINGFREQUENCY__
108/**
109 * @enum SamplingFreq
110 * Sampling frequency of audio stream.
111 */
112enum SamplingFreq {
113 /** 32KHz sampling frequency */
114 SF_32KHZ = 0,
115 /** 44.1KHz sampling frequency */
116 SF_44KHZ,
117 /** 48KHz sampling frequency */
118 SF_48KHZ,
119 /** 88.2KHz sampling frequency */
120 SF_88KHZ,
121 /** 96KHz sampling frequency */
122 SF_96KHZ,
123 /** 176.4KHz sampling frequency */
124 SF_176KHZ,
125 /** 192KHz sampling frequency */
126 SF_192KHZ
127};
128#endif /* __HDMI_AUDIO_SAMPLINGFREQUENCY__ */
129
130#ifndef __HDMI_AUDIO_CHANNELNUMBER__
131#define __HDMI_AUDIO_CHANNELNUMBER__
132/**
133 * @enum ChannelNum
134 * Channel number of audio stream.
135 */
136enum ChannelNum {
137 /** 2 channel audio stream */
138 CH_2 = 2,
139 /** 3 channel audio stream */
140 CH_3,
141 /** 4 channel audio stream */
142 CH_4,
143 /** 5 channel audio stream */
144 CH_5,
145 /** 6 channel audio stream */
146 CH_6,
147 /** 7 channel audio stream */
148 CH_7,
149 /** 8 channel audio stream */
150 CH_8,
151};
152#endif /* __HDMI_AUDIO_CHANNELNUMBER__ */
153
154#ifndef __HDMI_AUDIO_AUDIOSAMPLEPACKETTYPE__
155#define __HDMI_AUDIO_AUDIOSAMPLEPACKETTYPE__
156/**
157 * @enum HDMIASPType
158 * Type of HDMI audio sample packet
159 */
160enum HDMIASPType {
161 /** Audio Sample Packet Type */
162 HDMI_ASP,
163 /** One Bit Audio Packet Type */
164 HDMI_DSD,
165 /** High Bit Rate Packet Type */
166 HDMI_HBR,
167 /** DST Packet Type */
168 HDMI_DST
169};
170#endif /* __HDMI_AUDID_AUDIOSAMPLEPACKETTYPE__ */
171
172#ifndef __HDMI_AUDIO_I2S_CUV_AUDIO_CODING_TYPE__
173#define __HDMI_AUDIO_I2S_CUV_AUDIO_CODING_TYPE__
174/**
175 * @enum CUVAudioCoding
176 * Audio coding type information for CUV fields.
177 */
178enum CUVAudioCoding {
179 /** Linear PCM coding type */
180 CUV_LPCM,
181 /** Non-linear PCM coding type */
182 CUV_NLPCM
183};
184#endif /* __HDMI_AUDIO_I2S_CUV_AUDIO_CODING_TYPE__ */
185
186#ifndef __HDMI_AUDIO_SPDIF_AUDIO_CODING_TYPE__
187#define __HDMI_AUDIO_SPDIF_AUDIO_CODING_TYPE__
188/**
189 * @enum SPDIFAudioCoding
190 * Audio coding type information for SPDIF input port.
191 */
192enum SPDIFAudioCoding {
193 /** Linear PCM coding type */
194 SPDIF_LPCM,
195 /** Non-linear PCM coding type */
196 SPDIF_NLPCM
197};
198#endif /* __HDMI_AUDIO_SPDIF_AUDIO_CODING_TYPE__ */
199
200#ifndef __HDMI_AUDIO_I2S_CUV_CHANNEL_NUMBER__
201#define __HDMI_AUDIO_I2S_CUV_CHANNEL_NUMBER__
202/**
203 * @enum CUVChannelNumber
204 * Channel number information for CUV fields.
205 */
206enum CUVChannelNumber {
207 /** Unknown channel audio stream */
208 CUV_CH_UNDEFINED = 0,
209 /** 1 channel audio stream */
210 CUV_CH_01,
211 /** 2 channel audio stream */
212 CUV_CH_02,
213 /** 3 channel audio stream */
214 CUV_CH_03,
215 /** 4 channel audio stream */
216 CUV_CH_04,
217 /** 5 channel audio stream */
218 CUV_CH_05,
219 /** 6 channel audio stream */
220 CUV_CH_06,
221 /** 7 channel audio stream */
222 CUV_CH_07,
223 /** 8 channel audio stream */
224 CUV_CH_08,
225 /** 9 channel audio stream */
226 CUV_CH_09,
227 /** 10 channel audio stream */
228 CUV_CH_10,
229 /** 11 channel audio stream */
230 CUV_CH_11,
231 /** 12 channel audio stream */
232 CUV_CH_12,
233 /** 13 channel audio stream */
234 CUV_CH_13,
235 /** 14 channel audio stream */
236 CUV_CH_14,
237 /** 15 channel audio stream */
238 CUV_CH_15,
239};
240#endif /* __HDMI_AUDIO_I2S_CUV_CHANNEL_NUMBER__ */
241
242#ifndef __HDMI_AUDIO_I2S_CUV_WORD_LENGTH__
243#define __HDMI_AUDIO_I2S_CUV_WORD_LENGTH__
244/**
245 * @enum CUVWordLength
246 * Word length information of LPCM audio stream for CUV fields.
247 */
248enum CUVWordLength {
249 /** Max word length is 20 bits, number of valid bits is not defined */
250 CUV_WL_20_NOT_DEFINED,
251 /** Max word length is 20 bits, 16 bits are valid */
252 CUV_WL_20_16,
253 /** Max word length is 20 bits, 18 bits are valid */
254 CUV_WL_20_18,
255 /** Max word length is 20 bits, 19 bits are valid */
256 CUV_WL_20_19,
257 /** Max word length is 20 bits, 20 bits are valid */
258 CUV_WL_20_20,
259 /** Max word length is 20 bits, 17 bits are valid */
260 CUV_WL_20_17,
261 /** Max word length is 24 bits, number of valid bits is not defined */
262 CUV_WL_24_NOT_DEFINED,
263 /** Max word length is 24 bits, 20 bits are valid */
264 CUV_WL_24_20,
265 /** Max word length is 24 bits, 22 bits are valid */
266 CUV_WL_24_22,
267 /** Max word length is 24 bits, 23 bits are valid */
268 CUV_WL_24_23,
269 /** Max word length is 24 bits, 24 bits are valid */
270 CUV_WL_24_24,
271 /** Max word length is 24 bits, 21 bits are valid */
272 CUV_WL_24_21,
273};
274#endif /* __HDMI_AUDIO_I2S_CUV_WORD_LENGTH__ */
275
276#ifndef __HDMI_AUDIO_I2S_BITS_PER_CHANNEL__
277#define __HDMI_AUDIO_I2S_BITS_PER_CHANNEL__
278
279/**
280 * @enum I2SBitsPerChannel
281 * Serial data bit per channel in I2S audio stream.
282 */
283enum I2SBitsPerChannel {
284 /** 16 bits per channel */
285 I2S_BPC_16,
286 /** 20 bits per channel */
287 I2S_BPC_20,
288 /** 24 bits per channel */
289 I2S_BPC_24
290};
291
292#endif /* __HDMI_AUDIO_I2S_BITS_PER_CHANNEL__ */
293
294#ifndef __HDMI_AUDIO_I2S_DATA_FORMAT__
295#define __HDMI_AUDIO_I2S_DATA_FORMAT__
296
297/**
298 * @enum I2SDataFormat
299 * Foramt of data in I2S audio stream.
300 */
301enum I2SDataFormat {
302 /** Basic format */
303 I2S_BASIC,
304 /** Left justified format */
305 I2S_LEFT_JUSTIFIED,
306 /** Right justified format */
307 I2S_RIGHT_JUSTIFIED
308};
309
310#endif /* __HDMI_AUDIO_I2S_DATA_FORMAT__ */
311
312#ifndef __HDMI_AUDIO_I2S_CLOCK_PER_FRAME__
313#define __HDMI_AUDIO_I2S_CLOCK_PER_FRAME__
314
315/**
316 * @enum I2SClockPerFrame
317 * Bit clock per Frame in I2S audio stream.
318 */
319enum I2SClockPerFrame {
320 /** 32 clock per Frame */
321 I2S_32FS,
322 /** 48 clock per Frame */
323 I2S_48FS,
324 /** 64 clock per Frame */
325 I2S_64FS
326};
327
328#endif /* __HDMI_AUDIO_I2S_CLOCK_PER_FRAME__ */
329
330#ifndef __HDMI_AUDIO_I2S_PARAMETER__
331#define __HDMI_AUDIO_I2S_PARAMETER__
332
333//! Structure for I2S audio stream
334struct I2SParameter {
335 enum I2SBitsPerChannel bpc;
336 enum I2SDataFormat format;
337 enum I2SClockPerFrame clk;
338};
339#endif /* __HDMI_AUDIO_I2S_PARAMETER__ */
340
341//! Structure for HDMI audio input
342struct HDMIAudioParameter {
343 /** Input audio port to HDMI HW */
344 enum HDMIAudioPort inputPort;
345 /** Output Packet type **/
346 enum HDMIASPType outPacket;
347 /** Encoding format */
348 enum AudioFormat formatCode;
349 /** Channel number */
350 enum ChannelNum channelNum;
351 /** Sampling frequency */
352 enum SamplingFreq sampleFreq;
353 /** Word length. This is avaliable only if LPCM encoding format */
354 enum LPCM_WordLen wordLength;
355 /** structure for I2S audio stream */
356 struct I2SParameter i2sParam;
357};
358
359#ifdef __cplusplus
360}
361#endif
362
363#endif // _AUDIO_H_