+
+int _mmcamcorder_send_sound_play_message(GDBusConnection *conn, _MMCamcorderGDbusCbInfo *gdbus_info,
+ const char *sample_name, const char *stream_role, const char *volume_gain, int sync_play)
+{
+ int get_value = 0;
+ int ret = MM_ERROR_NONE;
+ GVariant *params = NULL, *result = NULL;
+ guint subs_id = 0;
+
+ if (!conn || !gdbus_info) {
+ _mmcam_dbg_err("Invalid parameter %p %p", conn, gdbus_info);
+ return MM_ERROR_CAMCORDER_INTERNAL;
+ }
+
+ params = g_variant_new("(sss)", sample_name, stream_role, volume_gain);
+ result = g_variant_new("(i)", get_value);
+
+ ret = __gdbus_method_call_sync(conn, "org.pulseaudio.Server",
+ "/org/pulseaudio/SoundPlayer", "org.pulseaudio.SoundPlayer",
+ "SamplePlay", params, &result, TRUE);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("Dbus Call on Client Error");
+ return ret;
+ }
+
+ if (result) {
+ g_variant_get(result, "(i)", &get_value);
+ _mmcam_dbg_log("played index : %d", get_value);
+ } else {
+ _mmcam_dbg_err("replied result is null");
+ return MM_ERROR_CAMCORDER_INTERNAL;
+ }
+
+ g_mutex_lock(&gdbus_info->sync_mutex);
+
+ if (gdbus_info->subscribe_id > 0) {
+ _mmcam_dbg_warn("subscribe_id[%u] is remained. remove it.", gdbus_info->subscribe_id);
+
+ g_dbus_connection_signal_unsubscribe(conn, gdbus_info->subscribe_id);
+
+ gdbus_info->subscribe_id = 0;
+ }
+
+ gdbus_info->is_playing = TRUE;
+ gdbus_info->param = get_value;
+
+ ret = __gdbus_subscribe_signal(conn,
+ "/org/pulseaudio/SoundPlayer", "org.pulseaudio.SoundPlayer", "EOS",
+ __gdbus_stream_eos_cb, &subs_id, gdbus_info);
+
+ if (ret == MM_ERROR_NONE)
+ gdbus_info->subscribe_id = subs_id;
+
+ g_mutex_unlock(&gdbus_info->sync_mutex);
+
+ if (sync_play && ret == MM_ERROR_NONE)
+ ret = __gdbus_wait_for_cb_return(gdbus_info, G_DBUS_CB_TIMEOUT_MSEC);
+
+ return ret;
+}
+
+