1 /*
2 
3 
4 */
5 #ifndef AUDIO_DEF
6 #define AUDIO_DEF
7 #include <string.h>
8 
9 
10 /**
11     \enum FILMCONV
12 */
13 typedef enum
14 {
15 	FILMCONV_NONE=0,
16 	FILMCONV_FILM2PAL=1,
17 	FILMCONV_PAL2FILM=2,
18 	FILMCONV_LAST
19 }FILMCONV;
20 /**
21     \struct WAVHeader
22 */
23 typedef struct
24 {
25     uint16_t	encoding;
26     uint16_t	channels;					/* 1 = mono, 2 = stereo */
27     uint32_t	frequency;				/* One of 11025, 22050, or 44100 48000 Hz */
28     uint32_t	byterate;					/* Average bytes per second */
29     uint16_t	blockalign;				/* Bytes per sample block */
30     uint16_t	bitspersample;		/* One of 8, 12, 16, or 4 for ADPCM */
31 } WAVHeader;
32 
33 typedef enum
34 {
35     CHANNEL_INVALID=0,
36     CHANNEL_MONO,
37     CHANNEL_STEREO,
38     CHANNEL_2F_1R,
39     CHANNEL_3F,
40     CHANNEL_3F_1R,
41     CHANNEL_2F_2R,
42     CHANNEL_3F_2R,
43     CHANNEL_3F_2R_LFE,
44     CHANNEL_DOLBY_PROLOGIC,
45     CHANNEL_DOLBY_PROLOGIC2,
46     CHANNEL_LAST
47 } CHANNEL_CONF;
48 
49 #define MAX_CHANNELS 9
50 #define MIN_SAMPLING_RATE 6000
51 #define MAX_SAMPLING_RATE 192000
52 
53 typedef enum
54 {
55 	ADM_CH_INVALID=0,
56 	ADM_CH_MONO,
57 	ADM_CH_FRONT_LEFT,
58 	ADM_CH_FRONT_RIGHT,
59 	ADM_CH_FRONT_CENTER,
60 	ADM_CH_REAR_LEFT,
61 	ADM_CH_REAR_RIGHT,
62 	ADM_CH_REAR_CENTER,
63 	ADM_CH_SIDE_LEFT,
64 	ADM_CH_SIDE_RIGHT,
65 	ADM_CH_LFE
66 }CHANNEL_TYPE;
67 // returns true if channel mapping is identical
68 bool ADM_audioCompareChannelMapping(WAVHeader *wh1, WAVHeader *wh2,CHANNEL_TYPE *map1,CHANNEL_TYPE *map2);
69 /**
70 \fn ADM_printChannel
71 \brief return the name of the channel
72 */
73 
ADM_printChannel(CHANNEL_TYPE c)74 inline const char *ADM_printChannel(CHANNEL_TYPE c)
75 {
76 #define CX(c) case ADM_CH_##c: return #c;
77         switch(c)
78         {
79                 CX(INVALID)
80                 CX(MONO)
81                 CX(FRONT_LEFT)
82                 CX(FRONT_RIGHT)
83                 CX(FRONT_CENTER)
84                 CX(REAR_LEFT)
85                 CX(REAR_RIGHT)
86                 CX(REAR_CENTER)
87                 CX(SIDE_LEFT)
88                 CX(SIDE_RIGHT)
89                 CX(LFE)
90         }
91          return "unkown channel";
92 }
93 
94 typedef struct
95 {
96   const char    *desc;
97   CHANNEL_CONF  conf;
98 }AudioChannelDesc;
99 
100 const AudioChannelDesc mixerStringDescriptor[]=
101 {
102 #define MUXERSTRING(x) {#x,CHANNEL_##x}
103     MUXERSTRING(MONO),
104     MUXERSTRING(STEREO),
105     MUXERSTRING(2F_1R),
106     MUXERSTRING(3F),
107     MUXERSTRING(3F_1R),
108     MUXERSTRING(2F_2R),
109     MUXERSTRING(3F_2R),
110     MUXERSTRING(3F_2R_LFE),
111     MUXERSTRING(DOLBY_PROLOGIC),
112     MUXERSTRING(DOLBY_PROLOGIC2)
113 };
114 #undef MUXERSTRING
115 const AudioChannelDesc localDownmixing[]=
116 {
117   {"No downmixing (multichannel)", CHANNEL_INVALID},
118   {"Stereo", CHANNEL_STEREO},
119   {"Dolby Prologic", CHANNEL_DOLBY_PROLOGIC},
120   {"Dolby Prologic II", CHANNEL_DOLBY_PROLOGIC2}
121 
122 };
123 
124 const char *AudioMixerIdToString(CHANNEL_CONF  cnf);
125 CHANNEL_CONF AudioMuxerStringToId(const char *st);
126 
127 #define NB_LOCAL_DOWNMIX (sizeof(localDownmixing)/sizeof(AudioChannelDesc))
128 #define NB_MIXER_DESC    (sizeof(mixerStringDescriptor)/sizeof(AudioChannelDesc))
129 
130 #endif
131