On Saturday 09 November 2019 12:34:02 Georg Chini wrote: > On 06.10.19 19:58, Pali Rohár wrote: > > --- > > src/modules/bluetooth/module-bluez5-device.c | 33 ++++++++++++++++++++++++++-- > > 1 file changed, 31 insertions(+), 2 deletions(-) > > > > diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c > > index cff1cd6f2..9a81f4c69 100644 > > --- a/src/modules/bluetooth/module-bluez5-device.c > > +++ b/src/modules/bluetooth/module-bluez5-device.c > > @@ -548,13 +548,29 @@ static int a2dp_process_push(struct userdata *u) { > > a2dp_prepare_decoder_buffer(u); > > for (;;) { > > + uint8_t aux[1024]; > > + struct iovec iov; > > + struct cmsghdr *cm; > > + struct msghdr m; > > bool found_tstamp = false; > > pa_usec_t tstamp; > > uint8_t *ptr; > > ssize_t l; > > size_t processed; > > - l = pa_read(u->stream_fd, u->decoder_buffer, u->decoder_buffer_size, &u->stream_write_type); > > + pa_zero(m); > > + pa_zero(aux); > > + pa_zero(iov); > > + > > + m.msg_iov = &iov; > > + m.msg_iovlen = 1; > > + m.msg_control = aux; > > + m.msg_controllen = sizeof(aux); > > + > > + iov.iov_base = u->decoder_buffer; > > + iov.iov_len = u->decoder_buffer_size; > > + > > + l = recvmsg(u->stream_fd, &m, 0); > > if (l <= 0) { > > @@ -574,8 +590,21 @@ static int a2dp_process_push(struct userdata *u) { > > pa_assert((size_t) l <= u->decoder_buffer_size); > > /* TODO: get timestamp from rtp */ > > You should remove the TODO from the comment. Why? This comment has nothing to do with patch in this email. This patch does *not* implement reading timestamp from RTP packet. It reads SO_TIMESTAMP from socket added by kernel. > > > + > > + for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm)) { > > + if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SO_TIMESTAMP) { > > + struct timeval *tv = (struct timeval*) CMSG_DATA(cm); > > + pa_rtclock_from_wallclock(tv); > > + tstamp = pa_timeval_load(tv); > > + found_tstamp = true; > > + break; > > + } > > + } > > + > > if (!found_tstamp) { > > - /* pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!"); */ > > + PA_ONCE_BEGIN { > > + pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!"); > > + } PA_ONCE_END; > > tstamp = pa_rtclock_now(); > > } > > Otherwise looks good, though I wonder if the warning is really necessary. It was there before, so I have not deleted it. It is also there for SCO socket. > It should run fine even when system time is used. Maybe kernel can for some reason do not add it? I do not know. -- Pali Rohár pali.rohar@xxxxxxxxx
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss