Loading hal/audio_extn/audio_extn.c +8 −3 Original line number Diff line number Diff line Loading @@ -95,8 +95,9 @@ int keep_alive_set_parameters(struct audio_device *adev, struct str_parms *parms); bool cin_applicable_stream(struct stream_in *in); bool cin_attached_usecase(audio_usecase_t uc_id); bool cin_attached_usecase(struct stream_in *in); bool cin_format_supported(audio_format_t format); int cin_acquire_usecase(struct stream_in *in); size_t cin_get_buffer_size(struct stream_in *in); int cin_open_input_stream(struct stream_in *in); void cin_stop_input_stream(struct stream_in *in); Loading Loading @@ -5161,14 +5162,18 @@ bool audio_extn_cin_applicable_stream(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_applicable_stream(in): false); } bool audio_extn_cin_attached_usecase(audio_usecase_t uc_id) bool audio_extn_cin_attached_usecase(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_attached_usecase(uc_id): false); return (audio_extn_compress_in_enabled? cin_attached_usecase(in): false); } bool audio_extn_cin_format_supported(audio_format_t format) { return (audio_extn_compress_in_enabled? cin_format_supported(format): false); } int audio_extn_cin_acquire_usecase(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_acquire_usecase(in): 0); } size_t audio_extn_cin_get_buffer_size(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_get_buffer_size(in): 0); Loading hal/audio_extn/audio_extn.h +2 −1 Original line number Diff line number Diff line Loading @@ -1093,8 +1093,9 @@ int audio_extn_gef_retrieve_audio_cal(void* adev, int acdb_dev_id, int acdb_devi // START: COMPRESS_INPUT_ENABLED =============================== bool audio_extn_cin_applicable_stream(struct stream_in *in); bool audio_extn_cin_attached_usecase(audio_usecase_t uc_id); bool audio_extn_cin_attached_usecase(struct stream_in *in); bool audio_extn_cin_format_supported(audio_format_t format); int audio_extn_cin_acquire_usecase(struct stream_in *in); size_t audio_extn_cin_get_buffer_size(struct stream_in *in); int audio_extn_cin_open_input_stream(struct stream_in *in); void audio_extn_cin_stop_input_stream(struct stream_in *in); Loading hal/audio_extn/compress_in.c +37 −12 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ uint64_t timestamp; struct cin_private_data { struct compr_config compr_config; struct compress *compr; bool usecase_acquired; }; typedef struct cin_private_data cin_private_data_t; Loading Loading @@ -109,14 +110,14 @@ bool cin_applicable_stream(struct stream_in *in) * 2. cin_configure_input_stream(in, in_config) */ bool cin_attached_usecase(audio_usecase_t uc_id) bool cin_attached_usecase(struct stream_in *in) { unsigned int i; unsigned int i = 0; audio_usecase_t uc_id = in->usecase; for (i = 0; i < sizeof(cin_usecases)/ sizeof(cin_usecases[0]); i++) { if (uc_id == cin_usecases[i] && (cin_usecases_state & (0x1 << i))) if (uc_id == cin_usecases[i] && in->cin_extn != NULL) return true; } return false; Loading Loading @@ -170,6 +171,27 @@ bool cin_format_supported(audio_format_t format) return false; } int cin_acquire_usecase(struct stream_in *in) { audio_usecase_t usecase = USECASE_INVALID; cin_private_data_t *cin_data = (cin_private_data_t *) in->cin_extn; if (cin_data->usecase_acquired) { ALOGW("%s: in %p, usecase already acquired!", __func__, in); return 0; } usecase = get_cin_usecase(); if (usecase == USECASE_INVALID) { ALOGE("%s: in %p, failed to acquire usecase, max count reached!", __func__, in); return -EBUSY; } in->usecase = usecase; cin_data->usecase_acquired = true; return 0; } size_t cin_get_buffer_size(struct stream_in *in) { size_t sz = 0; Loading @@ -192,6 +214,12 @@ int cin_open_input_stream(struct stream_in *in) cin_private_data_t *cin_data = (cin_private_data_t *) in->cin_extn; ALOGV("%s: in %p, cin_data %p", __func__, in, cin_data); if (!cin_data->usecase_acquired) { ALOGE("%s: in %p, invalid state: usecase not acquired yet!", __func__, in); return ret; } cin_data->compr = compress_open(adev->snd_card, in->pcm_device_id, COMPRESS_OUT, &cin_data->compr_config); if (cin_data->compr == NULL || !is_compress_ready(cin_data->compr)) { Loading Loading @@ -228,6 +256,11 @@ void cin_close_input_stream(struct stream_in *in) compress_close(cin_data->compr); cin_data->compr = NULL; } if (cin_data->usecase_acquired) { free_cin_usecase(in->usecase); cin_data->usecase_acquired = false; } } void cin_free_input_stream_resources(struct stream_in *in) Loading @@ -239,7 +272,6 @@ void cin_free_input_stream_resources(struct stream_in *in) free(cin_data->compr_config.codec); free(cin_data); } free_cin_usecase(in->usecase); } int cin_read(struct stream_in *in, void *buffer, Loading Loading @@ -310,13 +342,6 @@ int cin_configure_input_stream(struct stream_in *in, struct audio_config *in_con goto err_config; } in->usecase = get_cin_usecase(); if (in->usecase == USECASE_INVALID) { ALOGE("%s, Max allowed compress record usecase reached!", __func__); ret = -EEXIST; goto err_config; } config.sample_rate = in->sample_rate; config.channel_mask = in->channel_mask; config.format = in->format; Loading hal/audio_hw.c +9 −6 Original line number Diff line number Diff line Loading @@ -3054,6 +3054,9 @@ int start_input_stream(struct stream_in *in) else ALOGV("%s: usecase(%d)", __func__, in->usecase); if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_acquire_usecase(in); if (get_usecase_from_list(adev, in->usecase) != NULL) { ALOGE("%s: use case assigned already in use, stream(%p)usecase(%d: %s)", __func__, &in->stream, in->usecase, use_case_table[in->usecase]); Loading Loading @@ -3095,7 +3098,7 @@ int start_input_stream(struct stream_in *in) android_atomic_acquire_cas(true, false, &(in->capture_stopped)); if (audio_extn_cin_attached_usecase(in->usecase)) { if (audio_extn_cin_attached_usecase(in)) { ret = audio_extn_cin_open_input_stream(in); if (ret) goto error_open; Loading Loading @@ -6482,7 +6485,7 @@ static size_t in_get_buffer_size(const struct audio_stream *stream) return voice_extn_compress_voip_in_get_buffer_size(in); else if(audio_extn_compr_cap_usecase_supported(in->usecase)) return audio_extn_compr_cap_get_buffer_size(in->config.format); else if(audio_extn_cin_attached_usecase(in->usecase)) else if(audio_extn_cin_attached_usecase(in)) return audio_extn_cin_get_buffer_size(in); return in->config.period_size * in->af_period_multiplier * Loading Loading @@ -6547,7 +6550,7 @@ static int in_standby(struct audio_stream *stream) in->mmap_shared_memory_fd = -1; } } else { if (audio_extn_cin_attached_usecase(in->usecase)) if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_close_input_stream(in); } Loading Loading @@ -6883,7 +6886,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, goto exit; bool use_mmap = is_mmap_usecase(in->usecase) || in->realtime; if (audio_extn_cin_attached_usecase(in->usecase)) { if (audio_extn_cin_attached_usecase(in)) { ret = audio_extn_cin_read(in, buffer, bytes, &bytes_read); } else if (in->pcm) { if (audio_extn_ssr_get_stream() == in) { Loading Loading @@ -6944,7 +6947,7 @@ exit: pthread_mutex_unlock(&adev->lock); in->standby = true; } if (!audio_extn_cin_attached_usecase(in->usecase)) { if (!audio_extn_cin_attached_usecase(in)) { bytes_read = bytes; memset(buffer, 0, bytes); } Loading Loading @@ -9477,7 +9480,7 @@ static void adev_close_input_stream(struct audio_hw_device *dev, audio_extn_compr_cap_format_supported(in->config.format)) audio_extn_compr_cap_deinit(); if (audio_extn_cin_attached_usecase(in->usecase)) if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_free_input_stream_resources(in); if (in->is_st_session) { Loading hal/audio_hw_extn_api.c +2 −2 Original line number Diff line number Diff line /* * Copyright (c) 2016-2017, 2018, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are Loading Loading @@ -202,7 +202,7 @@ int qahwi_in_stop(struct audio_stream_in* stream) { if (!in->standby) { if (in->pcm != NULL ) { pcm_stop(in->pcm); } else if (audio_extn_cin_attached_usecase(in->usecase)) { } else if (audio_extn_cin_attached_usecase(in)) { audio_extn_cin_stop_input_stream(in); } Loading Loading
hal/audio_extn/audio_extn.c +8 −3 Original line number Diff line number Diff line Loading @@ -95,8 +95,9 @@ int keep_alive_set_parameters(struct audio_device *adev, struct str_parms *parms); bool cin_applicable_stream(struct stream_in *in); bool cin_attached_usecase(audio_usecase_t uc_id); bool cin_attached_usecase(struct stream_in *in); bool cin_format_supported(audio_format_t format); int cin_acquire_usecase(struct stream_in *in); size_t cin_get_buffer_size(struct stream_in *in); int cin_open_input_stream(struct stream_in *in); void cin_stop_input_stream(struct stream_in *in); Loading Loading @@ -5161,14 +5162,18 @@ bool audio_extn_cin_applicable_stream(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_applicable_stream(in): false); } bool audio_extn_cin_attached_usecase(audio_usecase_t uc_id) bool audio_extn_cin_attached_usecase(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_attached_usecase(uc_id): false); return (audio_extn_compress_in_enabled? cin_attached_usecase(in): false); } bool audio_extn_cin_format_supported(audio_format_t format) { return (audio_extn_compress_in_enabled? cin_format_supported(format): false); } int audio_extn_cin_acquire_usecase(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_acquire_usecase(in): 0); } size_t audio_extn_cin_get_buffer_size(struct stream_in *in) { return (audio_extn_compress_in_enabled? cin_get_buffer_size(in): 0); Loading
hal/audio_extn/audio_extn.h +2 −1 Original line number Diff line number Diff line Loading @@ -1093,8 +1093,9 @@ int audio_extn_gef_retrieve_audio_cal(void* adev, int acdb_dev_id, int acdb_devi // START: COMPRESS_INPUT_ENABLED =============================== bool audio_extn_cin_applicable_stream(struct stream_in *in); bool audio_extn_cin_attached_usecase(audio_usecase_t uc_id); bool audio_extn_cin_attached_usecase(struct stream_in *in); bool audio_extn_cin_format_supported(audio_format_t format); int audio_extn_cin_acquire_usecase(struct stream_in *in); size_t audio_extn_cin_get_buffer_size(struct stream_in *in); int audio_extn_cin_open_input_stream(struct stream_in *in); void audio_extn_cin_stop_input_stream(struct stream_in *in); Loading
hal/audio_extn/compress_in.c +37 −12 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ uint64_t timestamp; struct cin_private_data { struct compr_config compr_config; struct compress *compr; bool usecase_acquired; }; typedef struct cin_private_data cin_private_data_t; Loading Loading @@ -109,14 +110,14 @@ bool cin_applicable_stream(struct stream_in *in) * 2. cin_configure_input_stream(in, in_config) */ bool cin_attached_usecase(audio_usecase_t uc_id) bool cin_attached_usecase(struct stream_in *in) { unsigned int i; unsigned int i = 0; audio_usecase_t uc_id = in->usecase; for (i = 0; i < sizeof(cin_usecases)/ sizeof(cin_usecases[0]); i++) { if (uc_id == cin_usecases[i] && (cin_usecases_state & (0x1 << i))) if (uc_id == cin_usecases[i] && in->cin_extn != NULL) return true; } return false; Loading Loading @@ -170,6 +171,27 @@ bool cin_format_supported(audio_format_t format) return false; } int cin_acquire_usecase(struct stream_in *in) { audio_usecase_t usecase = USECASE_INVALID; cin_private_data_t *cin_data = (cin_private_data_t *) in->cin_extn; if (cin_data->usecase_acquired) { ALOGW("%s: in %p, usecase already acquired!", __func__, in); return 0; } usecase = get_cin_usecase(); if (usecase == USECASE_INVALID) { ALOGE("%s: in %p, failed to acquire usecase, max count reached!", __func__, in); return -EBUSY; } in->usecase = usecase; cin_data->usecase_acquired = true; return 0; } size_t cin_get_buffer_size(struct stream_in *in) { size_t sz = 0; Loading @@ -192,6 +214,12 @@ int cin_open_input_stream(struct stream_in *in) cin_private_data_t *cin_data = (cin_private_data_t *) in->cin_extn; ALOGV("%s: in %p, cin_data %p", __func__, in, cin_data); if (!cin_data->usecase_acquired) { ALOGE("%s: in %p, invalid state: usecase not acquired yet!", __func__, in); return ret; } cin_data->compr = compress_open(adev->snd_card, in->pcm_device_id, COMPRESS_OUT, &cin_data->compr_config); if (cin_data->compr == NULL || !is_compress_ready(cin_data->compr)) { Loading Loading @@ -228,6 +256,11 @@ void cin_close_input_stream(struct stream_in *in) compress_close(cin_data->compr); cin_data->compr = NULL; } if (cin_data->usecase_acquired) { free_cin_usecase(in->usecase); cin_data->usecase_acquired = false; } } void cin_free_input_stream_resources(struct stream_in *in) Loading @@ -239,7 +272,6 @@ void cin_free_input_stream_resources(struct stream_in *in) free(cin_data->compr_config.codec); free(cin_data); } free_cin_usecase(in->usecase); } int cin_read(struct stream_in *in, void *buffer, Loading Loading @@ -310,13 +342,6 @@ int cin_configure_input_stream(struct stream_in *in, struct audio_config *in_con goto err_config; } in->usecase = get_cin_usecase(); if (in->usecase == USECASE_INVALID) { ALOGE("%s, Max allowed compress record usecase reached!", __func__); ret = -EEXIST; goto err_config; } config.sample_rate = in->sample_rate; config.channel_mask = in->channel_mask; config.format = in->format; Loading
hal/audio_hw.c +9 −6 Original line number Diff line number Diff line Loading @@ -3054,6 +3054,9 @@ int start_input_stream(struct stream_in *in) else ALOGV("%s: usecase(%d)", __func__, in->usecase); if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_acquire_usecase(in); if (get_usecase_from_list(adev, in->usecase) != NULL) { ALOGE("%s: use case assigned already in use, stream(%p)usecase(%d: %s)", __func__, &in->stream, in->usecase, use_case_table[in->usecase]); Loading Loading @@ -3095,7 +3098,7 @@ int start_input_stream(struct stream_in *in) android_atomic_acquire_cas(true, false, &(in->capture_stopped)); if (audio_extn_cin_attached_usecase(in->usecase)) { if (audio_extn_cin_attached_usecase(in)) { ret = audio_extn_cin_open_input_stream(in); if (ret) goto error_open; Loading Loading @@ -6482,7 +6485,7 @@ static size_t in_get_buffer_size(const struct audio_stream *stream) return voice_extn_compress_voip_in_get_buffer_size(in); else if(audio_extn_compr_cap_usecase_supported(in->usecase)) return audio_extn_compr_cap_get_buffer_size(in->config.format); else if(audio_extn_cin_attached_usecase(in->usecase)) else if(audio_extn_cin_attached_usecase(in)) return audio_extn_cin_get_buffer_size(in); return in->config.period_size * in->af_period_multiplier * Loading Loading @@ -6547,7 +6550,7 @@ static int in_standby(struct audio_stream *stream) in->mmap_shared_memory_fd = -1; } } else { if (audio_extn_cin_attached_usecase(in->usecase)) if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_close_input_stream(in); } Loading Loading @@ -6883,7 +6886,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, goto exit; bool use_mmap = is_mmap_usecase(in->usecase) || in->realtime; if (audio_extn_cin_attached_usecase(in->usecase)) { if (audio_extn_cin_attached_usecase(in)) { ret = audio_extn_cin_read(in, buffer, bytes, &bytes_read); } else if (in->pcm) { if (audio_extn_ssr_get_stream() == in) { Loading Loading @@ -6944,7 +6947,7 @@ exit: pthread_mutex_unlock(&adev->lock); in->standby = true; } if (!audio_extn_cin_attached_usecase(in->usecase)) { if (!audio_extn_cin_attached_usecase(in)) { bytes_read = bytes; memset(buffer, 0, bytes); } Loading Loading @@ -9477,7 +9480,7 @@ static void adev_close_input_stream(struct audio_hw_device *dev, audio_extn_compr_cap_format_supported(in->config.format)) audio_extn_compr_cap_deinit(); if (audio_extn_cin_attached_usecase(in->usecase)) if (audio_extn_cin_attached_usecase(in)) audio_extn_cin_free_input_stream_resources(in); if (in->is_st_session) { Loading
hal/audio_hw_extn_api.c +2 −2 Original line number Diff line number Diff line /* * Copyright (c) 2016-2017, 2018, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are Loading Loading @@ -202,7 +202,7 @@ int qahwi_in_stop(struct audio_stream_in* stream) { if (!in->standby) { if (in->pcm != NULL ) { pcm_stop(in->pcm); } else if (audio_extn_cin_attached_usecase(in->usecase)) { } else if (audio_extn_cin_attached_usecase(in)) { audio_extn_cin_stop_input_stream(in); } Loading