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_AUDIOCONFIGPARAMS_H__
     10 #define __MIX_AUDIOCONFIGPARAMS_H__
     11 
     12 
     13 #include "mixparams.h"
     14 #include "mixresult.h"
     15 #include "mixaudiotypes.h"
     16 
     17 /**
     18  * MixACPOpAlign:
     19  * @MIX_ACP_OUTPUT_ALIGN_UNKNOWN: Output alignment undefined.
     20  * @IX_ACP_OUTPUT_ALIGN_16: Output word is 16-bit aligned
     21  * @MIX_ACP_OUTPUT_ALIGN_MSB: Output word is MSB aligned
     22  * @MIX_ACP_OUTPUT_ALIGN_LSB: Output word is LSB aligned
     23  * @MIX_ACP_OUTPUT_ALIGN_LAST: Last entry in list.
     24  *
     25  * Audio Output alignment.
     26  *
     27  */
     28 typedef enum {
     29   MIX_ACP_OUTPUT_ALIGN_UNKNOWN=-1,
     30   MIX_ACP_OUTPUT_ALIGN_16=0,
     31   MIX_ACP_OUTPUT_ALIGN_MSB,
     32   MIX_ACP_OUTPUT_ALIGN_LSB,
     33   MIX_ACP_OUTPUT_ALIGN_LAST
     34 } MixACPOpAlign;
     35 
     36 /**
     37  * MixACPBPSType:
     38  * @MIX_ACP_BPS_UNKNOWN: Bit Per Sample undefined.
     39  * @MIX_ACP_BPS_16: Output bits per sample is 16 bits
     40  * @MIX_ACP_BPS_24: Output bits per sample is 24 bits
     41  *
     42  * Audio Output Size in bits per sample.
     43  *
     44  */
     45 typedef enum {
     46   MIX_ACP_BPS_UNKNOWN=0,
     47   MIX_ACP_BPS_16=16,
     48   MIX_ACP_BPS_24=24,
     49 } MixACPBPSType;
     50 
     51 /**
     52  * MIX_TYPE_AUDIOCONFIGPARAMS:
     53  *
     54  * Get type of class.
     55  */
     56 #define MIX_TYPE_AUDIOCONFIGPARAMS (mix_acp_get_type ())
     57 
     58 /**
     59  * MIX_AUDIOCONFIGPARAMS:
     60  * @obj: object to be type-casted.
     61  *
     62  * Type casting.
     63  */
     64 #define MIX_AUDIOCONFIGPARAMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParams))
     65 
     66 /**
     67  * MIX_IS_AUDIOCONFIGPARAMS:
     68  * @obj: an object.
     69  *
     70  * Checks if the given object is an instance of #MixAudioConfigParams
     71  */
     72 #define MIX_IS_AUDIOCONFIGPARAMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMS))
     73 
     74 /**
     75  * MIX_AUDIOCONFIGPARAMS_CLASS:
     76  * @klass: class to be type-casted.
     77  *
     78  * Type casting.
     79  */
     80 #define MIX_AUDIOCONFIGPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParamsClass))
     81 
     82 /**
     83  * MIX_IS_AUDIOCONFIGPARAMS_CLASS:
     84  * @klass: a class.
     85  *
     86  * Checks if the given class is #MixAudioConfigParamsClass
     87  */
     88 #define MIX_IS_AUDIOCONFIGPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMS))
     89 
     90 /**
     91  * MIX_AUDIOCONFIGPARAMS_GET_CLASS:
     92  * @obj: a #MixParams object.
     93  *
     94  * Get the class instance of the object.
     95  */
     96 #define MIX_AUDIOCONFIGPARAMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParamsClass))
     97 
     98 typedef struct _MixAudioConfigParams        MixAudioConfigParams;
     99 typedef struct _MixAudioConfigParamsClass   MixAudioConfigParamsClass;
    100 
    101 /**
    102  * MixDecodeMode:
    103  * @MIX_DECODE_NULL: Undefined decode mode.
    104  * @MIX_DECODE_DIRECTRENDER: Stream is configured in Direct Render mode
    105  * @MIX_DECODE_DECODERETURN: Stream is configured in Decode Return mode
    106  * @MIX_DECODE_LAST: Last index in the enumeration.
    107  *
    108  * Operation Mode for a MI-X session. See mix_audio_configure().
    109  *
    110  */
    111 typedef enum {
    112   MIX_DECODE_NULL=0,
    113   MIX_DECODE_DIRECTRENDER,
    114   MIX_DECODE_DECODERETURN,
    115   MIX_DECODE_LAST
    116 } MixDecodeMode;
    117 
    118 /**
    119  * MixAudioConfigParams:
    120  * @parent: parent.
    121  * @decode_mode: Decode Mode to use for current session. See #mix_acp_set_decodemode
    122  * @stream_name: Stream name. See #mix_acp_set_streamname. This object will release the string upon destruction.
    123  * @audio_manager: Type of Audio Manager. See #mix_acp_set_audio_manager.
    124  * @num_channels: Number of output channels. See #MIX_ACP_NUM_CHANNELS
    125  * @bit_rate: <emphasis>Optional.</emphasis> See #MIX_ACP_BITRATE
    126  * @sample_freq: Output frequency. See #MIX_ACP_SAMPLE_FREQ
    127  * @bits_per_sample: Number of output bit per sample. See #mix_acp_set_bps
    128  * @op_align: Output Byte Alignment. See #mix_acp_set_op_align
    129  *
    130  * @MixAudio configuration parameters object.
    131  */
    132 struct _MixAudioConfigParams
    133 {
    134   /*< public >*/
    135   MixParams parent;
    136 
    137   /*< public >*/
    138   /* Audio Session Parameters */
    139   MixDecodeMode decode_mode;
    140   gchar *stream_name;
    141   MixAudioManager audio_manager;
    142 
    143   /*< public >*/
    144   /* Audio Format Parameters */
    145   gint num_channels;
    146   gint bit_rate;
    147   gint sample_freq;
    148   MixACPBPSType bits_per_sample;
    149   MixACPOpAlign op_align;
    150   /*< private >*/
    151   void* reserved1;
    152   void* reserved2;
    153   void* reserved3;
    154   void* reserved4;
    155 };
    156 
    157 /**
    158  * MixAudioConfigParamsClass:
    159  *
    160  * MI-X Audio object class
    161  */
    162 struct _MixAudioConfigParamsClass
    163 {
    164   /*< public >*/
    165   MixParamsClass parent_class;
    166 
    167   /*< virtual public >*/
    168   void (*print_params) (MixAudioConfigParams *obj);
    169 
    170   /* class members */
    171 
    172 };
    173 
    174 /**
    175  * mix_acp_get_type:
    176  * @returns: type
    177  *
    178  * Get the type of object.
    179  */
    180 GType mix_acp_get_type (void);
    181 
    182 /**
    183  * mix_acp_new:
    184  * @returns: A newly allocated instance of #MixAudioConfigParams
    185  *
    186  * Use this method to create new instance of #MixAudioConfigParams
    187  */
    188 MixAudioConfigParams *mix_acp_new(void);
    189 
    190 /**
    191  * mix_acp_ref:
    192  * @mix: object to add reference
    193  * @returns: the MixAudioConfigParams instance where reference count has been increased.
    194  *
    195  * Add reference count.
    196  */
    197 MixAudioConfigParams *mix_acp_ref(MixAudioConfigParams *mix);
    198 
    199 /**
    200  * mix_acp_unref:
    201  * @obj: object to unref.
    202  *
    203  * Decrement reference count of the object.
    204  */
    205 #define mix_acp_unref(obj) mix_params_unref(MIX_PARAMS(obj))
    206 
    207 /* Class Methods */
    208 
    209 /**
    210  * MIX_ACP_DECODEMODE:
    211  * @obj: #MixAudioConfigParams object
    212  *
    213  * MixAudioConfigParam.decode_mode accessor.
    214  *
    215  * Configure the decode mode to one of #MixDecodeMode value.
    216 */
    217 #define MIX_ACP_DECODEMODE(obj) (MIX_AUDIOCONFIGPARAMS(obj)->decode_mode)
    218 
    219 /**
    220  * MIX_ACP_NUM_CHANNELS:
    221  * @obj: #MixAudioConfigParams object
    222  *
    223  * MixAudioConfigParam.num_channels accessor.
    224  *
    225  * Configure the number of output channels. This value need to be exact the same as the supported output channel in the audio since down-mixing is not supported.
    226  *
    227  * This value can be used during #MIX_DECODE_DECODERETURN mode for buffer size/duration calculation.
    228  *
    229  * In Moorestown, number of channel must be 1 or 2.
    230 */
    231 #define MIX_ACP_NUM_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMS(obj)->num_channels)
    232 
    233 /**
    234  * MIX_ACP_BITRATE:
    235  * @obj: #MixAudioConfigParams object
    236  *
    237  * MixAudioConfigParam.bit_rate accessor.
    238  *
    239  * Bit rate of the current audio.
    240  *
    241  * <remark>Optional</remark>
    242 */
    243 #define MIX_ACP_BITRATE(obj) (MIX_AUDIOCONFIGPARAMS(obj)->bit_rate)
    244 
    245 /**
    246  * MIX_ACP_SAMPLE_FREQ:
    247  * @obj: #MixAudioConfigParams object
    248  *
    249  * MixAudioConfigParam.sample_freq accessor.
    250  *
    251  * Output sampling frequency.
    252  *
    253  * This value can be used during #MIX_DECODE_DECODERETURN mode for buffer size/duration calculation.
    254 */
    255 #define MIX_ACP_SAMPLE_FREQ(obj) (MIX_AUDIOCONFIGPARAMS(obj)->sample_freq)
    256 
    257 /**
    258  * mix_acp_get_decodemode:
    259  * @obj: #MixAudioConfigParams
    260  * @returns: #MixDecodeMode
    261  *
    262  * Retrieve currently configured #MixDecodeMode.
    263  */
    264 MixDecodeMode mix_acp_get_decodemode(MixAudioConfigParams *obj);
    265 
    266 /**
    267  * mix_acp_set_decodemode:
    268  * @obj: #MixAudioConfigParams
    269  * @mode: #MixDecodeMode to set
    270  * @returns: #MIX_RESULT
    271  *
    272  * Configure session for one of the #MixDecodeMode.
    273  */
    274 MIX_RESULT mix_acp_set_decodemode(MixAudioConfigParams *obj, MixDecodeMode mode);
    275 
    276 /**
    277  * mix_acp_get_streamname:
    278  * @obj: #MixAudioConfigParams
    279  * @returns: pointer to a copy of the stream name. NULL if name is not available.
    280  *
    281  * Return copy of streamname. caller must free with g_free()
    282  */
    283 gchar *mix_acp_get_streamname(MixAudioConfigParams *obj);
    284 
    285 /**
    286  * mix_acp_set_streamname:
    287  * @obj: #MixAudioConfigParams
    288  * @streamname: Stream name to set
    289  * @returns: #MIX_RESULT
    290  *
    291  * Set the stream name. The object will make a copy of the input stream name string.
    292  *
    293  */
    294 MIX_RESULT mix_acp_set_streamname(MixAudioConfigParams *obj, const gchar *streamname);
    295 
    296 /**
    297  * mix_acp_set_audio_manager:
    298  * @obj: #MixAudioConfigParams
    299  * @am: #MixAudioManager
    300  * @returns: #MIX_RESULT
    301  *
    302  * Set the Audio Manager to one of the #MixAudioManager.
    303  */
    304 MIX_RESULT mix_acp_set_audio_manager(MixAudioConfigParams *obj, MixAudioManager am);
    305 
    306 /**
    307  * mix_acp_get_audio_manager:
    308  * @obj: #MixAudioConfigParams
    309  * @returns: #MixAudioManager
    310  *
    311  * Retrieve name of currently configured audio manager.
    312  */
    313 MixAudioManager mix_acp_get_audio_manager(MixAudioConfigParams *obj);
    314 
    315 /**
    316  * mix_acp_is_streamname_valid:
    317  * @obj: #MixAudioConfigParams
    318  * @returns: boolean indicates if stream name is valid.
    319  *
    320  * Check if stream name is valid considering the current Decode Mode.
    321  */
    322 gboolean mix_acp_is_streamname_valid(MixAudioConfigParams *obj);
    323 
    324 
    325 /**
    326  * mix_acp_get_bps:
    327  * @obj: #MixAudioConfigParams
    328  * @returns: #MixACPBPSType
    329  *
    330  * Retrive currently configured bit-per-stream value.
    331  */
    332 MixACPBPSType mix_acp_get_bps(MixAudioConfigParams *obj);
    333 
    334 /**
    335  * mix_acp_set_bps:
    336  * @obj: #MixAudioConfigParams
    337  * @mode: #MixACPBPSType to set
    338  * @returns: #MIX_RESULT
    339  *
    340  * Configure bit-per-stream of one of the supported #MixACPBPSType.
    341  */
    342 MIX_RESULT mix_acp_set_bps(MixAudioConfigParams *obj, MixACPBPSType type);
    343 
    344 /**
    345  * mix_acp_get_op_align:
    346  * @obj: #MixAudioConfigParams object
    347  * @returns: #MixACPOpAlign
    348  *
    349  * Get Output Alignment.
    350  */
    351 MixACPOpAlign mix_acp_get_op_align(MixAudioConfigParams *obj);
    352 
    353 /**
    354  * mix_acp_set_op_align:
    355  * @obj: #MixAudioConfigParams object
    356  * @op_align: One of the supported #MixACPOpAlign
    357  * @returns: MIX_RESULT
    358  *
    359  * Set Output Alignment to one of the #MixACPOpAlign value.
    360  */
    361 MIX_RESULT mix_acp_set_op_align(MixAudioConfigParams *obj, MixACPOpAlign op_align);
    362 
    363 /* void mix_acp_print_params(MixAudioConfigParams *obj); */
    364 
    365 
    366 #endif /* __MIX_AUDIOCONFIGPARAMS_H__ */
    367 
    368