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