[audio] Add new API - audio_notify_ducking_activation_changed 75/210775/4 accepted/tizen/unified/20190730.224258 submit/tizen/20190726.023107 submit/tizen/20190729.082339
authorJeongmo Yang <jm80.yang@samsung.com>
Wed, 24 Jul 2019 10:19:07 +0000 (19:19 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 25 Jul 2019 02:47:24 +0000 (11:47 +0900)
- 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 <jm80.yang@samsung.com>
include/audio/audio_hal_interface.h
include/audio/tizen-audio.h
packaging/mm-hal-interface.spec
src/audio/audio_hal_interface.c

index 79b6f49..8a9038e 100644 (file)
@@ -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;
index 48754ba..3a475ca 100644 (file)
@@ -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
index d120652..924fb93 100755 (executable)
@@ -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
index cef3cf7..0c4c3f1 100644 (file)
@@ -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)
 {