static char * adev_get_parameters(const struct audio_hw_device *dev, const char *keys) { struct adev_a2dp *adev = (struct adev_a2dp *)dev; struct str_parms *parms; struct str_parms *out_parms; char *str; char value[8]; int ret; parms = str_parms_create_str(keys); out_parms = str_parms_create(); pthread_mutex_lock(&adev->lock); ret = str_parms_get_str(parms, BLUETOOOTH_ENABLED_PARM, value, sizeof(value)); if (ret >= 0) str_parms_add_str(out_parms, BLUETOOOTH_ENABLED_PARM, adev->bt_enabled ? "true" : "false"); ret = str_parms_get_str(parms, A2DP_SUSPENDED_PARM, value, sizeof(value)); if (ret >= 0) str_parms_add_str(out_parms, A2DP_SUSPENDED_PARM, adev->suspended ? "true" : "false"); pthread_mutex_unlock(&adev->lock); str = str_parms_to_str(out_parms); str_parms_destroy(out_parms); str_parms_destroy(parms); return str; }
static char * out_get_parameters(const struct audio_stream *stream, const char *keys) { struct astream_out *out = (struct astream_out *)stream; struct str_parms *parms; struct str_parms *out_parms; char *str; char value[20]; int ret; parms = str_parms_create_str(keys); out_parms = str_parms_create(); pthread_mutex_lock(&out->lock); ret = str_parms_get_str(parms, OUT_SINK_ADDR_PARM, value, sizeof(value)); if (ret >= 0) str_parms_add_str(out_parms, OUT_SINK_ADDR_PARM, out->a2dp_addr); pthread_mutex_unlock(&out->lock); str = str_parms_to_str(out_parms); str_parms_destroy(out_parms); str_parms_destroy(parms); return str; }
static char * device_get_parameters(alsa_device_profile * profile, const char * keys) { ALOGV("usb:audio_hw::device_get_parameters() keys:%s", keys); if (profile->card < 0 || profile->device < 0) { return strdup(""); } struct str_parms *query = str_parms_create_str(keys); struct str_parms *result = str_parms_create(); /* These keys are from hardware/libhardware/include/audio.h */ /* supported sample rates */ if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES)) { char* rates_list = profile_get_sample_rate_strs(profile); str_parms_add_str(result, AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES, rates_list); free(rates_list); } /* supported channel counts */ if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_SUP_CHANNELS)) { char* channels_list = profile_get_channel_count_strs(profile); str_parms_add_str(result, AUDIO_PARAMETER_STREAM_SUP_CHANNELS, channels_list); free(channels_list); } /* supported sample formats */ if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_SUP_FORMATS)) { char * format_params = profile_get_format_strs(profile); str_parms_add_str(result, AUDIO_PARAMETER_STREAM_SUP_FORMATS, format_params); free(format_params); } str_parms_destroy(query); char* result_str = str_parms_to_str(result); str_parms_destroy(result); ALOGV("usb:audio_hw::device_get_parameters = %s", result_str); return result_str; }
char * hdmi_out_get_parameters(const struct audio_stream *stream, const char *keys) { struct str_parms *query = str_parms_create_str(keys); char *str; char value[256]; struct str_parms *reply = str_parms_create(); int status; hdmi_audio_caps_t caps; TRACEM("stream=%p keys='%s'", stream, keys); if (hdmi_query_audio_caps(HDMI_EDID_PATH, &caps)) { ALOGE("Unable to get the HDMI audio capabilities"); str = calloc(1, 1); goto end; } status = str_parms_get_str(query, AUDIO_PARAMETER_STREAM_SUP_CHANNELS, value, sizeof(value)); if (status >= 0) { unsigned sa = caps.speaker_alloc; bool first = true; /* STEREO is intentionally skipped. This code is only * executed for the 'DIRECT' interface, and we don't * want stereo on a DIRECT thread. */ value[0] = '\0'; if (SUPPORTS_ARR(sa, MASK_CEA_QUAD)) { if (!first) { strcat(value, "|"); } first = false; strcat(value, "AUDIO_CHANNEL_OUT_QUAD"); } if (SUPPORTS_ARR(sa, MASK_CEA_SURROUND)) { if (!first) { strcat(value, "|"); } first = false; strcat(value, "AUDIO_CHANNEL_OUT_SURROUND"); } if (SUPPORTS_ARR(sa, MASK_CEA_5POINT1)) { if (!first) { strcat(value, "|"); } first = false; strcat(value, "AUDIO_CHANNEL_OUT_5POINT1"); } if (SUPPORTS_ARR(sa, MASK_CEA_7POINT1)) { if (!first) { strcat(value, "|"); } first = false; strcat(value, "AUDIO_CHANNEL_OUT_7POINT1"); } str_parms_add_str(reply, AUDIO_PARAMETER_STREAM_SUP_CHANNELS, value); str = strdup(str_parms_to_str(reply)); } else { str = strdup(keys); } ALOGV("%s() reply: '%s'", __func__, str); end: str_parms_destroy(query); str_parms_destroy(reply); return str; }