pa_assert(c);
- pa_log_info("pa_device_manager_get");
+ pa_log_debug("pa_device_manager_get");
if ((dm = pa_shared_get(c, SHARED_DEVICE_MANAGER)))
return pa_device_manager_ref(dm);
pa_assert(dm);
pa_assert(PA_REFCNT_VALUE(dm) > 0);
- pa_log_info("pa_device_manager_ref");
PA_REFCNT_INC(dm);
+ pa_log_debug("pa_device_manager_ref to %d", PA_REFCNT_VALUE(dm));
return dm;
}
pa_assert(dm);
pa_assert(PA_REFCNT_VALUE(dm) > 0);
- pa_log_info("pa_device_manager_unref");
+ pa_log_debug("pa_device_manager_unref to %d", PA_REFCNT_VALUE(dm) - 1);
if (PA_REFCNT_DEC(dm) > 0)
return;
}
u->device_manager = pa_device_manager_get(u->core);
- u->stream_manager = pa_stream_manager_init(u->core);
+ u->stream_manager = pa_stream_manager_get(u->core);
/* load null sink/source */
args = pa_sprintf_malloc("sink_name=%s", SINK_NAME_NULL);
pa_device_manager_unref(u->device_manager);
if (u->stream_manager)
- pa_stream_manager_done(u->stream_manager);
+ pa_stream_manager_unref(u->stream_manager);
if (u->communicator.comm) {
if (u->communicator.comm_hook_select_proper_sink_or_source_slot)
#include <pulsecore/sink.h>
#include <pulsecore/modargs.h>
#include <pulsecore/macro.h>
+#include <pulsecore/shared.h>
#include <json.h>
#include "stream-manager.h"
#include "stream-manager-dbus-priv.h"
#endif
+#define SHARED_STREAM_MANAGER "tizen-stream-manager"
+
#define IS_AVAILABLE_DIRECTION(stream_type, device_direction) \
((stream_type == STREAM_SINK_INPUT) ? (device_direction & DM_DEVICE_DIRECTION_OUT) : (device_direction & DM_DEVICE_DIRECTION_IN))
#define GET_DIRECTION(stream) \
return is_filter_apply_stream(stream, stream_type);
}
-pa_stream_manager* pa_stream_manager_init(pa_core *c) {
+pa_stream_manager* pa_stream_manager_get(pa_core *c) {
pa_stream_manager *m;
pa_assert(c);
+ pa_log_debug("pa_stream_manager_get");
+
+ if ((m = pa_shared_get(c, SHARED_STREAM_MANAGER)))
+ return pa_stream_manager_ref(m);
+
m = pa_xnew0(pa_stream_manager, 1);
+ PA_REFCNT_INIT(m);
m->core = c;
if (!(m->hal = pa_hal_interface_get(c)))
set_initial_active_device(m);
+ pa_shared_set(c, SHARED_STREAM_MANAGER, m);
+
return m;
fail:
return 0;
}
-void pa_stream_manager_done(pa_stream_manager *m) {
+pa_stream_manager* pa_stream_manager_ref(pa_stream_manager *m) {
+ pa_assert(m);
+ pa_assert(PA_REFCNT_VALUE(m) > 0);
+
+ PA_REFCNT_INC(m);
+ pa_log_info("pa_stream_manager_ref to %d", PA_REFCNT_VALUE(m));
+
+ return m;
+}
+
+void pa_stream_manager_unref(pa_stream_manager *m) {
void *state;
pa_idxset *streams;
pa_assert(m);
+ pa_assert(PA_REFCNT_VALUE(m) > 0);
+
+ pa_log_info("pa_stream_manager_unref to %d", PA_REFCNT_VALUE(m) - 1);
+ if (PA_REFCNT_DEC(m) > 0)
+ return;
if (m->comm.comm) {
if (m->comm.comm_hook_device_connection_changed_slot)
bool pa_stream_manager_check_name_is_vstream(void *stream, stream_type_t type, bool is_new_data);
bool pa_stream_manager_check_filter_apply_stream(void *stream, stream_type_t stream_type);
-pa_stream_manager* pa_stream_manager_init(pa_core *c);
-void pa_stream_manager_done(pa_stream_manager* m);
+pa_stream_manager* pa_stream_manager_get(pa_core *c);
+pa_stream_manager* pa_stream_manager_ref(pa_stream_manager *m);
+void pa_stream_manager_unref(pa_stream_manager *m);
#endif