[pulseaudio-discuss] [PATCH 52/56] bluetooth: Create I/O thread function for BlueZ 5 cards

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Jul 25 08:02:32 PDT 2013


On Fri, 2013-07-12 at 15:07 -0300, jprvita at gmail.com wrote:
> +/* Run from IO thread */
> +static int a2dp_process_push(struct userdata *u) {
> +    int ret = 0;
> +    pa_memchunk memchunk;
> +
> +    pa_assert(u);
> +    pa_assert(u->profile == PROFILE_A2DP_SOURCE);
> +    pa_assert(u->source);
> +    pa_assert(u->read_smoother);
> +
> +    memchunk.memblock = pa_memblock_new(u->core->mempool, u->read_block_size);
> +    memchunk.index = memchunk.length = 0;
> +
> +    for (;;) {
> +        bool found_tstamp = false;
> +        pa_usec_t tstamp;
> +        struct sbc_info *sbc_info;
> +        struct rtp_header *header;
> +        struct rtp_payload *payload;
> +        const void *p;
> +        void *d;
> +        ssize_t l;
> +        size_t to_write, to_decode;
> +
> +        a2dp_prepare_buffer(u);
> +
> +        sbc_info = &u->sbc_info;
> +        header = sbc_info->buffer;
> +        payload = (struct rtp_payload*) ((uint8_t*) sbc_info->buffer + sizeof(*header));
> +
> +        l = pa_read(u->stream_fd, sbc_info->buffer, sbc_info->buffer_size, &u->stream_write_type);
> +
> +        if (l <= 0) {
> +
> +            if (l < 0 && errno == EINTR)
> +                /* Retry right away if we got interrupted */
> +                continue;
> +
> +            else if (l < 0 && errno == EAGAIN)
> +                /* Hmm, apparently the socket was not readable, give up for now. */
> +                break;
> +
> +            pa_log_error("Failed to read data from socket: %s", l < 0 ? pa_cstrerror(errno) : "EOF");
> +            ret = -1;
> +            break;
> +        }
> +
> +        pa_assert((size_t) l <= sbc_info->buffer_size);
> +
> +        u->read_index += (uint64_t) l;

This is wrong. read_index is occasionally converted to time, which means
that read_index should count the PCM bytes. However, l is the number of
bytes read from the socket, and that data contains the rtp headers, and
the audio data isn't in PCM format either.

-- 
Tanu



More information about the pulseaudio-discuss mailing list