Add missing implementations 83/253683/2 accepted/tizen/unified/20210219.095243 submit/tizen/20210218.045157 submit/tizen/20210219.045921
authorSeungbae Shin <seungbae.shin@samsung.com>
Tue, 16 Feb 2021 07:15:41 +0000 (16:15 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Thu, 18 Feb 2021 02:11:40 +0000 (11:11 +0900)
sync code with other audio hal backends

[Version] 0.1.15
[Issue Type] Update

Change-Id: I85c0704b0f40f0117cfe30c5117f23d5f2ba90c4

13 files changed:
Makefile.am
hal-backend-audio.c
packaging/audio-hal-emul.spec
tizen-audio-comm.c
tizen-audio-ctrl.c [new file with mode: 0644]
tizen-audio-impl-ctrl.c
tizen-audio-impl-pcm.c
tizen-audio-impl.h
tizen-audio-internal.h
tizen-audio-routing.c
tizen-audio-volume.c
tizen-audio.c
tizen-audio.h

index 667ba3f..6457672 100644 (file)
@@ -7,6 +7,7 @@ libhal_backend_audio_la_SOURCES = tizen-audio.c \
                tizen-audio-pcm.c \
                tizen-audio-util.c \
                tizen-audio-comm.c \
+               tizen-audio-ctrl.c \
                tizen-audio-impl-pcm.c \
                tizen-audio-impl-ctrl.c \
                hal-backend-audio.c
@@ -17,5 +18,4 @@ libhal_backend_audio_la_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS) $(VCONF_CFLAGS
 if USE_TINYALSA
 libhal_backend_audio_la_LIBADD += $(TINYALSA_LIBS)
 libhal_backend_audio_la_CFLAGS += $(TINYALSA_CFLAGS) -D__USE_TINYALSA__
-endif
-
+endif
\ No newline at end of file
index 564abdc..5048b7b 100644 (file)
@@ -34,14 +34,21 @@ static int audio_emul_init(void **data)
 
     funcs->init = audio_init;
     funcs->deinit = audio_deinit;
+
     funcs->get_volume_level_max = audio_get_volume_level_max;
+    funcs->get_volume_level = audio_get_volume_level;
     funcs->set_volume_level = audio_set_volume_level;
     funcs->get_volume_value = audio_get_volume_value;
     funcs->get_volume_mute = audio_get_volume_mute;
     funcs->set_volume_mute = audio_set_volume_mute;
+    funcs->set_volume_ratio = audio_set_volume_ratio;
+    funcs->notify_ducking_activation_changed = audio_notify_ducking_activation_changed;
+
     funcs->update_route = audio_update_route;
     funcs->update_route_option = audio_update_route_option;
+
     funcs->notify_stream_connection_changed = audio_notify_stream_connection_changed;
+
     funcs->pcm_open = audio_pcm_open;
     funcs->pcm_start = audio_pcm_start;
     funcs->pcm_stop = audio_pcm_stop;
@@ -54,6 +61,9 @@ static int audio_emul_init(void **data)
     funcs->pcm_get_params = audio_pcm_get_params;
     funcs->pcm_set_params = audio_pcm_set_params;
 
+    funcs->add_message_cb = audio_add_message_cb;
+    funcs->remove_message_cb = audio_remove_message_cb;
+
     *data = (void *)funcs;
 
     return 0;
index 4527c01..985b0b6 100644 (file)
@@ -1,6 +1,6 @@
 Name:       audio-hal-emul
 Summary:    TIZEN Audio HAL for Emulator
-Version:    0.1.14
+Version:    0.1.15
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index ed71126..d166e7d 100644 (file)
@@ -83,9 +83,8 @@ audio_return_e _audio_comm_send_message(audio_hal_s *ah, const char *name, int v
     AUDIO_RETURN_VAL_IF_FAIL(name, AUDIO_ERR_PARAMETER);
 
     AUDIO_LOG_DEBUG("send message : name(%s), value(%d)", name, value);
-    if (ah->comm.msg_cb) {
+    if (ah->comm.msg_cb)
         ah->comm.msg_cb(name, value, ah->comm.user_data);
-    }
 
     return audio_ret;
 }
diff --git a/tizen-audio-ctrl.c b/tizen-audio-ctrl.c
new file mode 100644 (file)
index 0000000..b6536d8
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * audio-hal
+ *
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "tizen-audio-internal.h"
+#include "tizen-audio-impl.h"
+
+audio_return_e _audio_ctrl_init(audio_hal_s *ah)
+{
+    audio_return_e audio_ret = AUDIO_RET_OK;
+
+    AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+
+    audio_ret = _mixer_control_init(ah);
+
+    return audio_ret;
+}
+
+audio_return_e _audio_ctrl_deinit(audio_hal_s *ah)
+{
+    audio_return_e audio_ret = AUDIO_RET_OK;
+
+    AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+
+    audio_ret = _mixer_control_deinit(ah);
+
+    return audio_ret;
+}
index 70dc73b..f946006 100644 (file)
 
 #include "tizen-audio-internal.h"
 
-audio_return_e _control_init(audio_hal_s *ah)
+#ifdef __MIXER_PARAM_DUMP
+static void __dump_mixer_param(char *dump, long *param, int size)
+{
+    int i, len;
+
+    for (i = 0; i < size; i++) {
+        len = sprintf(dump, "%ld", *param);
+        if (len > 0)
+            dump += len;
+        if (i != size -1)
+            *dump++ = ',';
+
+        param++;
+    }
+    *dump = '\0';
+}
+#endif
+
+audio_return_e _mixer_control_init(audio_hal_s *ah)
 {
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
 
@@ -36,7 +54,7 @@ audio_return_e _control_init(audio_hal_s *ah)
     return AUDIO_RET_OK;
 }
 
-audio_return_e _control_deinit(audio_hal_s *ah)
+audio_return_e _mixer_control_deinit(audio_hal_s *ah)
 {
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
 
index b73c397..b845177 100644 (file)
@@ -24,7 +24,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdbool.h>
 
 #include "tizen-audio-internal.h"
 #include "tizen-audio-impl.h"
index 1c91244..7869e84 100644 (file)
@@ -36,8 +36,8 @@ audio_return_e _pcm_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min, u
 audio_return_e _pcm_set_hw_params(snd_pcm_t *pcm, audio_pcm_sample_spec_s *sample_spec, uint8_t *use_mmap, snd_pcm_uframes_t *period_size, snd_pcm_uframes_t *buffer_size);
 
 /* Control */
-audio_return_e _control_init(audio_hal_s *ah);
-audio_return_e _control_deinit(audio_hal_s *ah);
+audio_return_e _mixer_control_init(audio_hal_s *ah);
+audio_return_e _mixer_control_deinit(audio_hal_s *ah);
 audio_return_e _mixer_control_set_param(audio_hal_s *ah, const char* ctl_name, snd_ctl_elem_value_t* value, int size);
 audio_return_e _mixer_control_set_value(audio_hal_s *ah, const char* card, const char *ctl_name, int val);
 audio_return_e _mixer_control_set_value_string(audio_hal_s *ah, const char* ctl_name, const char* value);
index 079133e..fc1a4ed 100644 (file)
 #endif
 
 #define AUDIO_RETURN_IF_FAIL(expr) do { \
-    if (!expr) { \
+    if (!(expr)) { \
         AUDIO_LOG_ERROR("%s failed", #expr); \
         return; \
     } \
 } while (0)
 #define AUDIO_RETURN_VAL_IF_FAIL(expr, val) do { \
-    if (!expr) { \
+    if (!(expr)) { \
         AUDIO_LOG_ERROR("%s failed", #expr); \
         return val; \
     } \
 } while (0)
 #define AUDIO_RETURN_NULL_IF_FAIL(expr) do { \
-    if (!expr) { \
+    if (!(expr)) { \
         AUDIO_LOG_ERROR("%s failed", #expr); \
         return NULL; \
     } \
@@ -228,6 +228,8 @@ typedef struct audio_hal {
     audio_hal_comm_s comm;
 } audio_hal_s;
 
+audio_return_e _audio_ctrl_init(audio_hal_s *ah);
+audio_return_e _audio_ctrl_deinit(audio_hal_s *ah);
 audio_return_e _audio_volume_init(audio_hal_s *ah);
 audio_return_e _audio_volume_deinit(audio_hal_s *ah);
 audio_return_e _audio_routing_init(audio_hal_s *ah);
index b7123c1..bd15781 100644 (file)
@@ -24,7 +24,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdbool.h>
 
 #include "tizen-audio-internal.h"
 #include "tizen-audio-impl.h"
index d30f1e0..151c431 100644 (file)
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdbool.h>
 #include <string.h>
 #include <math.h>
 #include <vconf.h>
 #include <iniparser.h>
 
 #include "tizen-audio-internal.h"
+#include "tizen-audio-impl.h"
 
 #define VOLUME_INI_DEFAULT_PATH     SYSCONFDIR"/multimedia/mmfw_audio_volume.ini" /* SYSCONFDIR is defined at .spec */
 #define VOLUME_INI_TEMP_PATH        "/opt/system/mmfw_audio_volume.ini"
@@ -266,7 +266,7 @@ audio_return_e _audio_volume_init(audio_hal_s *ah)
     int i;
     int val = 0;
     audio_return_e audio_ret = AUDIO_RET_OK;
-    int init_value[AUDIO_VOLUME_TYPE_MAX] = {9, 11, 7, 11, 7, 4, 4, 7};
+    int init_value[AUDIO_VOLUME_TYPE_MAX] = { 9, 11, 7, 11, 7, 4, 4, 7 };
 
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
 
@@ -388,6 +388,8 @@ audio_return_e audio_set_volume_level(void *audio_handle, audio_volume_info_s *i
     ah->volume.volume_level[__get_volume_idx_by_string_type(info->type)] = level;
     AUDIO_LOG_INFO("set [%s] volume_level: %d, direction(%d)", info->type, level, info->direction);
 
+    /* set mixer related to H/W volume if needed */
+
     return audio_ret;
 }
 
@@ -417,3 +419,34 @@ audio_return_e audio_set_volume_mute(void *audio_handle, audio_volume_info_s *in
 
     return audio_ret;
 }
+
+audio_return_e audio_set_volume_ratio(void *audio_handle, audio_stream_info_s *info, double ratio)
+{
+    audio_return_e audio_ret = AUDIO_RET_OK;
+    audio_hal_s *ah = (audio_hal_s *)audio_handle;
+
+    AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+    AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
+
+    AUDIO_LOG_INFO("set [%s] volume_ratio: %f, direction(%u), index(%u)", info->role, ratio, info->direction, info->idx);
+
+    /* TODO. Not implemented */
+
+    return audio_ret;
+}
+
+audio_return_e audio_notify_ducking_activation_changed(void *audio_handle, audio_ducking_info_s *info, uint32_t is_activated)
+{
+    audio_return_e audio_ret = AUDIO_RET_OK;
+    audio_hal_s *ah = (audio_hal_s *)audio_handle;
+
+    AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+    AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
+    AUDIO_RETURN_VAL_IF_FAIL(info->target_role, AUDIO_ERR_PARAMETER);
+
+    AUDIO_LOG_INFO("role:%s, duration:%u, ratio:%lf, is_activated:%u", info->target_role, info->duration, info->ratio, is_activated);
+
+    /* TODO. Not implemented */
+
+    return audio_ret;
+}
index 60fec26..dbc437a 100644 (file)
@@ -30,10 +30,15 @@ audio_return_e audio_init(void **audio_handle)
 
     AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
 
-    if (!(ah = malloc(sizeof(audio_hal_s)))) {
-        AUDIO_LOG_ERROR("failed to malloc()");
+    if (!(ah = calloc(1, sizeof(audio_hal_s)))) {
+        AUDIO_LOG_ERROR("failed to alloc()");
         return AUDIO_ERR_RESOURCE;
     }
+
+    if ((ret = _audio_ctrl_init(ah))) {
+        AUDIO_LOG_ERROR("failed to _audio_ctrl_init(), ret(0x%x)", ret);
+        goto error_exit;
+    }
     if ((ret = _audio_volume_init(ah))) {
         AUDIO_LOG_ERROR("failed to _audio_volume_init(), ret(0x%x)", ret);
         goto error_exit;
@@ -76,8 +81,10 @@ audio_return_e audio_deinit(void *audio_handle)
     _audio_stream_deinit(ah);
     _audio_pcm_deinit(ah);
     _audio_comm_deinit(ah);
+    _audio_ctrl_deinit(ah);
+
     free(ah);
     ah = NULL;
 
     return AUDIO_RET_OK;
-}
\ No newline at end of file
+}
index 3c459a2..52ed4cb 100644 (file)
@@ -151,6 +151,34 @@ audio_return_e audio_get_volume_mute(void *audio_handle, audio_volume_info_s *in
 audio_return_e audio_set_volume_mute(void *audio_handle, audio_volume_info_s *info, uint32_t mute);
 
 /**
+ * @brief Sets the volume ratio specified for a particular volume information. (optional)
+ * @since_tizen 5.5
+ * @param[in] audio_handle The audio hal handle
+ * @param[in] info The audio volume information
+ * @param[in] ratio The volume ratio to be set (Min.:0.0 ~ Max.:1.0, default:1.0)
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #AUDIO_RET_OK Success
+ */
+audio_return_e audio_set_volume_ratio(void *audio_handle, audio_stream_info_s *info, double ratio);
+
+/**
+ * @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_e audio_notify_ducking_activation_changed(void *audio_handle, audio_ducking_info_s *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