tizen-audio-stream.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 \
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;
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;
Name: audio-hal-bcm2837
Summary: TIZEN Audio HAL for BCM2837
-Version: 0.1.11
+Version: 0.1.12
Release: 0
Group: System/Libraries
License: Apache-2.0
--- /dev/null
+/*
+ * audio-hal
+ *
+ * Copyright (c) 2015 - 2016 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"
+
+static audio_return_e __set_message_callback(audio_hal_s *ah, message_cb callback, void *user_data)
+{
+ audio_return_e audio_ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+ AUDIO_RETURN_VAL_IF_FAIL(callback, AUDIO_ERR_PARAMETER);
+
+ ah->comm.msg_cb = callback;
+ ah->comm.user_data = user_data;
+
+ AUDIO_LOG_DEBUG("message callback is set, callback(%p), user_data(%p)", ah->comm.msg_cb, ah->comm.user_data);
+
+ return audio_ret;
+}
+
+static audio_return_e __unset_message_callback(audio_hal_s *ah)
+{
+ audio_return_e audio_ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+
+ ah->comm.msg_cb = NULL;
+ ah->comm.user_data = NULL;
+
+ AUDIO_LOG_DEBUG("message callback is unset");
+
+ return audio_ret;
+}
+
+audio_return_e _audio_comm_init(audio_hal_s *ah)
+{
+ audio_return_e audio_ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+
+ ah->comm.msg_cb = NULL;
+ ah->comm.user_data = NULL;
+
+ return audio_ret;
+}
+
+audio_return_e _audio_comm_deinit(audio_hal_s *ah)
+{
+ audio_return_e audio_ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+
+ ah->comm.msg_cb = NULL;
+ ah->comm.user_data = NULL;
+
+ return audio_ret;
+}
+
+audio_return_e _audio_comm_send_message(audio_hal_s *ah, const char *name, int value)
+{
+ audio_return_e audio_ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+ 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)
+ ah->comm.msg_cb(name, value, ah->comm.user_data);
+
+ return audio_ret;
+}
+
+audio_return_e audio_add_message_cb(void *audio_handle, message_cb callback, void *user_data)
+{
+ audio_return_e ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
+ AUDIO_RETURN_VAL_IF_FAIL(callback, AUDIO_ERR_PARAMETER);
+
+ /* NOTE: Management of several callbacks could be implemented.
+ But we do not care of it for now.*/
+ ret = __set_message_callback((audio_hal_s *)audio_handle, callback, user_data);
+
+ return ret;
+}
+
+audio_return_e audio_remove_message_cb(void *audio_handle, message_cb callback)
+{
+ audio_return_e ret = AUDIO_RET_OK;
+
+ AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
+ AUDIO_RETURN_VAL_IF_FAIL(callback, AUDIO_ERR_PARAMETER);
+
+ ret = __unset_message_callback((audio_hal_s *)audio_handle);
+
+ return ret;
+}
len = sprintf(dump, "%ld", *param);
if (len > 0)
dump += len;
- if (i != size -1) {
+ if (i != size -1)
*dump++ = ',';
- }
param++;
}
int ret = 0, count = 0, i = 0;
AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
+ AUDIO_RETURN_VAL_IF_FAIL(ctl_name, AUDIO_ERR_PARAMETER);
+ AUDIO_RETURN_VAL_IF_FAIL(val, AUDIO_ERR_PARAMETER);
pthread_mutex_lock(&(ah->mixer.mutex));
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <stdbool.h>
#include "tizen-audio-internal.h"
#include "tizen-audio-impl.h"
typedef struct audio_hal_device {
uint32_t active_in;
uint32_t active_out;
- snd_pcm_t *pcm_in;
- snd_pcm_t *pcm_out;
- pthread_mutex_t pcm_lock;
- uint32_t pcm_count;
audio_route_mode_e mode;
} audio_hal_device_s;
AUDIO_SAMPLE_INVALID = -1
} audio_sample_format_s;
+typedef struct audio_hal_comm {
+ message_cb msg_cb;
+ void *user_data;
+} audio_hal_comm_s;
+
/* Overall */
typedef struct audio_hal {
audio_hal_device_s device;
audio_hal_volume_s volume;
audio_hal_mixer_s mixer;
+ audio_hal_comm_s comm;
} audio_hal_s;
audio_return_e _audio_ctrl_init(audio_hal_s *ah);
audio_return_e _audio_stream_deinit(audio_hal_s *ah);
audio_return_e _audio_pcm_init(audio_hal_s *ah);
audio_return_e _audio_pcm_deinit(audio_hal_s *ah);
+audio_return_e _audio_comm_init(audio_hal_s *ah);
+audio_return_e _audio_comm_deinit(audio_hal_s *ah);
+audio_return_e _audio_comm_send_message(audio_hal_s *ah, const char *name, int value);
typedef struct _dump_data {
char *strbuf;
{
AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
- ah->device.pcm_in = NULL;
- ah->device.pcm_out = NULL;
- pthread_mutex_init(&ah->device.pcm_lock, NULL);
- ah->device.pcm_count = 0;
return AUDIO_RET_OK;
}
{
AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
- pthread_mutex_destroy(&ah->device.pcm_lock);
-
return AUDIO_RET_OK;
}
uint32_t period_size, uint32_t periods, void **pcm_handle)
{
audio_return_e audio_ret = AUDIO_RET_OK;
- audio_hal_s *ah = NULL;
AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
if ((audio_ret = _pcm_open(card, device, direction, sample_spec, period_size, periods, pcm_handle)))
return audio_ret;
- ah = (audio_hal_s*)audio_handle;
- ah->device.pcm_count++;
AUDIO_LOG_INFO("Opening PCM handle %p", *pcm_handle);
return AUDIO_RET_OK;
audio_return_e audio_pcm_close(void *audio_handle, void *pcm_handle)
{
audio_return_e audio_ret = AUDIO_RET_OK;
- audio_hal_s *ah = NULL;
AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
return audio_ret;
pcm_handle = NULL;
- ah = (audio_hal_s*)audio_handle;
- ah->device.pcm_count--;
- AUDIO_LOG_INFO("PCM handle close success (count:%d)", ah->device.pcm_count);
+ AUDIO_LOG_INFO("PCM handle close success");
return audio_ret;
}
#include <stdio.h>
#include <stdlib.h>
-#include <stdbool.h>
#include <string.h>
#include <math.h>
#include <vconf.h>
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;
}
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;
}
AUDIO_LOG_ERROR("failed to _audio_pcm_init(), ret(0x%x)", ret);
goto error_exit;
}
+ if ((ret = _audio_comm_init(ah))) {
+ AUDIO_LOG_ERROR("failed to _audio_comm_init(), ret(0x%x)", ret);
+ goto error_exit;
+ }
*audio_handle = (void *)ah;
return AUDIO_RET_OK;
_audio_routing_deinit(ah);
_audio_stream_deinit(ah);
_audio_pcm_deinit(ah);
+ _audio_comm_deinit(ah);
_audio_ctrl_deinit(ah);
free(ah);
*/
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
*/
audio_return_e audio_pcm_set_params(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
+/**
+ * @brief Adds the message callback function.
+ * @since_tizen 3.0
+ * @param[in] audio_handle The audio hal handle
+ * @param[in] message_cb The message callback function
+ * @param[in] user_data The user data passed to the callback function
+ *
+ * @see message_cb()
+ * @see audio_remove_message_cb()
+ */
+audio_return_e audio_add_message_cb(void *audio_handle, message_cb callback, void *user_data);
+
+/**
+ * @brief Removes the message callback function.
+ * @since_tizen 3.0
+ * @param[in] audio_handle The audio hal handle
+ * @param[in] message_cb The message callback function to be removed
+ *
+ * @see message_cb()
+ * @see audio_add_message_cb()
+ */
+audio_return_e audio_remove_message_cb(void *audio_handle, message_cb callback);
+
/**
* @}
*/