1/*
2 INTEL CONFIDENTIAL
3 Copyright 2009 Intel Corporation All Rights Reserved.
4 The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
5
6 No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
7*/
8
9#ifndef __MIX_ACP_AAC_H__
10#define __MIX_ACP_AAC_H__
11
12#include "mixacp.h"
13
14/**
15 * MIX_TYPE_AUDIOCONFIGPARAMSAAC:
16 *
17 * Get type of class.
18 */
19#define MIX_TYPE_AUDIOCONFIGPARAMSAAC (mix_acp_aac_get_type ())
20
21/**
22 * MIX_AUDIOCONFIGPARAMSAAC:
23 * @obj: object to be type-casted.
24 *
25 * Type casting
26 */
27#define MIX_AUDIOCONFIGPARAMSAAC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAAC))
28
29/**
30 * MIX_IS_AUDIOCONFIGPARAMSAAC:
31 * @obj: an object.
32 *
33 * Checks if the given object is an instance of #MixAudioConfigParams
34 */
35#define MIX_IS_AUDIOCONFIGPARAMSAAC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC))
36
37/**
38 * MIX_AUDIOCONFIGPARAMSAAC_CLASS:
39 * @klass: class to be type-casted.
40 *
41 * Type Casting.
42 */
43#define MIX_AUDIOCONFIGPARAMSAAC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAACClass))
44
45/**
46 * MIX_IS_AUDIOCONFIGPARAMSAAC_CLASS:
47 * @klass: a class.
48 *
49 * Checks if the given class is #MixAudioConfigParamsClass
50 */
51#define MIX_IS_AUDIOCONFIGPARAMSAAC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMSAAC))
52
53/**
54 * MIX_AUDIOCONFIGPARAMSAAC_GET_CLASS:
55 * @obj: a #MixAudioConfigParams object.
56 *
57 * Get the class instance of the object.
58 */
59#define MIX_AUDIOCONFIGPARAMSAAC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAACClass))
60
61typedef struct _MixAudioConfigParamsAAC        MixAudioConfigParamsAAC;
62typedef struct _MixAudioConfigParamsAACClass   MixAudioConfigParamsAACClass;
63
64/**
65 * MixAACBitrateType:
66 * @MIX_AAC_BR_NULL: Undefined bit rate type.
67 * @MIX_AAC_BR_CONSTANT: Constant bit rate.
68 * @MIX_AAC_BR_VARIABLE: Variable bit rate.
69 * @MIX_AAC_BR_LAST: last entry.
70 *
71 * Types of bitrate in AAC.
72 */
73typedef enum {
74  MIX_AAC_BR_NULL=-1,
75  MIX_AAC_BR_CONSTANT=0,
76  MIX_AAC_BR_VARIABLE,
77  MIX_AAC_BR_LAST
78} MixAACBitrateType;
79
80/**
81 * MixAACBitstreamFormt:
82 * @MIX_AAC_BS_NULL: Undefined bitstream format.
83 * @MIX_AAC_BS_ADTS: Bitstream is in ADTS format.
84 * @MIX_AAC_BS_ADIF: Bitstream is in ADIF format.
85 * @MIX_AAC_BS_RAW: Bitstream is in raw format.
86 * @MIX_AAC_BS_LAST: Last entry.
87 *
88 * AAC bitstream format.
89 */
90typedef enum {
91  MIX_AAC_BS_NULL=-1,
92  MIX_AAC_BS_ADTS=0,
93  MIX_AAC_BS_ADIF,
94  MIX_AAC_BS_RAW,
95  MIX_AAC_BS_LAST
96} MixAACBitstreamFormt;
97
98/**
99 * MixAACProfile:
100 * @MIX_AAC_PROFILE_NULL: Undefined profile.
101 * @MIX_AAC_PROFILE_MAIN: <emphasis>Not Supported</emphasis> AAC Main profile.
102 * @MIX_AAC_PROFILE_LC: AAC-LC profile, including support of SBR and PS tool.
103 * @MIX_AAC_PROFILE_SSR: <emphasis>Not Supported</emphasis> SSR profile.
104 * @MIX_AAC_PROFILE_LAST: Last entry.
105 *
106 * AAC profiles definitions.
107 */
108typedef enum {
109  MIX_AAC_PROFILE_NULL=-1,
110  MIX_AAC_PROFILE_MAIN=0,
111  MIX_AAC_PROFILE_LC,
112  MIX_AAC_PROFILE_SSR,
113  MIX_AAC_PROFILE_LAST
114} MixAACProfile;
115
116/* Using enumeration as this MPEG ID definition is specific to SST and different from
117 any MPEG/ADTS header.
118*/
119/**
120 * MixAACMpegID:
121 * @MIX_AAC_MPEG_ID_NULL: Undefined MPEG ID.
122 * @MIX_AAC_MPEG_2_ID: Indicate MPEG 2 Audio.
123 * @MIX_AAC_MPEG_4_ID: Indicate MPEG 4 Audio.
124 * @MIX_AAC_MPEG_LAST: last entry.
125 *
126 * AAC MPEG ID.
127*/
128typedef enum {
129  MIX_AAC_MPEG_ID_NULL=-1,
130  MIX_AAC_MPEG_2_ID = 0,
131  MIX_AAC_MPEG_4_ID = 1,
132  MIX_AAC_MPEG_LAST
133} MixAACMpegID;
134
135/**
136 * MixAudioConfigParamsAAC:
137 * @parent: parent.
138 * @MPEG_id: MPEG ID. See #mix_acp_aac_set_mpeg_id
139 * @bit_stream_format: Bitstream format. See #mix_acp_aac_set_bit_stream_format.
140 * @aac_profile: AAC profile. See #mix_acp_aac_set_aac_profile.
141 * @aot: Audio object type. See #mix_acp_aac_set_aot
142 * @aac_sample_rate: See #MIX_ACP_AAC_SAMPLE_RATE macro.
143 * @aac_channels: See #MIX_ACP_AAC_CHANNELS macro.
144 * @bit_rate_type: Bitrate type. See #mix_acp_aac_set_bit_rate_type
145 * @sbrPresentFlag: See #MIX_ACP_AAC_SBR_FLAG macro.
146 * @psPresentFlag: See #MIX_ACP_AAC_PS_FLAG macro.
147 * @CRC: CRC check 0:disable, 1:enable.
148 * @pce_present: <emphasis>Not Used.</emphasis> See #MIX_ACP_AAC_PCE_FLAG
149 * @syntc_id: <emphasis>Not Used.</emphasis> 0 for ID_SCE(Dula Mono), -1 for raw.
150 * @syntc_tag: <emphasis>Not Used.</emphasis> -1 for raw. 0-16 for rest of the streams.
151 * @num_syntc_elems: <emphasis>Not Used.</emphasis> Number of syntatic elements.
152 *
153 * MixAudio Parameter object
154 */
155struct _MixAudioConfigParamsAAC
156{
157  /*< public >*/
158  MixAudioConfigParams parent;
159
160  /*< public >*/
161  /* Audio Format Parameters */
162  MixAACMpegID MPEG_id;
163  MixAACBitstreamFormt bit_stream_format;
164  MixAACProfile aac_profile;
165  guint aot;
166  guint aac_sample_rate;
167  guint aac_channels;
168  MixAACBitrateType bit_rate_type;
169  gboolean CRC;
170  guint sbrPresentFlag;
171  guint psPresentFlag;
172  gboolean pce_present;
173  gint8 syntc_id[2];
174  gint8 syntc_tag[2];
175  gint num_syntc_elems;
176  /*< private >*/
177  void* reserved1;
178  void* reserved2;
179  void* reserved3;
180  void* reserved4;
181};
182
183/**
184 * MixAudioConfigParamsAACClass:
185 *
186 * MI-X Audio object class
187 */
188struct _MixAudioConfigParamsAACClass
189{
190  /*< public >*/
191  MixAudioConfigParamsClass parent_class;
192
193  /* class members */
194};
195
196/**
197 * mix_acp_aac_get_type:
198 * @returns: type
199 *
200 * Get the type of object.
201 */
202GType mix_acp_aac_get_type (void);
203
204/**
205 * mix_acp_aac_new:
206 * @returns: A newly allocated instance of #MixAudioConfigParamsAAC
207 *
208 * Use this method to create new instance of #MixAudioConfigParamsAAC
209 */
210MixAudioConfigParamsAAC *mix_acp_aac_new(void);
211
212/**
213 * mix_acp_aac_ref:
214 * @mix: object to add reference
215 * @returns: the MixAudioConfigParamsAAC instance where reference count has been increased.
216 *
217 * Add reference count.
218 */
219MixAudioConfigParamsAAC *mix_acp_aac_ref(MixAudioConfigParamsAAC *mix);
220
221/**
222 * mix_acp_aac_unref:
223 * @obj: object to unref.
224 *
225 * Decrement reference count of the object.
226 */
227#define mix_acp_aac_unref(obj) mix_params_unref(MIX_PARAMS(obj))
228
229/* Class Methods */
230
231
232/**
233 * mix_acp_aac_set_mpeg_id:
234 * @obj: #MixAudioConfigParamsAAC
235 * @mpegid: MPEG ID to set.
236 * @return: MIX_RESULT
237 *
238 * Configure decoder to treat audio as MPEG 2 or MPEG 4.
239*/
240MIX_RESULT mix_acp_aac_set_mpeg_id(MixAudioConfigParamsAAC *obj, MixAACMpegID mpegid);
241
242/**
243 * mix_acp_aac_get_mpeg_id:
244 * @obj: #MixAudioConfigParamsAAC object
245 * @returns: MPEG ID.
246 *
247 * Retrieve currently configured mpeg id value.
248*/
249MixAACMpegID mix_acp_aac_get_mpeg_id(MixAudioConfigParamsAAC *obj);
250
251/**
252 * MIX_ACP_AAC_CRC:
253 * @obj: #MixAudioConfigParamsAAC object.
254 *
255 * #MixAudioConfigParamAAC.CRC accessor.
256*/
257#define MIX_ACP_AAC_CRC(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->CRC)
258
259/**
260 * mix_acp_aac_set_aot:
261 * @obj: #MixAudioConfigParamsAAC
262 * @aot: Audio Object Type.
263 *
264 * Audio Object Type for the MPEG-4 audio stream. Valid value are:
265 *
266 * 2 - for AAC-LC
267 *
268 * 5 - for SBR
269 *
270 * Method returns MIX_RESULT_NOT_SUPPORTED for not supported value.
271 *
272*/
273MIX_RESULT mix_acp_aac_set_aot(MixAudioConfigParamsAAC *obj, guint aot);
274
275/**
276 * mix_acp_aac_get_aot:
277 * @obj: #MixAudioConfigParamsAAC
278 * @aot: Pointer to receive the Audio Object Type.
279 * @return: Currently configured audio object type. Or 0 if not yet specified.
280 *
281 * To retrieve currently configured audio object type.
282*/
283guint mix_acp_aac_get_aot(MixAudioConfigParamsAAC *obj);
284
285/**
286 * MIX_ACP_AAC_SBR_FLAG:
287 * @obj: #MixAudioConfigParamsAAC object
288 *
289 * MixAudioConfigParamAAC.sbrPresentFlag accessor.
290 *
291 * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates whether SBR data is present.
292 *
293 * 0: Absent
294 *
295 * 1: Present
296 *
297 * -1 (0xffffffff): indicates implicit signalling.
298 */
299#define MIX_ACP_AAC_SBR_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->sbrPresentFlag)
300
301/**
302 * MIX_ACP_AAC_PS_FLAG:
303 * @obj: #MixAudioConfigParamsAAC object
304 *
305 * MixAudioConfigParamAAC.psPresentFlag accessor.
306 *
307 * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates whether PS data is present.
308 *
309 * 0: Absent
310 *
311 * 1: Present
312 *
313 * -1 (0xffffffff): indicates implicit signalling.
314 */
315#define MIX_ACP_AAC_PS_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->psPresentFlag)
316
317/**
318 * MIX_ACP_AAC_PCE_FLAG:
319 * @obj: #MixAudioConfigParamsAAC object.
320 *
321 * MixAudioConfigParamAAC.pce_present accessor.
322 *
323 * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates PCE data presence.
324 *
325 * 1:present
326 *
327 * 0:absent.
328 *
329 * <remark>Not Used on Moorestown.</remark>
330 */
331#define MIX_ACP_AAC_PCE_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->pce_present)
332
333/**
334 * MIX_ACP_AAC_SAMPLE_RATE:
335 * @obj: #MixAudioConfigParamsAAC object.
336 *
337 * MixAudioConfigParamAAC.aac_sample_rate accessor.
338 *
339 * Plain AAC decoder operating sample rate. Which could be different from the output sampling rate with HE AAC v1 and v2.
340 */
341#define MIX_ACP_AAC_SAMPLE_RATE(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->aac_sample_rate)
342
343/**
344 * MIX_ACP_AAC_CHANNELS:
345 * @obj: #MixAudioConfigParamsAAC
346 *
347 * MixAudioConfigParamAAC.aac_channels accessor.
348 *
349 * Indicates the number of output channels used by AAC decoder before SBR or PS tools are applied.
350 *
351 */
352#define MIX_ACP_AAC_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->aac_channels)
353
354/**
355 * mix_acp_aac_get_bit_stream_format:
356 * @obj: #MixAudioConfigParamsAAC
357 * @returns: #MixAACBitstreamFormt
358 *
359 * Return the bitstream format currently configured.
360 */
361MixAACBitstreamFormt mix_acp_aac_get_bit_stream_format(MixAudioConfigParamsAAC *obj);
362
363/**
364 * mix_acp_aac_set_bit_stream_format:
365 * @obj: #MixAudioConfigParamsAAC
366 * @bit_stream_format: Bit stream format.
367 * @returns: MIX_RESULT
368 *
369 * Set the type of bitstream format as specified in #MixAACBitstreamFormt.
370 */
371MIX_RESULT mix_acp_aac_set_bit_stream_format(MixAudioConfigParamsAAC *obj, MixAACBitstreamFormt bit_stream_format);
372
373/**
374 * mix_acp_aac_get_aac_profile:
375 * @obj: #MixAudioConfigParamsAAC
376 * @returns: #MixAACProfile
377 *
378 * Retrieve the AAC profile currently configured.
379 */
380MixAACProfile mix_acp_aac_get_aac_profile(MixAudioConfigParamsAAC *obj);
381
382/**
383 * mix_acp_aac_set_aac_profile:
384 * @obj: #MixAudioConfigParamsAAC
385 * @aac_profile: AAC profile to set.
386 * @returns: MIX_RESULT
387 *
388 * Configure AAC profile for current session.
389 *
390 * Only #MIX_AAC_PROFILE_LC is supported in Moorestown.
391 */
392MIX_RESULT mix_acp_aac_set_aac_profile(MixAudioConfigParamsAAC *obj, MixAACProfile aac_profile);
393
394/**
395 * mix_acp_aac_get_bit_rate_type:
396 * @obj: #MixAudioConfigParamsAAC
397 * @returns: #MixAACBitrateType
398 *
399 * Retrieve the bit rate type currently configured.
400 */
401MixAACBitrateType mix_acp_aac_get_bit_rate_type(MixAudioConfigParamsAAC *obj);
402
403/**
404 * mix_acp_aac_set_bit_rate_type:
405 * @obj: #MixAudioConfigParamsAAC
406 * @bit_rate_type: Bit rate type to set.
407 * @returns: MIX_RESULT
408 *
409 * Set the bit rate type used.
410 */
411MIX_RESULT mix_acp_aac_set_bit_rate_type(MixAudioConfigParamsAAC *obj, MixAACBitrateType bit_rate_type);
412
413#endif /* __MIX_AUDIOCONFIGPARAMSAAC_H__ */
414