Home | History | Annotate | Download | only in src
      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 Intels 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 
     61 typedef struct _MixAudioConfigParamsAAC        MixAudioConfigParamsAAC;
     62 typedef 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  */
     73 typedef 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  */
     90 typedef 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  */
    108 typedef 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 */
    128 typedef 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  */
    155 struct _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  */
    188 struct _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  */
    202 GType 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  */
    210 MixAudioConfigParamsAAC *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  */
    219 MixAudioConfigParamsAAC *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 */
    240 MIX_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 */
    249 MixAACMpegID 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 */
    273 MIX_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 */
    283 guint 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  */
    361 MixAACBitstreamFormt 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  */
    371 MIX_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  */
    380 MixAACProfile 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  */
    392 MIX_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  */
    401 MixAACBitrateType 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  */
    411 MIX_RESULT mix_acp_aac_set_bit_rate_type(MixAudioConfigParamsAAC *obj, MixAACBitrateType bit_rate_type);
    412 
    413 #endif /* __MIX_AUDIOCONFIGPARAMSAAC_H__ */
    414