From: Chanwoo Choi Date: Thu, 20 Jun 2024 04:45:22 +0000 (+0900) Subject: Add support for HAL_MODULE_AUDIO v1.0 interface X-Git-Tag: accepted/tizen/unified/20240727.112733^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F99%2F313199%2F4;p=platform%2Fhal%2Fapi%2Faudio.git Add support for HAL_MODULE_AUDIO v1.0 interface HAL_MODULE_AUDIO will support the multiple version of HAL interface. So that v1.0 is first supported version of HAL_MODULE_AUDIO. hal-audio-interface-1.h contains v1.0 HAL interface. Change-Id: If7048a56cd889777db49c80c7b85acb31b83d843 Signed-off-by: Chanwoo Choi --- diff --git a/include/hal-audio-interface-1.h b/include/hal-audio-interface-1.h new file mode 100644 index 0000000..354f954 --- /dev/null +++ b/include/hal-audio-interface-1.h @@ -0,0 +1,201 @@ +/* + * HAL (Hardware Abstract Layer) interface API for Audio + * + * Copyright (c) 2024 Samsung Electronics Co., Ltd. + * + * 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. + */ + +#ifndef __HAL_AUDIO_INTERFACE_1__ +#define __HAL_AUDIO_INTERFACE_1__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file hal-audio.h + * @brief This file contains the Audio Hardware Abstraction Layer Interfaces. + */ + +/** + * @addtogroup TIZEN_AUDIO_HAL_MODULE + * @{ + */ + +/** + * @brief Enumeration for return codes. + * @since_tizen 6.5 + */ +typedef enum audio_return { + AUDIO_RET_OK = 0, + AUDIO_ERR_UNDEFINED = (int32_t)0x80001000, + AUDIO_ERR_RESOURCE = (int32_t)0x80001001, + AUDIO_ERR_PARAMETER = (int32_t)0x80001002, + AUDIO_ERR_IOCTL = (int32_t)0x80001003, + AUDIO_ERR_INVALID_STATE = (int32_t)0x80001004, + AUDIO_ERR_INTERNAL = (int32_t)0x80001005, + /* add new enumerator here */ + AUDIO_ERR_NOT_IMPLEMENTED = (int32_t)0x80001100, +} audio_return_e; + +/** + * @brief Enumeration for audio direction. + * @since_tizen 6.5 + */ +typedef enum audio_direction { + AUDIO_DIRECTION_IN, /**< Capture */ + AUDIO_DIRECTION_OUT, /**< Playback */ +} audio_direction_e; + +/** + * @brief Enumeration for audio state. + * @since_tizen 9.0 + */ +typedef enum audio_state { + AUDIO_STATE_OPEN, + AUDIO_STATE_SETUP, + AUDIO_STATE_PREPARED, + AUDIO_STATE_RUNNING, + AUDIO_STATE_XRUN, /* playback:underrun, capture:overrun */ + AUDIO_STATE_DRAINING, + AUDIO_STATE_PAUSED, + AUDIO_STATE_SUSPENDED, + AUDIO_STATE_DISCONNECTED, + AUDIO_STATE_UNKNOWN, +} audio_state_e; + +/** + * @brief Device information including type, direction and id. + * @since_tizen 6.5 + */ +typedef struct device_info { + const char *type; + uint32_t direction; + uint32_t id; +} device_info_s; + +/** + * @brief Volume information including type, gain and direction. + * @since_tizen 6.5 + */ +typedef struct audio_volume_info { + const char *type; + const char *gain; + uint32_t direction; +} audio_volume_info_s; + +/** + * @brief Route information including role and device. + * @since_tizen 6.5 + */ +typedef struct audio_route_info { + const char *role; + device_info_s *device_infos; + uint32_t num_of_devices; +} audio_route_info_s; + +/** + * @brief Route option including role, name and value. + * @since_tizen 6.5 + */ +typedef struct audio_route_option { + const char *role; + const char *name; + int32_t value; +} audio_route_option_s; + +/** + * @brief Stream information including role, direction and index. + * @since_tizen 6.5 + */ +typedef struct audio_stream_info { + const char *role; + uint32_t direction; + uint32_t idx; +} audio_stream_info_s; + +/** + * @brief Ducking information including target role, duration and ratio. + * @since_tizen 6.5 + */ +typedef struct audio_ducking_info { + const char *target_role; + uint32_t duration; + double ratio; +} audio_ducking_info_s; + +/** + * @brief Called when audio hal implementation needs to send a message. + * @since_tizen 6.5 + * @param[in] name The message name + * @param[in] value The message value + * @param[in] user_data The user data passed from the callback registration function + * + * @see audio_add_message_cb() + * @see audio_remove_message_cb() + */ +typedef void (*message_cb)(const char *name, int value, void *user_data); + +typedef struct _hal_backend_media_audio_funcs { + /* Initialization & de-initialization */ + audio_return_e (*init)(void **audio_handle); + audio_return_e (*deinit)(void *audio_handle); + /* Volume */ + audio_return_e (*get_volume_level_max)(void *audio_handle, audio_volume_info_s *info, uint32_t *level); + audio_return_e (*get_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t *level); + audio_return_e (*set_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t level); + audio_return_e (*get_volume_value)(void *audio_handle, audio_volume_info_s *info, uint32_t level, double *value); + audio_return_e (*get_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t *mute); + audio_return_e (*set_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t mute); + audio_return_e (*set_volume_ratio)(void *audio_handle, audio_stream_info_s *info, double ratio); + audio_return_e (*notify_ducking_activation_changed)(void *audio_handle, audio_ducking_info_s *info, uint32_t is_activated); /* optional */ + /* Routing */ + audio_return_e (*update_route)(void *audio_handle, audio_route_info_s *info); + audio_return_e (*update_route_option)(void *audio_handle, audio_route_option_s *option); + /* Stream */ + audio_return_e (*notify_stream_connection_changed)(void *audio_handle, audio_stream_info_s *info, uint32_t is_connected); + /* PCM */ + audio_return_e (*pcm_open)(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle); + audio_return_e (*pcm_start)(void *audio_handle, void *pcm_handle); + audio_return_e (*pcm_stop)(void *audio_handle, void *pcm_handle); + audio_return_e (*pcm_close)(void *audio_handle, void *pcm_handle); + audio_return_e (*pcm_avail)(void *audio_handle, void *pcm_handle, uint32_t *avail); + audio_return_e (*pcm_write)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames); + audio_return_e (*pcm_read)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames); + audio_return_e (*pcm_get_fd)(void *audio_handle, void *pcm_handle, int *fd); + audio_return_e (*pcm_recover)(void *audio_handle, void *pcm_handle, int revents); + audio_return_e (*pcm_get_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods); + audio_return_e (*pcm_set_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods); + + audio_return_e (*pcm_avail_delay)(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay); + audio_return_e (*pcm_mmap_begin)(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr); + audio_return_e (*pcm_mmap_commit)(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames); + audio_return_e (*pcm_get_state)(void *audio_handle, void *pcm_handle, audio_state_e *state); + + /* Message callback */ + audio_return_e (*add_message_cb)(void *audio_handle, message_cb callback, void *user_data); + audio_return_e (*remove_message_cb)(void *audio_handle, message_cb callback); +} hal_backend_audio_funcs; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif +#endif /* __HAL_AUDIO_INTERFACE_1__ */ + diff --git a/include/hal-audio-interface.h b/include/hal-audio-interface.h index 34de538..107b4c0 100644 --- a/include/hal-audio-interface.h +++ b/include/hal-audio-interface.h @@ -19,183 +19,7 @@ #ifndef __HAL_AUDIO_INTERFACE__ #define __HAL_AUDIO_INTERFACE__ -#include +#include -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file hal-audio.h - * @brief This file contains the Audio Hardware Abstraction Layer Interfaces. - */ - -/** - * @addtogroup TIZEN_AUDIO_HAL_MODULE - * @{ - */ - -/** - * @brief Enumeration for return codes. - * @since_tizen 6.5 - */ -typedef enum audio_return { - AUDIO_RET_OK = 0, - AUDIO_ERR_UNDEFINED = (int32_t)0x80001000, - AUDIO_ERR_RESOURCE = (int32_t)0x80001001, - AUDIO_ERR_PARAMETER = (int32_t)0x80001002, - AUDIO_ERR_IOCTL = (int32_t)0x80001003, - AUDIO_ERR_INVALID_STATE = (int32_t)0x80001004, - AUDIO_ERR_INTERNAL = (int32_t)0x80001005, - /* add new enumerator here */ - AUDIO_ERR_NOT_IMPLEMENTED = (int32_t)0x80001100, -} audio_return_e; - -/** - * @brief Enumeration for audio direction. - * @since_tizen 6.5 - */ -typedef enum audio_direction { - AUDIO_DIRECTION_IN, /**< Capture */ - AUDIO_DIRECTION_OUT, /**< Playback */ -} audio_direction_e; - -/** - * @brief Enumeration for audio state. - * @since_tizen 9.0 - */ -typedef enum audio_state { - AUDIO_STATE_OPEN, - AUDIO_STATE_SETUP, - AUDIO_STATE_PREPARED, - AUDIO_STATE_RUNNING, - AUDIO_STATE_XRUN, /* playback:underrun, capture:overrun */ - AUDIO_STATE_DRAINING, - AUDIO_STATE_PAUSED, - AUDIO_STATE_SUSPENDED, - AUDIO_STATE_DISCONNECTED, - AUDIO_STATE_UNKNOWN, -} audio_state_e; - -/** - * @brief Device information including type, direction and id. - * @since_tizen 6.5 - */ -typedef struct device_info { - const char *type; - uint32_t direction; - uint32_t id; -} device_info_s; - -/** - * @brief Volume information including type, gain and direction. - * @since_tizen 6.5 - */ -typedef struct audio_volume_info { - const char *type; - const char *gain; - uint32_t direction; -} audio_volume_info_s; - -/** - * @brief Route information including role and device. - * @since_tizen 6.5 - */ -typedef struct audio_route_info { - const char *role; - device_info_s *device_infos; - uint32_t num_of_devices; -} audio_route_info_s; - -/** - * @brief Route option including role, name and value. - * @since_tizen 6.5 - */ -typedef struct audio_route_option { - const char *role; - const char *name; - int32_t value; -} audio_route_option_s; - -/** - * @brief Stream information including role, direction and index. - * @since_tizen 6.5 - */ -typedef struct audio_stream_info { - const char *role; - uint32_t direction; - uint32_t idx; -} audio_stream_info_s; - -/** - * @brief Ducking information including target role, duration and ratio. - * @since_tizen 6.5 - */ -typedef struct audio_ducking_info { - const char *target_role; - uint32_t duration; - double ratio; -} audio_ducking_info_s; - -/** - * @brief Called when audio hal implementation needs to send a message. - * @since_tizen 6.5 - * @param[in] name The message name - * @param[in] value The message value - * @param[in] user_data The user data passed from the callback registration function - * - * @see audio_add_message_cb() - * @see audio_remove_message_cb() - */ -typedef void (*message_cb)(const char *name, int value, void *user_data); - -typedef struct _hal_backend_media_audio_funcs { - /* Initialization & de-initialization */ - audio_return_e (*init)(void **audio_handle); - audio_return_e (*deinit)(void *audio_handle); - /* Volume */ - audio_return_e (*get_volume_level_max)(void *audio_handle, audio_volume_info_s *info, uint32_t *level); - audio_return_e (*get_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t *level); - audio_return_e (*set_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t level); - audio_return_e (*get_volume_value)(void *audio_handle, audio_volume_info_s *info, uint32_t level, double *value); - audio_return_e (*get_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t *mute); - audio_return_e (*set_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t mute); - audio_return_e (*set_volume_ratio)(void *audio_handle, audio_stream_info_s *info, double ratio); - audio_return_e (*notify_ducking_activation_changed)(void *audio_handle, audio_ducking_info_s *info, uint32_t is_activated); /* optional */ - /* Routing */ - audio_return_e (*update_route)(void *audio_handle, audio_route_info_s *info); - audio_return_e (*update_route_option)(void *audio_handle, audio_route_option_s *option); - /* Stream */ - audio_return_e (*notify_stream_connection_changed)(void *audio_handle, audio_stream_info_s *info, uint32_t is_connected); - /* PCM */ - audio_return_e (*pcm_open)(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle); - audio_return_e (*pcm_start)(void *audio_handle, void *pcm_handle); - audio_return_e (*pcm_stop)(void *audio_handle, void *pcm_handle); - audio_return_e (*pcm_close)(void *audio_handle, void *pcm_handle); - audio_return_e (*pcm_avail)(void *audio_handle, void *pcm_handle, uint32_t *avail); - audio_return_e (*pcm_write)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames); - audio_return_e (*pcm_read)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames); - audio_return_e (*pcm_get_fd)(void *audio_handle, void *pcm_handle, int *fd); - audio_return_e (*pcm_recover)(void *audio_handle, void *pcm_handle, int revents); - audio_return_e (*pcm_get_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods); - audio_return_e (*pcm_set_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods); - - audio_return_e (*pcm_avail_delay)(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay); - audio_return_e (*pcm_mmap_begin)(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr); - audio_return_e (*pcm_mmap_commit)(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames); - audio_return_e (*pcm_get_state)(void *audio_handle, void *pcm_handle, audio_state_e *state); - - /* Message callback */ - audio_return_e (*add_message_cb)(void *audio_handle, message_cb callback, void *user_data); - audio_return_e (*remove_message_cb)(void *audio_handle, message_cb callback); -} hal_backend_audio_funcs; - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif #endif /* __HAL_AUDIO_INTERFACE__ */