pa_hook_slot *device_connection_changed_slot;
pa_hook_slot *transport_state_changed_slot;
#ifdef __TIZEN_BT__
+ pa_hook_slot *transport_delay_changed_slot;
pa_hook_slot *sco_state_changed_slot;
#endif
pa_hook_slot *transport_speaker_gain_changed_slot;
pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
u->sink->n_volume_steps = 16;
}
+#ifdef __TIZEN__
+ pa_device_port_set_latency_offset(u->sink->active_port, u->transport->delay);
+ pa_log_info("transport[%s], sink[%s], delay[%" PRIu64 "us]", u->transport->path, u->sink->name, u->transport->delay);
+#endif
return 0;
}
return PA_HOOK_OK;
}
+
+/* Run from main thread */
+static pa_hook_result_t transport_delay_changed_cb(pa_bluetooth_discovery *y, pa_bluetooth_transport *t, struct userdata *u) {
+ pa_assert(t);
+ pa_assert(u);
+
+ if (t == u->transport && t->device == u->device && u->sink) {
+ pa_device_port_set_latency_offset(u->sink->active_port, u->transport->delay);
+ pa_log_info("transport[%s], sink[%s], delay[%" PRIu64 "us]", u->transport->path, u->sink->name, u->transport->delay);
+ }
+
+ return PA_HOOK_OK;
+}
#endif
pa_hook_connect(pa_bluetooth_discovery_hook(u->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_MICROPHONE_GAIN_CHANGED), PA_HOOK_NORMAL, (pa_hook_cb_t) transport_microphone_gain_changed_cb, u);
#ifdef __TIZEN_BT__
+ u->transport_delay_changed_slot =
+ pa_hook_connect(pa_bluetooth_discovery_hook(u->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_DELAY_CHANGED),
+ PA_HOOK_NORMAL, (pa_hook_cb_t) transport_delay_changed_cb, u);
+
u->sco_state_changed_slot =
pa_hook_connect(pa_bluetooth_discovery_hook(u->discovery, PA_BLUETOOTH_HOOK_SCO_STATE_CHANGED),
PA_HOOK_NORMAL, (pa_hook_cb_t) sco_state_changed_cb, u);
pa_hook_slot_free(u->transport_speaker_gain_changed_slot);
#ifdef __TIZEN_BT__
+ if (u->transport_delay_changed_slot)
+ pa_hook_slot_free(u->transport_delay_changed_slot);
+
if (u->sco_state_changed_slot)
pa_hook_slot_free(u->sco_state_changed_slot);
#endif