[alsa-devel] [PATCH - JACK PCM plugin] jack: Write only valid values to the internal hw_ptr
Jaroslav Kysela
perex at perex.cz
Thu Feb 8 11:54:13 CET 2018
Dne 8.2.2018 v 09:49 Wischer, Timo (ADITG/ESB) napsal(a):
> Hello all,
>
> any comments so far?
The patch looks good. Applied. Thanks.
Jaroslav
>
> It would be great if someone could have a look
> because I have some further fixes pending.
>
> Best regards
>
> Timo Wischer
>
> Advanced Driver Information Technology GmbH
> Engineering Software Base (ADITG/ESB)
> Robert-Bosch-Str. 200
> 31139 Hildesheim
> Germany
>
> Tel. +49 5121 49 6938
> Fax +49 5121 49 6999
> twischer at de.adit-jv.com
>
> ADIT is a joint venture company of Robert Bosch GmbH/Robert Bosch Car Multimedia GmbH and DENSO Corporation
> Sitz: Hildesheim, Registergericht: Amtsgericht Hildesheim HRB 3438
> Geschäftsführung: Wilhelm Grabow, Ken Yaguchi
>
> ________________________________________
> From: Wischer, Timo (ADITG/ESB)
> Sent: Monday, January 22, 2018 9:37 AM
> To: patch at alsa-project.org
> Cc: alsa-devel at alsa-project.org; Wischer, Timo (ADITG/ESB)
> Subject: [PATCH - JACK PCM plugin] jack: Write only valid values to the internal hw_ptr
>
> From: Timo Wischer <twischer at de.adit-jv.com>
>
> Otherwise the ALSA thread could for example read a hw_ptr >
> buffer_size
>
> Signed-off-by: Timo Wischer <twischer at de.adit-jv.com>
>
> diff --git a/jack/pcm_jack.c b/jack/pcm_jack.c
> index 4468ede..3aed332 100644
> --- a/jack/pcm_jack.c
> +++ b/jack/pcm_jack.c
> @@ -137,6 +137,7 @@ static int
> snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
> {
> snd_pcm_jack_t *jack = io->private_data;
> + snd_pcm_uframes_t hw_ptr;
> const snd_pcm_channel_area_t *areas;
> snd_pcm_uframes_t xfer = 0;
> unsigned int channel;
> @@ -155,12 +156,13 @@ snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
> return 0;
> }
> }
> -
> +
> + hw_ptr = jack->hw_ptr;
> areas = snd_pcm_ioplug_mmap_areas(io);
>
> while (xfer < nframes) {
> snd_pcm_uframes_t frames = nframes - xfer;
> - snd_pcm_uframes_t offset = jack->hw_ptr;
> + snd_pcm_uframes_t offset = hw_ptr;
> snd_pcm_uframes_t cont = io->buffer_size - offset;
>
> if (cont < frames)
> @@ -173,10 +175,11 @@ snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
> snd_pcm_area_copy(&areas[channel], offset, &jack->areas[channel], xfer, frames, io->format);
> }
>
> - jack->hw_ptr += frames;
> - jack->hw_ptr %= io->buffer_size;
> + hw_ptr += frames;
> + hw_ptr %= io->buffer_size;
> xfer += frames;
> }
> + jack->hw_ptr = hw_ptr;
>
> pcm_poll_unblock_check(io); /* unblock socket for polling if needed */
>
> --
> 2.7.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
--
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
More information about the Alsa-devel
mailing list