},
[AUDIO_EVENT_CLIENT_HANDLED] = {
.name = "ClientSignalHandled",
+ },
+ [AUDIO_EVENT_DUCKING_STATE_CHANGED] = {
+ .name = "DuckingStateChanged",
}
};
(cb_data->user_cb)(AUDIO_EVENT_PLAY_FILE_END, params, cb_data->user_data);
else if (!strcmp(signal_name, g_events[AUDIO_EVENT_DEVICE_RUNNING_CHANGED].name))
(cb_data->user_cb)(AUDIO_EVENT_DEVICE_RUNNING_CHANGED, params, cb_data->user_data);
+ else if (!strcmp(signal_name, g_events[AUDIO_EVENT_DUCKING_STATE_CHANGED].name))
+ (cb_data->user_cb)(AUDIO_EVENT_DUCKING_STATE_CHANGED, params, cb_data->user_data);
}
static void callback_data_free_func(gpointer data)
int mm_sound_get_device_vendor_id(MMSoundDevice_t device_h, int *vendor_id);
int mm_sound_get_device_product_id(MMSoundDevice_t device_h, int *product_id);
+/* Ducking */
+typedef void (*mm_sound_ducking_state_changed_cb) (int idx, bool is_ducked, void *user_data);
+int mm_sound_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_cb func, void *user_data, unsigned int *subs_id);
+int mm_sound_remove_ducking_state_changed_callback(unsigned int subs_id);
+
/**
* Active device changed callback function type.
*
int mm_sound_client_unset_focus_watch_callback(int id);
int mm_sound_client_request_unset_focus_watch_callback(int id);
int mm_sound_client_execute_focus_func_in_main_context(focus_idle_event_type_e type, int data);
+int mm_sound_client_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_cb func, void* user_data, unsigned int *subs_id);
+int mm_sound_client_remove_ducking_state_changed_callback(unsigned int subs_id);
int mm_sound_client_add_test_callback(mm_sound_test_cb func, void* user_data, unsigned int *subs_id);
int mm_sound_client_remove_test_callback(unsigned int subs_id);
typedef void (*mm_sound_device_running_changed_wrapper_cb)(int device_id, const char *device_type, int io_direction, int state,
const char *name, int vendor_id, int product_id, bool is_running, int *stream_id, int stream_num, void *userdata);
typedef void (*mm_sound_stop_callback_wrapper_func)(int id, void *userdata);
+typedef void (*mm_sound_ducking_state_changed_wrapper_cb)(int idx, bool is_ducked, void *userdata);
#endif /* __MM_SOUND_CLIENT_H__ */
AUDIO_EVENT_CLIENT_SUBSCRIBED, /* Clients send this signal when they subscribed some signal. */
AUDIO_EVENT_CLIENT_HANDLED, /* Clients send this siganl when they handled some signal. */
AUDIO_EVENT_DEVICE_RUNNING_CHANGED,
+ AUDIO_EVENT_DUCKING_STATE_CHANGED,
AUDIO_EVENT_MAX
} audio_event_t;
int mm_sound_proxy_set_volume_by_type(const char *volume_type, const unsigned volume_level);
int mm_sound_proxy_add_volume_changed_callback(mm_sound_volume_changed_wrapper_cb func, void* userdata, mm_sound_proxy_userdata_free freefunc, unsigned *subs_id);
int mm_sound_proxy_remove_volume_changed_callback(unsigned subs_id);
+int mm_sound_proxy_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_wrapper_cb func, void* userdata, mm_sound_proxy_userdata_free freefunc, unsigned *subs_id);
+int mm_sound_proxy_remove_ducking_state_changed_callback(unsigned subs_id);
int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute);
int mm_sound_proxy_emergent_exit(int exit_pid);
int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group);
return ret;
}
+EXPORT_API
+int mm_sound_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_cb func, void *user_data, unsigned int *subs_id)
+{
+ int ret = MM_ERROR_NONE;
+
+ if (func == NULL || subs_id == NULL) {
+ debug_error("argument is not valid");
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ ret = mm_sound_client_add_ducking_state_changed_callback(func, user_data, subs_id);
+ if (ret < 0) {
+ debug_error("Can not add ducking state changed callback, ret = %x", ret);
+ }
+
+ return ret;
+}
+
+EXPORT_API
+int mm_sound_remove_ducking_state_changed_callback(unsigned int subs_id)
+{
+ int ret = MM_ERROR_NONE;
+
+ ret = mm_sound_client_remove_ducking_state_changed_callback(subs_id);
+ if (ret < 0) {
+ debug_error("Can not remove ducking state changed callback, ret = %x", ret);
+ }
+
+ return ret;
+}
+
#ifdef TIZEN_TV
EXPORT_API
void mm_sound_dotnet_cleanup(int signo)
return MM_ERROR_NONE;
}
+int mm_sound_client_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_cb func, void* userdata, unsigned int *subs_id)
+{
+ int ret = MM_ERROR_NONE;
+ struct callback_data *cb_data = NULL;
+
+ debug_fenter();
+
+ GET_CB_DATA(cb_data, func, userdata, NULL);
+
+ ret = mm_sound_proxy_add_ducking_state_changed_callback((mm_sound_ducking_state_changed_wrapper_cb)func,
+ cb_data, g_free, subs_id);
+
+ debug_fleave();
+
+ return ret;
+}
+
+int mm_sound_client_remove_ducking_state_changed_callback(unsigned int subs_id)
+{
+ int ret = MM_ERROR_NONE;
+ debug_fenter();
+
+ ret = mm_sound_proxy_remove_ducking_state_changed_callback(subs_id);
+
+ debug_fleave();
+ return ret;
+}
+
int mm_sound_client_add_test_callback(mm_sound_test_cb func, void* user_data, unsigned int *subs_id)
{
int ret = MM_ERROR_NONE;
int ended_handle = 0;
g_variant_get(params, "(i)", &ended_handle);
((mm_sound_stop_callback_wrapper_func)(cb_data->user_cb))(ended_handle, cb_data->user_data);
+ } else if (event == AUDIO_EVENT_DUCKING_STATE_CHANGED) {
+ int idx = 0;
+ int is_ducked = 0;
+
+ g_variant_get(params, "(ii)", &idx, &is_ducked);
+
+ ((mm_sound_ducking_state_changed_wrapper_cb)(cb_data->user_cb))(idx, is_ducked, cb_data->user_data);
}
}
return ret;
}
+int mm_sound_proxy_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_wrapper_cb func, void* userdata, mm_sound_proxy_userdata_free freefunc, unsigned *subs_id)
+{
+ int ret = MM_ERROR_NONE;
+ struct callback_data *cb_data;
+
+ debug_fenter();
+
+ CB_DATA_NEW(cb_data, func, userdata, freefunc);
+
+ if ((ret = mm_sound_dbus_signal_subscribe_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_EVENT_DUCKING_STATE_CHANGED, dbus_callback, cb_data, simple_callback_data_free_func, &cb_data->subs_id)) != MM_ERROR_NONE)
+ debug_error("Add Duckding State changed callback failed");
+ else
+ *subs_id = cb_data->subs_id;
+
+ debug_fleave();
+
+ return ret;
+}
+
+int mm_sound_proxy_remove_ducking_state_changed_callback(unsigned subs_id)
+{
+ int ret = MM_ERROR_NONE;
+ debug_fenter();
+
+ if ((ret = mm_sound_dbus_signal_unsubscribe(subs_id)) != MM_ERROR_NONE)
+ debug_error("Remove Ducking State changed callback failed");
+
+ debug_fleave();
+ return ret;
+}
+
int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute)
{
int ret = MM_ERROR_NONE;
Name: libmm-sound
Summary: MMSound Package contains client lib and sound_server binary
-Version: 0.12.44
+Version: 0.12.45
Release: 0
Group: System/Libraries
License: Apache-2.0