blob: 6575315de58c8c080d2b3dbad3d006a03dd10315 [file] [log] [blame]
SathishKumar Manib357a772012-09-25 23:28:29 -07001/* AudioUtil.h
2 *
3 * Copyright (C) 2012 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef ALSA_SOUND_AUDIO_UTIL_H
19#define ALSA_SOUND_AUDIO_UTIL_H
20
21#define BIT(nr) (1UL << (nr))
22#define MAX_EDID_BLOCKS 10
23#define MAX_SHORT_AUDIO_DESC_CNT 30
24#define MIN_AUDIO_DESC_LENGTH 3
25#define MIN_SPKR_ALLOCATION_DATA_LENGTH 3
26
27typedef enum EDID_AUDIO_FORMAT_ID {
28 LPCM = 1,
29 AC3,
30 MPEG1,
31 MP3,
32 MPEG2_MULTI_CHANNEL,
33 AAC,
34 DTS,
35 ATRAC,
36 SACD,
37 DOLBY_DIGITAL_PLUS,
38 DTS_HD,
39 MAT,
40 DST,
41 WMA_PRO
42} EDID_AUDIO_FORMAT_ID;
43
44typedef struct EDID_AUDIO_BLOCK_INFO {
45 EDID_AUDIO_FORMAT_ID nFormatId;
46 int nSamplingFreq;
47 int nBitsPerSample;
48 int nChannels;
49} EDID_AUDIO_BLOCK_INFO;
50
51typedef struct EDID_AUDIO_INFO {
52 int nAudioBlocks;
53 unsigned char nSpeakerAllocation[MIN_SPKR_ALLOCATION_DATA_LENGTH];
54 EDID_AUDIO_BLOCK_INFO AudioBlocksArray[MAX_EDID_BLOCKS];
55} EDID_AUDIO_INFO;
56
57class AudioUtil {
58public:
59
60 //Parses EDID audio block when if HDMI is connected to determine audio sink capabilities.
61 static bool getHDMIAudioSinkCaps(EDID_AUDIO_INFO*);
62
63private:
64 static int printFormatFromEDID(unsigned char format);
65 static int getSamplingFrequencyFromEDID(unsigned char byte);
66 static int getBitsPerSampleFromEDID(unsigned char byte,
67 unsigned char format);
68 static bool getSpeakerAllocation(EDID_AUDIO_INFO* pInfo);
69};
70
71#endif /* ALSA_SOUND_AUDIO_UTIL_H */