io_direction_t direction, uint32_t level, double *value);
int32_t audio_hal_interface_get_volume_mute(audio_hal_interface *h, const char *volume_type, io_direction_t direction, uint32_t *mute);
int32_t audio_hal_interface_set_volume_mute(audio_hal_interface *h, const char *volume_type, io_direction_t direction, uint32_t mute);
+int32_t audio_hal_interface_set_volume_ratio(audio_hal_interface *h, const char *stream_role, io_direction_t direction, uint32_t index, double ratio);
int32_t audio_hal_interface_update_route(audio_hal_interface *h, hal_route_info *info);
int32_t audio_hal_interface_update_route_option(audio_hal_interface *h, hal_route_option *option);
int32_t audio_hal_interface_notify_stream_connection_changed(audio_hal_interface *h, hal_stream_connection_info *info);
audio_return_t (*get_volume_value)(void *audio_handle, audio_volume_info_t *info, uint32_t level, double *value);
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 */
/* 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);
tmp_h->intf.get_volume_value = dlsym(tmp_h->dl_handle, "audio_get_volume_value");
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.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");
return AUDIO_HAL_SUCCESS;
}
+int32_t audio_hal_interface_set_volume_ratio(audio_hal_interface *h,
+ const char *stream_role,
+ io_direction_t direction,
+ uint32_t index,
+ double ratio)
+{
+ audio_return_t ret = AUDIO_RET_OK;
+ audio_stream_info_t info = { NULL, 0, 0 };
+
+ assert(h);
+ assert(h->ah_handle);
+
+ info.role = stream_role;
+ info.direction = direction;
+ info.idx = index;
+
+ if (!h->intf.set_volume_ratio) {
+ LOGW("Not implemented....(optional)");
+ return AUDIO_HAL_SUCCESS;
+ }
+
+ ret = h->intf.set_volume_ratio(h->ah_handle, &info, ratio);
+ if (ret != AUDIO_RET_OK) {
+ LOGE("set_volume_ratio 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)
{
assert(h->ah_handle);
if (!h->intf.add_message_cb) {
- LOGE("Not implemented....");
- return AUDIO_HAL_ERROR;
+ LOGW("Not implemented....(optional)");
+ return AUDIO_HAL_SUCCESS;
}
ret = h->intf.add_message_cb(h->ah_handle, (message_cb)callback, user_data);
assert(h->ah_handle);
if (!h->intf.remove_message_cb) {
- LOGE("Not implemented....");
- return AUDIO_HAL_ERROR;
+ LOGW("Not implemented....(optional)");
+ return AUDIO_HAL_SUCCESS;
}
ret = h->intf.remove_message_cb(h->ah_handle, (message_cb)callback);