Home | History | Annotate | Download | only in alsa_sound
      1 /* 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 
     27 typedef 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 
     44 typedef 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 
     51 typedef 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 
     57 class AudioUtil {
     58 public:
     59 
     60     //Parses EDID audio block when if HDMI is connected to determine audio sink capabilities.
     61     static bool getHDMIAudioSinkCaps(EDID_AUDIO_INFO*);
     62 
     63 private:
     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 */
     72