[pulseaudio-discuss] [PATCH v13 01/10] bluetooth: Implement reading SO_TIMESTAMP for A2DP source
Georg Chini
georg at chini.tk
Sat Nov 9 11:34:02 UTC 2019
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.
> +
> + 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 should
run fine even when system time is used.
More information about the pulseaudio-discuss
mailing list