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