+static void command_set_port_latency_offset(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
+ pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
+ const char *port_name, *card_name;
+ uint32_t idx = PA_INVALID_INDEX;
+ int64_t offset;
+ pa_card *card = NULL;
+ pa_device_port *port = NULL;
+
+ pa_native_connection_assert_ref(c);
+ pa_assert(t);
+
+ if (pa_tagstruct_getu32(t, &idx) < 0 ||
+ pa_tagstruct_gets(t, &card_name) < 0 ||
+ pa_tagstruct_gets(t, &port_name) < 0 ||
+ pa_tagstruct_gets64(t, &offset) < 0 ||
+ !pa_tagstruct_eof(t)) {
+ protocol_error(c);
+ return;
+ }
+
+ CHECK_VALIDITY(c->pstream, c->authorized, tag, PA_ERR_ACCESS);
+ CHECK_VALIDITY(c->pstream, !card_name || pa_namereg_is_valid_name(card_name), tag, PA_ERR_INVALID);
+ CHECK_VALIDITY(c->pstream, (idx != PA_INVALID_INDEX) ^ (card_name != NULL), tag, PA_ERR_INVALID);
+ CHECK_VALIDITY(c->pstream, port_name, tag, PA_ERR_INVALID);
+
+ if (idx != PA_INVALID_INDEX)
+ card = pa_idxset_get_by_index(c->protocol->core->cards, idx);
+ else
+ card = pa_namereg_get(c->protocol->core, card_name, PA_NAMEREG_CARD);
+
+ CHECK_VALIDITY(c->pstream, card, tag, PA_ERR_NOENTITY);
+
+ port = pa_hashmap_get(card->ports, port_name);
+ CHECK_VALIDITY(c->pstream, port, tag, PA_ERR_NOENTITY);
+
+ pa_device_port_set_latency_offset(port, offset);
+
+ pa_pstream_send_simple_ack(c->pstream, tag);
+}
+