/* AudioUtil.h * * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ALSA_SOUND_AUDIO_UTIL_H #define ALSA_SOUND_AUDIO_UTIL_H #define BIT(nr) (1UL << (nr)) #define MAX_EDID_BLOCKS 10 #define MAX_SHORT_AUDIO_DESC_CNT 30 #define MIN_AUDIO_DESC_LENGTH 3 #define MIN_SPKR_ALLOCATION_DATA_LENGTH 3 typedef enum EDID_AUDIO_FORMAT_ID { LPCM = 1, AC3, MPEG1, MP3, MPEG2_MULTI_CHANNEL, AAC, DTS, ATRAC, SACD, DOLBY_DIGITAL_PLUS, DTS_HD, MAT, DST, WMA_PRO } EDID_AUDIO_FORMAT_ID; typedef struct EDID_AUDIO_BLOCK_INFO { EDID_AUDIO_FORMAT_ID nFormatId; int nSamplingFreq; int nBitsPerSample; int nChannels; } EDID_AUDIO_BLOCK_INFO; typedef struct EDID_AUDIO_INFO { int nAudioBlocks; unsigned char nSpeakerAllocation[MIN_SPKR_ALLOCATION_DATA_LENGTH]; EDID_AUDIO_BLOCK_INFO AudioBlocksArray[MAX_EDID_BLOCKS]; } EDID_AUDIO_INFO; class AudioUtil { public: //Parses EDID audio block when if HDMI is connected to determine audio sink capabilities. static bool getHDMIAudioSinkCaps(EDID_AUDIO_INFO*); private: static int printFormatFromEDID(unsigned char format); static int getSamplingFrequencyFromEDID(unsigned char byte); static int getBitsPerSampleFromEDID(unsigned char byte, unsigned char format); static bool getSpeakerAllocation(EDID_AUDIO_INFO* pInfo); }; #endif /* ALSA_SOUND_AUDIO_UTIL_H */