static void handle_sample_play(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_sound_play(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_sound_stop(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void send_signal_for_eos(DBusConnection *conn, int32_t stream_idx, dbus_bool_t stopped_by_user);
enum method_handler_index {
METHOD_HANDLER_SIMPLE_PLAY,
pa_sink_input_kill(si);
pa_dbus_send_empty_reply(conn, msg);
+
+ send_signal_for_eos(conn, stream_idx, TRUE);
}
static DBusHandlerResult handle_methods(DBusConnection *conn, DBusMessage *msg, void *userdata) {
- int idx = 0;
+ int idx = 0;
pa_assert(conn);
pa_assert(msg);
return DBUS_HANDLER_RESULT_HANDLED;
}
-static void send_signal_for_eos(struct userdata *u, int32_t stream_idx) {
+static void send_signal_for_eos(DBusConnection *conn, int32_t stream_idx, dbus_bool_t stopped_by_user) {
DBusMessage *signal_msg = NULL;
- pa_assert(u);
+ pa_assert(conn);
- pa_log_info("Send EOS signal for stream_idx(%d)", stream_idx);
+ pa_log_info("Send EOS signal for stream_idx(%d), stopped_by_user(%d)", stream_idx, stopped_by_user);
- pa_assert_se((signal_msg = dbus_message_new_signal(SOUND_PLAYER_OBJECT_PATH, SOUND_PLAYER_INTERFACE, SOUND_PLAYER_SIGNAL_EOS)));
- pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_INT32, &stream_idx, DBUS_TYPE_INVALID));
- pa_assert_se(dbus_connection_send(pa_dbus_connection_get(u->dbus_conn), signal_msg, NULL));
+ pa_assert_se((signal_msg = dbus_message_new_signal(SOUND_PLAYER_OBJECT_PATH,
+ SOUND_PLAYER_INTERFACE,
+ SOUND_PLAYER_SIGNAL_EOS)));
+ pa_assert_se(dbus_message_append_args(signal_msg,
+ DBUS_TYPE_INT32, &stream_idx,
+ DBUS_TYPE_BOOLEAN, &stopped_by_user,
+ DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_connection_send(conn, signal_msg, NULL));
dbus_message_unref(signal_msg);
}
#endif
static pa_hook_result_t sink_input_unlink_cb(pa_core *core, pa_sink_input *i, struct userdata *u) {
int32_t *stream_idx = NULL;
uint32_t idx = 0;
+
pa_core_assert_ref(core);
pa_sink_input_assert_ref(i);
+ pa_assert(u);
pa_log_debug("start sink_input_unlink_cb, i(%p, index:%u)", i, i->index);
if (*stream_idx == (int32_t)(i->index)) {
#ifndef USE_DBUS_PROTOCOL
/* Send EOS signal for this stream */
- send_signal_for_eos(u, *stream_idx);
+ send_signal_for_eos(pa_dbus_connection_get(u->dbus_conn), *stream_idx, FALSE);
#endif
pa_idxset_remove_by_data(u->stream_idxs, stream_idx, NULL);
pa_xfree(stream_idx);