return t;
}
-void tone_free(struct tone *t) {
- if (!t)
- return;
-
- pa_xfree(t->info);
- pa_xfree(t);
-
- return 0;
-}
-
int tone_peek_fixed_size(struct tone *t, pa_sink_input *si, pa_memchunk *chunk, uint32_t length) {
short *buf;
uint32_t i;
static int sink_input_pop_cb(pa_sink_input *i, size_t length, pa_memchunk *chunk) {
struct tone *t = (struct tone *)i->userdata;
- if (!t)
+ if (!PA_SINK_INPUT_IS_LINKED(i->state))
return -1;
if (tone_peek_fixed_size(t, i, chunk, length) < 0) {
return 0;
}
-static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
+static void sink_input_detach_cb(pa_sink_input *i) {
struct tone *t = i->userdata;
if (!t)
return;
+
+ pa_xfree(t->info);
+ pa_xfree(t);
}
-static void sink_input_kill_cb(pa_sink_input *i) {
- struct tone *t = i->userdata;
+static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
+ return;
+}
- tone_free(t);
- pa_sink_input_unlink(i);
- pa_sink_input_unref(i);
+static void sink_input_kill_cb(pa_sink_input *i) {
+ return;
}
+
static int sink_input_process_msg(pa_msgobject *o, int code, void*userdata, int64_t offset, pa_memchunk *chunk) {
pa_sink_input *i = PA_SINK_INPUT(o);
switch (code) {
case TONE_SOUND_MESSAGE_UNLINK:
- pa_sink_input_kill(i);
- break;
+ pa_sink_input_unlink(i);
+ pa_sink_input_unref(i);
+ return 0;
}
return pa_sink_input_process_msg(o, code, userdata, offset, chunk);
i->userdata = t;
i->pop = sink_input_pop_cb;
i->kill = sink_input_kill_cb;
+ i->detach = sink_input_detach_cb;
i->process_rewind = sink_input_process_rewind_cb;
i->parent.process_msg = sink_input_process_msg;
static void handle_tone_stop(DBusConnection *conn, DBusMessage *msg, void *userdata) {
struct userdata *u = (struct userdata *)userdata;
uint32_t stream_idx;
- pa_sink_input *si;
+ pa_sink_input *i;
pa_assert(conn);
pa_assert(msg);
pa_log_info("stop tone %u", stream_idx);
- si = pa_idxset_get_by_index(u->module->core->sink_inputs, stream_idx);
- if (!si) {
+ i = pa_idxset_get_by_index(u->module->core->sink_inputs, stream_idx);
+ if (!i) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "%s",
- "org.tizen.multimedia.audio.InvalidState");
+ "org.tizen.multimedia.audio.InvalidArgument");
return;
}
- pa_sink_input_kill(si);
+ pa_sink_input_unlink(i);
+ pa_sink_input_unref(i);
pa_dbus_send_empty_reply(conn, msg);
}