#include "communicator.h"
#include <pulsecore/shared.h>
+#define SHARED_COMMUNICATOR "tizen-communicator"
+
struct _pa_communicator {
PA_REFCNT_DECLARE;
pa_assert(core);
- if ((c = pa_shared_get(core, "communicator")))
+ if ((c = pa_shared_get(core, SHARED_COMMUNICATOR)))
return pa_communicator_ref(c);
c = pa_xnew0(pa_communicator, 1);
for (i = 0; i < PA_COMMUNICATOR_HOOK_MAX; i++)
pa_hook_init(&c->hooks[i], c);
- pa_shared_set(core, "communicator", c);
+ pa_shared_set(core, SHARED_COMMUNICATOR, c);
return c;
}
pa_hook_done(&c->hooks[i]);
if (c->core)
- pa_shared_remove(c->core, "communicator");
+ pa_shared_remove(c->core, SHARED_COMMUNICATOR);
pa_xfree(c);
}
#include <pulsecore/strbuf.h>
#include <pulsecore/modargs.h>
#include <pulsecore/namereg.h>
+#include <pulsecore/shared.h>
#include <vconf.h>
#include <vconf-keys.h>
#include "communicator.h"
#include "device-manager.h"
+#define SHARED_DEVICE_MANAGER "tizen-device-manager"
+
#define DEVICE_MAP_FILE "/etc/pulse/device-map.json"
#define DEVICE_PROFILE_MAX 2
#define DEVICE_STR_MAX 30
};
struct pa_device_manager {
+ PA_REFCNT_DECLARE;
+
pa_core *core;
pa_hook_slot *sink_put_hook_slot, *sink_state_changed_slot, *sink_unlink_hook_slot;
pa_hook_slot *source_put_hook_slot, *source_state_changed_slot, *source_unlink_hook_slot;
return -1;
}
-pa_device_manager* pa_device_manager_init(pa_core *c) {
+pa_device_manager* pa_device_manager_get(pa_core *c) {
pa_device_manager *dm;
- pa_log_debug("pa_device_manager_init start");
+ pa_assert(c);
+
+ if ((dm = pa_shared_get(c, SHARED_DEVICE_MANAGER)))
+ return pa_device_manager_ref(dm);
dm = pa_xnew0(pa_device_manager, 1);
+ PA_REFCNT_INIT(dm);
dm->core = c;
dm->bt_sco_status = DM_DEVICE_BT_SCO_STATUS_DISCONNECTED;
pa_log_warn("Set default source with mic(normal) failed");
}
- pa_log_debug("pa_device_manager_init end");
+ pa_shared_set(c, SHARED_DEVICE_MANAGER, dm);
return dm;
}
-void pa_device_manager_done(pa_device_manager *dm) {
+pa_device_manager* pa_device_manager_ref(pa_device_manager *dm) {
+ pa_assert(dm);
+ pa_assert(PA_REFCNT_VALUE(dm) > 0);
- if (!dm)
- return;
+ PA_REFCNT_INC(dm);
- pa_log_debug("pa_device_manager_done start");
+ return dm;
+}
+
+void pa_device_manager_unref(pa_device_manager *dm) {
+ pa_assert(dm);
+ pa_assert(PA_REFCNT_VALUE(dm) > 0);
+
+ if (PA_REFCNT_DEC(dm) > 0)
+ return;
if (dm->sink_put_hook_slot)
pa_hook_slot_free(dm->sink_put_hook_slot);
dbus_deinit(dm);
- pa_log_debug("pa_device_manager_done end");
+ if (dm->core)
+ pa_shared_remove(dm->core, SHARED_DEVICE_MANAGER);
+
+ pa_xfree(dm);
}
dm_device *device;
} pa_device_manager_hook_data_for_info_changed;
-pa_device_manager* pa_device_manager_init(pa_core* core);
-void pa_device_manager_done(pa_device_manager *dm);
+pa_device_manager* pa_device_manager_get(pa_core* c);
+pa_device_manager* pa_device_manager_ref(pa_device_manager *dm);
+void pa_device_manager_unref(pa_device_manager *dm);
/* get device or list */
pa_idxset* pa_device_manager_get_device_list(pa_device_manager *dm);
#include "tizen-audio.h"
#include <pulsecore/shared.h>
+#define SHARED_HAL_MANAGER "tizen-hal-manager"
+
/* Audio HAL library */
#define LIB_TIZEN_AUDIO "libtizen-audio.so"
pa_assert(core);
- if ((h = pa_shared_get(core, "hal-manager")))
+ if ((h = pa_shared_get(core, SHARED_HAL_MANAGER)))
return pa_hal_manager_ref(h);
h = pa_xnew0(pa_hal_manager, 1);
}
}
- pa_shared_set(core, "tizen-audio-data", h->data);
- pa_shared_set(core, "tizen-audio-interface", &h->intf);
-
} else {
pa_log_error("open hal_manager failed :%s", dlerror());
return NULL;
}
- pa_shared_set(core, "hal-manager", h);
+ pa_shared_set(core, SHARED_HAL_MANAGER, h);
return h;
}
}
if (h->core)
- pa_shared_remove(h->core, "hal-manager");
+ pa_shared_remove(h->core, SHARED_HAL_MANAGER);
pa_xfree(h);
}
}
u->stream_manager = pa_stream_manager_init(u->core);
- u->device_manager = pa_device_manager_init(u->core);
+ u->device_manager = pa_device_manager_get(u->core);
/* load null sink/source */
args = pa_sprintf_malloc("sink_name=%s", SINK_NULL);
dbus_deinit(u);
#endif
if (u->device_manager)
- pa_device_manager_done(u->device_manager);
+ pa_device_manager_unref(u->device_manager);
if (u->stream_manager)
pa_stream_manager_done(u->stream_manager);