alsa_device_profile.h revision b776eb3998732bc0278cce84c0ecfd1d91d5874f
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_SYSTEM_MEDIA_ALSA_UTILS_ALSA_DEVICE_PROFILE_H 18#define ANDROID_SYSTEM_MEDIA_ALSA_UTILS_ALSA_DEVICE_PROFILE_H 19 20#include <stdbool.h> 21 22#include <tinyalsa/asoundlib.h> 23 24#define MAX_PROFILE_FORMATS 6 /* We long support the 5 standard formats defined 25 * in asound.h, so we just need this to be 1 more 26 * than that */ 27#define MAX_PROFILE_SAMPLE_RATES 14 /* this number needs to be 1 more than the number of 28 * sample rates in std_sample_rates[] 29 * (in alsa_device_profile.c) */ 30#define MAX_PROFILE_CHANNEL_COUNTS 9 /* this number need to be 1 more than the number of 31 * standard channel formats in std_channel_counts[] 32 * (in alsa_device_profile.c) */ 33 34#define DEFAULT_SAMPLE_RATE 44100 35#define DEFAULT_SAMPLE_FORMAT PCM_FORMAT_S16_LE 36#define DEFAULT_CHANNEL_COUNT 2 37 38typedef struct { 39 int card; 40 int device; 41 int direction; /* PCM_OUT or PCM_IN */ 42 43 enum pcm_format formats[MAX_PROFILE_FORMATS]; 44 45 unsigned sample_rates[MAX_PROFILE_SAMPLE_RATES]; 46 47 unsigned channel_counts[MAX_PROFILE_CHANNEL_COUNTS]; 48 49 bool is_valid; 50 51 /* read from the hardware device */ 52 struct pcm_config default_config; 53 54 unsigned min_period_size; 55 unsigned max_period_size; 56 57 unsigned min_channel_count; 58 unsigned max_channel_count; 59} alsa_device_profile; 60 61void profile_init(alsa_device_profile* profile, int direction); 62bool profile_is_initialized(alsa_device_profile* profile); 63bool profile_is_valid(alsa_device_profile* profile); 64bool profile_is_cached_for(alsa_device_profile* profile, int card, int device); 65void profile_decache(alsa_device_profile* profile); 66 67bool profile_read_device_info(alsa_device_profile* profile); 68 69/* Audio Config Strings Methods */ 70char * profile_get_sample_rate_strs(alsa_device_profile* profile); 71char * profile_get_format_strs(alsa_device_profile* profile); 72char * profile_get_channel_count_strs(alsa_device_profile* profile); 73 74/* Sample Rate Methods */ 75unsigned profile_get_default_sample_rate(alsa_device_profile* profile); 76bool profile_is_sample_rate_valid(alsa_device_profile* profile, unsigned rate); 77 78/* Format Methods */ 79enum pcm_format profile_get_default_format(alsa_device_profile* profile); 80bool profile_is_format_valid(alsa_device_profile* profile, enum pcm_format fmt); 81 82/* Channel Methods */ 83unsigned profile_get_default_channel_count(alsa_device_profile* profile); 84bool profile_is_channel_count_valid(alsa_device_profile* profile, unsigned count); 85 86/* Utility */ 87unsigned profile_calc_min_period_size(alsa_device_profile* profile, unsigned sample_rate); 88unsigned int profile_get_period_size(alsa_device_profile* profile, unsigned sample_rate); 89 90void profile_dump(const alsa_device_profile* profile, int fd); 91 92#endif /* ANDROID_SYSTEM_MEDIA_ALSA_UTILS_ALSA_DEVICE_PROFILE_H */ 93