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