From c01f9d498ae5911d524adbe8087c5408d29acb6c Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Wed, 24 Jul 2019 19:19:07 +0900 Subject: [PATCH] [audio] Add new API - audio_notify_ducking_activation_changed - This API delivers information for ducking activation including target role, duration and ratio to audio HAL. [Version] 0.0.24 [Profile] Common [Issue Type] New API Change-Id: I3191c6e3fc59488a09d26b9206e681ca8f5a1031 Signed-off-by: Jeongmo Yang --- include/audio/audio_hal_interface.h | 7 +++++++ include/audio/tizen-audio.h | 28 +++++++++++++++++++++++++++- packaging/mm-hal-interface.spec | 2 +- src/audio/audio_hal_interface.c | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/include/audio/audio_hal_interface.h b/include/audio/audio_hal_interface.h index 79b6f49..8a9038e 100644 --- a/include/audio/audio_hal_interface.h +++ b/include/audio/audio_hal_interface.h @@ -62,6 +62,13 @@ typedef struct _hal_stream_connection_info { bool is_connected; } hal_stream_connection_info; +typedef struct _hal_ducking_activation_info { + const char *target_role; + uint32_t duration; + double ratio; + bool is_activated; +} hal_ducking_activation_info; + typedef void* pcm_handle; typedef void (*hal_message_callback)(const char *name, int value, void *user_data); typedef struct _audio_hal_interface audio_hal_interface; diff --git a/include/audio/tizen-audio.h b/include/audio/tizen-audio.h index 48754ba..3a475ca 100644 --- a/include/audio/tizen-audio.h +++ b/include/audio/tizen-audio.h @@ -105,7 +105,17 @@ typedef struct audio_stream_info { const char *role; uint32_t direction; uint32_t idx; -} audio_stream_info_t ; +} audio_stream_info_t; + +/** + * @brief Ducking information including target role, duration and ratio. + * @since_tizen 5.5 + */ +typedef struct audio_ducking_info { + const char *target_role; + uint32_t duration; + double ratio; +} audio_ducking_info_t; /** * @brief Called when audio hal implementation needs to send a message. (optional) @@ -135,6 +145,7 @@ typedef struct audio_interface { audio_return_t (*get_volume_mute)(void *audio_handle, audio_volume_info_t *info, uint32_t *mute); audio_return_t (*set_volume_mute)(void *audio_handle, audio_volume_info_t *info, uint32_t mute); audio_return_t (*set_volume_ratio)(void *audio_handle, audio_stream_info_t *info, double ratio); /* optional */ + audio_return_t (*notify_ducking_activation_changed)(void *audio_handle, audio_ducking_info_t *info, uint32_t is_activated); /* Routing */ audio_return_t (*update_route)(void *audio_handle, audio_route_info_t *info); audio_return_t (*update_route_option)(void *audio_handle, audio_route_option_t *option); @@ -275,6 +286,21 @@ audio_return_t audio_get_volume_mute(void *audio_handle, audio_volume_info_t *in audio_return_t audio_set_volume_mute(void *audio_handle, audio_volume_info_t *info, uint32_t mute); /** + * @brief Gets notified when a ducking is activated and deactivated. + * @since_tizen 5.5 + * @param[in] audio_handle The audio hal handle + * @param[in] info The ducking information including target role, duration and ratio + * @param[in] is_activated The activation state (@c true = activated, @c false = deactivated) + * + * @remarks This information can be used for volume controls. + * + * @return @c 0 on success, + * otherwise a negative error value + * @retval #AUDIO_RET_OK Success + */ +audio_return_t audio_notify_ducking_activation_changed(void *audio_handle, audio_ducking_info_t *info, uint32_t is_activated); + +/** * @brief Updates the audio routing according to audio route information. * @since_tizen 3.0 * @param[in] audio_handle The audio hal handle diff --git a/packaging/mm-hal-interface.spec b/packaging/mm-hal-interface.spec index d120652..924fb93 100755 --- a/packaging/mm-hal-interface.spec +++ b/packaging/mm-hal-interface.spec @@ -1,6 +1,6 @@ Name: mm-hal-interface Summary: Multimedia HAL Interface -Version: 0.0.23 +Version: 0.0.24 Release: 0 Group: Multimedia/Development License: Apache-2.0 diff --git a/src/audio/audio_hal_interface.c b/src/audio/audio_hal_interface.c index cef3cf7..0c4c3f1 100644 --- a/src/audio/audio_hal_interface.c +++ b/src/audio/audio_hal_interface.c @@ -75,6 +75,7 @@ int32_t audio_hal_interface_init(audio_hal_interface **h) tmp_h->intf.get_volume_mute = dlsym(tmp_h->dl_handle, "audio_get_volume_mute"); tmp_h->intf.set_volume_mute = dlsym(tmp_h->dl_handle, "audio_set_volume_mute"); tmp_h->intf.set_volume_ratio = dlsym(tmp_h->dl_handle, "audio_set_volume_ratio"); + tmp_h->intf.notify_ducking_activation_changed = dlsym(tmp_h->dl_handle, "audio_notify_ducking_activation_changed"); tmp_h->intf.update_route = dlsym(tmp_h->dl_handle, "audio_update_route"); tmp_h->intf.update_route_option = dlsym(tmp_h->dl_handle, "audio_update_route_option"); tmp_h->intf.notify_stream_connection_changed = dlsym(tmp_h->dl_handle, "audio_notify_stream_connection_changed"); @@ -337,6 +338,42 @@ int32_t audio_hal_interface_set_volume_ratio(audio_hal_interface *h, return AUDIO_HAL_SUCCESS; } +int32_t audio_hal_interface_notify_ducking_activation_changed(audio_hal_interface *h, + hal_ducking_activation_info *info) +{ + audio_return_t ret = AUDIO_RET_OK; + audio_ducking_info_t hal_info; + uint32_t is_activated = 0; + + assert(h); + assert(h->ah_handle); + + if (!info) { + LOGE("NULL ducking activation info"); + return AUDIO_HAL_ERROR; + } + + memset(&hal_info, 0, sizeof(audio_ducking_info_t)); + + hal_info.target_role = info->target_role; + hal_info.duration = info->duration; + hal_info.ratio = info->ratio; + is_activated = info->is_activated; + + if (!h->intf.notify_ducking_activation_changed) { + LOGE("Not implemented...."); + return AUDIO_HAL_ERROR; + } + + ret = h->intf.notify_ducking_activation_changed(h->ah_handle, &hal_info, is_activated); + if (ret != AUDIO_RET_OK) { + LOGE("notify_ducking_activation_changed returns error:0x%x", ret); + return AUDIO_HAL_ERROR; + } + + return AUDIO_HAL_SUCCESS; +} + int32_t audio_hal_interface_update_route(audio_hal_interface *h, hal_route_info *info) { -- 2.7.4