]> git.alsa-project.org Git - alsa-plugins.git/log
alsa-plugins.git
4 years agoa52: implement dump callback to dump the output parameters
Jaroslav Kysela [Wed, 16 Jun 2021 07:41:34 +0000 (09:41 +0200)]
a52: implement dump callback to dump the output parameters

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: allow to specify the avcodec
Jaroslav Kysela [Wed, 16 Jun 2021 07:29:56 +0000 (09:29 +0200)]
a52: allow to specify the avcodec

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: Use av_frame_get_buffer() for buffer allocation
Takashi Iwai [Tue, 15 Jun 2021 17:32:17 +0000 (19:32 +0200)]
a52: Use av_frame_get_buffer() for buffer allocation

A more modern one for the recent API.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoa52: Correct data transfer in planar mode
Takashi Iwai [Tue, 15 Jun 2021 17:31:18 +0000 (19:31 +0200)]
a52: Correct data transfer in planar mode

The buffer offset was incorrectly calculated in samples.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
4 years agoa52: handle the source sample format correctly
Jaroslav Kysela [Mon, 14 Jun 2021 14:35:17 +0000 (16:35 +0200)]
a52: handle the source sample format correctly

The recent a52 encoder in ffmpeg accepts planar S32 (fixed encoder)
or planar float (normal encoder) only. Extend the routines to support
all combinations of 16-bit, 32-bit and float source samples.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: limit the number of periods for ioplug from slave PCM
Jaroslav Kysela [Tue, 15 Jun 2021 13:25:47 +0000 (15:25 +0200)]
a52: limit the number of periods for ioplug from slave PCM

Intel HDMI:

  PERIOD_SIZE: [32 4272000]
  PERIOD_BYTES: [128 17088000]
  PERIODS: [2 32]
  BUFFER_SIZE: [64 8544000]
  BUFFER_BYTES: [256 34176000]

Selected:

  PERIOD_SIZE: 768
  PERIOD_BYTES: 3072
  PERIODS: 32
  BUFFER_SIZE: 24576
  BUFFER_BYTES: 98304

The a52_hw_params() tries to set the big 4271616 buffer size (frames)
for speaker-test which is beyond the maximal slave buffer.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: don't call avcodec_register_all() on newer libavocdec versions
James Almer [Tue, 8 Jun 2021 20:08:41 +0000 (17:08 -0300)]
a52: don't call avcodec_register_all() on newer libavocdec versions

It's no longer available starting with LIBAVCODEC_VERSION_MAJOR == 59.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: support the new libavcodec encode API
James Almer [Sun, 6 Jun 2021 17:55:08 +0000 (14:55 -0300)]
a52: support the new libavcodec encode API

ffmpeg 4.4 is the last version with avcodec_encode_audio2(). Starting from the
next release the new decoupled input-output API will be the only one available.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: propagate errors from do_encode()
James Almer [Sun, 6 Jun 2021 17:38:11 +0000 (14:38 -0300)]
a52: propagate errors from do_encode()

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoa52: add some padding bytes to outbuf
James Almer [Sun, 6 Jun 2021 15:40:37 +0000 (12:40 -0300)]
a52: add some padding bytes to outbuf

Since it's used as AVPacket payload, the API requires it to be padded.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/23
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agojack: add -lpthread to Makefile
Jaroslav Kysela [Mon, 14 Jun 2021 14:07:25 +0000 (16:07 +0200)]
jack: add -lpthread to Makefile

Fixes: 72b1bd9 ("jack: Make the running state tracing code more robust to multi-thread access.")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agojack: Make the running state tracing code more robust to multi-thread access.
Jerome M. Berger [Mon, 14 Jun 2021 09:18:34 +0000 (11:18 +0200)]
jack: Make the running state tracing code more robust to multi-thread access.

Fixes: https://github.com/alsa-project/alsa-plugins/issues/11
Fixes: 2352e4e ("jack: trace the running state")
Signed-off-by: "Jerome M. Berger" <jeberger@free.fr>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agojack: trace the running state
Jaroslav Kysela [Fri, 11 Jun 2021 19:09:03 +0000 (21:09 +0200)]
jack: trace the running state

Fixes: https://github.com/alsa-project/alsa-plugins/issues/11
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoRelease v1.2.5 v1.2.5
Jaroslav Kysela [Thu, 27 May 2021 17:18:39 +0000 (19:18 +0200)]
Release v1.2.5

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agopcm_a52: Don't move bytes within the outbuf
Alexander Motzkau [Wed, 18 Mar 2020 21:38:18 +0000 (22:38 +0100)]
pcm_a52: Don't move bytes within the outbuf

The output buffer will never be appended, but a new a52 frame will always
be written in its entirety to outbuf. Therefore we don't need to move
bytes that were not yet sent to the slave to the beginning of the output
buffer.

Also don't overwrite the output buffer when there are still frames
to be sent.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/8
Signed-off-by: Alexander Motzkau <a.motzkau@web.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agopcm_a52: Don't pass EAGAIN errors from the slave to the caller
Alexander Motzkau [Wed, 18 Mar 2020 21:33:44 +0000 (22:33 +0100)]
pcm_a52: Don't pass EAGAIN errors from the slave to the caller

EAGAIN can happen when we already could have passed frames to the slave.
If we then return EAGAIN to our caller it wrongly indicates that no frames
were send. Therefore return the processed frames instead.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/8
Signed-off-by: Alexander Motzkau <a.motzkau@web.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agopcm_a52: Determine virtual hardware pointer upon slave pointer
Alexander Motzkau [Wed, 18 Mar 2020 21:28:05 +0000 (22:28 +0100)]
pcm_a52: Determine virtual hardware pointer upon slave pointer

Calculate the pointer upon the hardware pointer of the slave by
querying its available frames. Thereby we can guarantee that our
transfer routine will accept as many frames as the pointer indicates.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/8
Signed-off-by: Alexander Motzkau <a.motzkau@web.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agousb_stream: use snd_config_get_card() to decode the card number
Jaroslav Kysela [Tue, 25 May 2021 15:48:22 +0000 (17:48 +0200)]
usb_stream: use snd_config_get_card() to decode the card number

BugLink: https://github.com/alsa-project/alsa-plugins/issues/20
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agooss: fix the config (port -> device)
Jaroslav Kysela [Tue, 25 May 2021 15:41:59 +0000 (17:41 +0200)]
oss: fix the config (port -> device)

BugLink: https://github.com/alsa-project/alsa-plugins/issues/20
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agojack: add option to allow non-jack-aligned period size
Andreas Pape [Tue, 24 Nov 2020 15:48:03 +0000 (16:48 +0100)]
jack: add option to allow non-jack-aligned period size

Commit 72337f1dcb2df6a2b7fdae93e88d7dd3a7e97ab4 forces ALSA period size
to be exact multiple of the JACK daemon period size.
There are good reasons to align the period size, but completely disallowing non aligned periods is too restrictive.
This patch adds an option "align_psize" which allows to optionally revert to original behavior.

Signed-off-by: Andreas Pape <apape@de.adit-jv.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agoupmix: complete generalizing format
Benedek Kupper [Mon, 10 Feb 2020 15:09:10 +0000 (16:09 +0100)]
upmix: complete generalizing format

BugLink: https://github.com/alsa-project/alsa-plugins/pull/6
Signed-off-by: Benedek Kupper <benedek.kupper@streamunlimited.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
4 years agopulse: pcm - handle reading pulse stream hole
Igor V. Kovalenko [Mon, 28 Dec 2020 10:27:06 +0000 (13:27 +0300)]
pulse: pcm - handle reading pulse stream hole

If there is a hole in pulse stream, handle it by generating silence.

BugLink: https://github.com/alsa-project/alsa-plugins/pull/17
Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
5 years agoRelease v1.2.2 v1.2.2
Jaroslav Kysela [Wed, 19 Feb 2020 09:35:42 +0000 (10:35 +0100)]
Release v1.2.2

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
5 years agoupmix: generalize format, code cleanup
Benedek Kupper [Thu, 21 Nov 2019 15:28:51 +0000 (16:28 +0100)]
upmix: generalize format, code cleanup

The main purpose of this change is to be able to change the format to
e.g. S32 instead of S16 by changing only two lines on the top of the source.
So a new symbol UPMIX_PCM_FORMAT is added to hide the actual format,
and a special type upmix_sample_t marks the sample type, instead of
fixed short.

The average_copy function was expecting the nchns parameter to be 2,
this parameter is now a local constant.

The variable i is renamed to channel as it denotes the channel index
in every case.

The behavior of the plugin remains identical.

Signed-off-by: Benedek Kupper <benedek.kupper@streamunlimited.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
5 years agoUpdate the attributes.m4 macro file from xine
David Ward [Fri, 3 Jan 2020 18:05:51 +0000 (13:05 -0500)]
Update the attributes.m4 macro file from xine

This file was imported from the xine project. Update it to the current
revision, which resolves the "no AC_LANG_SOURCE call detected in body"
warnings with Autoconf 2.68 or later.

Cc: Diego Pettenò <flameeyes@gmail.com>
Signed-off-by: David Ward <david.ward@ll.mit.edu>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
5 years agoRelease v1.2.1 v1.2.1
Jaroslav Kysela [Wed, 13 Nov 2019 11:04:26 +0000 (12:04 +0100)]
Release v1.2.1

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
5 years agopulse: Add DEVICE parameter
Takashi Iwai [Fri, 18 Oct 2019 06:10:04 +0000 (08:10 +0200)]
pulse: Add DEVICE parameter

Basically this patch adds the DEVICE parameter to pulse PCM and
control plugins, so that users may pass the specific pulse device
for multiple opens.  Along with the addition of the DEVICE parameter
in the config definition, the plugin code is slightly modified for
allowing to receive the empty strings that are treated as the
"default" mode (= NULL).

Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoRelease v1.1.9 v1.1.9
Jaroslav Kysela [Fri, 10 May 2019 06:57:24 +0000 (08:57 +0200)]
Release v1.1.9

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agomaemo: Fix a few crashing bugs
Stian Skjelstad [Thu, 2 May 2019 21:26:15 +0000 (23:26 +0200)]
maemo: Fix a few crashing bugs

maemo plugin has two crashes I was able to see in a valgrind log from
another user:

* maximum write size was calculated in words (16bit), but checked against
  byte-size length. This causes memcpy later to overflow the buffer
  (normally by up to 12KB).
* remove a double free (by marking free'd data with NULL)

* mmap returns MMAP_FAILED on error, not NULL

I suspect that this plugin/driver might have other issues aswell, since I
am unable to find any logic for checking DSP buffer status, and no
implementation for odelay reporting.

Signed-off-by: Stian Skjelstad <stian.skjelstad@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoconfigure: Fix unexpanded ALSA_DATA_DIR
Takashi Iwai [Wed, 27 Mar 2019 11:36:30 +0000 (12:36 +0100)]
configure: Fix unexpanded ALSA_DATA_DIR

When no --with-alsadatadir is given, configure scripts takes
$datadir/alsa as the default location, while it's expanded to
$prefix/data/alsa.  Although ALSA_DATA_DIR is set via
AC_DEFINE_UNQUOTED(), this expands only $alsadatadir itself and not
about the $prefix in the content.  For resolving this, we need to do
eval twice.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoconfigure: use $sysconfdir instead of /etc
Alex Ivanov [Sat, 23 Mar 2019 05:20:57 +0000 (08:20 +0300)]
configure: use $sysconfdir instead of /etc

Use $sysconfdir as prefix for ALSA_LCONF_DIR by default. Otherwise install
fails on non-FHS distros.

Signed-off-by: Alex Ivanov <gnidorah@ya.ru>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: use correct port names in 50-jack.conf
Alex Ivanov [Wed, 20 Mar 2019 17:29:33 +0000 (20:29 +0300)]
jack: use correct port names in 50-jack.conf

Change port names in 50-jack.conf from "alsa_pcm" to "system".

JACK1 v0.125.0 still provides alsa_pcm:playback_* and alsa_pcm:capture_*
port names, but only as aliases:
$ jack_lsp -A
system:capture_1
   alsa_pcm:capture_1
system:capture_2
   alsa_pcm:capture_2
system:playback_1
   alsa_pcm:playback_1
system:playback_2
   alsa_pcm:playback_2

JACK2 v1.9.12 doesn't support alsa_pcm:playback_* and alsa_pcm:capture_*
aliases anymore, so 50-jack.conf will fail for JACK2 users:
$ jack_lsp -A
system:capture_1
   alsa_pcm:hw:0:out1
system:capture_2
   alsa_pcm:hw:0:out2
system:playback_1
   alsa_pcm:hw:0:in1
system:playback_2
   alsa_pcm:hw:0:in2

As you see in both cases system:playback_* and system:capture_* are
correct port names.

Signed-off-by: Alex Ivanov <gnidorah@ya.ru>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: Support to connect multiple JACK ports with same ALSA channel
Timo Wischer [Tue, 29 Jan 2019 14:30:56 +0000 (15:30 +0100)]
jack: Support to connect multiple JACK ports with same ALSA channel

The following example will connect ALSA channel 0 to JACK port
"system:playback_1" and "system:playback_3" and ALSA channel 1 to JACK
port "system:playback_2" and "system:playback_4":

pcm.jack {
type jack
playback_ports {
0 [ system:playback_1 system:playback_3 ]
1 [ system:playback_2 system:playback_4 ]
}
}

The old syntax with only one port for one channel is still supported:
playback_ports {
0 system:playback_1
1 system:playback_2
}

Without this patch an additional JACK client has to be used to
automatically connect the second JACK port but this could take some
time. Therefore it misses for example the first audio period on the
second port.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: Refactoring: Lower indentation
Timo Wischer [Tue, 29 Jan 2019 14:30:55 +0000 (15:30 +0100)]
jack: Refactoring: Lower indentation

to full fill 80 character limit of next commit.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: Removing snd_pcm_jack_format_t as it is not used
Laxmi Devi [Fri, 11 Jan 2019 05:15:55 +0000 (10:45 +0530)]
jack: Removing snd_pcm_jack_format_t as it is not used

Signed-off-by: Laxmi Devi <Laxmi.Devi@in.bosch.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agojack: Replacing jack->channels with jack->num_ports
Laxmi Devi [Fri, 11 Jan 2019 05:15:54 +0000 (10:45 +0530)]
jack: Replacing jack->channels with jack->num_ports

As jack->num_ports and jack->channels hold the same values,
jack->channels is redundant and hence removed.

Sanity check is added in prepare, to check if io->Channels is
same as jack->num_ports.

Signed-off-by: Laxmi Devi <Laxmi.Devi@in.bosch.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agojack: Moving jack_deactivate() to snd_pcm_jack_hw_free() to speedup the XRUN Recovery
Laxmi Devi [Fri, 21 Dec 2018 09:29:43 +0000 (10:29 +0100)]
jack: Moving jack_deactivate() to snd_pcm_jack_hw_free() to speedup the XRUN Recovery

Removed snd_pcm_jack_stop() from snd_pcm_jack_prepare(),as on XRUN we do
not need to reconnect or reconfigure anything.

Signed-off-by: Laxmi Devi <Laxmi.Devi@in.bosch.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agodoc: Add forgotten aaf.txt to EXTRA_DIST
Takashi Iwai [Tue, 8 Jan 2019 11:36:18 +0000 (12:36 +0100)]
doc: Add forgotten aaf.txt to EXTRA_DIST

Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: Move jack_activate() and jack_connect() to snd_pcm_jack_prepare()
Laxmi Devi [Fri, 21 Dec 2018 09:29:42 +0000 (10:29 +0100)]
jack: Move jack_activate() and jack_connect() to snd_pcm_jack_prepare()

Since the processing of jack_activate() and jack_connect() take a while
longer, snd_pcm_jack_start() was blocked.
Consider a usecase of reading the data from capture device and
writing to a playback device, since the capture device is
already started and the starting of playback device is blocked,
it leads to XRUNs for capture device.
Therefore these calls are moved to snd_pcm_jack_prepare(),
So that the capture and playback devices can be prepared in advance so
that starting of the device doesn't take too long.

Signed-off-by: Laxmi Devi <Laxmi.Devi@in.bosch.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoRelease v1.1.8 v1.1.8
Jaroslav Kysela [Mon, 7 Jan 2019 12:55:43 +0000 (13:55 +0100)]
Release v1.1.8

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: AVTPDU transmission periodicity
Andre Guedes [Sat, 8 Dec 2018 01:55:50 +0000 (17:55 -0800)]
aaf: AVTPDU transmission periodicity

When operating in playback mode (i.e. AVTP talker) the plugin is
expected to transmit the AVTPDUs in a periodical manner. The AVTPDU
period is defined by the number of audio frames per AVTPDU and the
sampling rate (see section 7.7 from AVTP spec [1] for further
information).

To enforce the AVTPDU periodicity, this patch leverages the SO_TXTIME
sockopt recently added to socket interface which enables the userspace
to specify when a given packet should be transmitted. The plugin
configures the transmission time from each AVTPDU so the expected
transmission interval is maintained.

The SO_TXTIME feature works in conjunction with the Earliest TxTime
First (ETF) qdisc. The ETF qdisc sorts packets from multiple sockets by
the earliest transmission time and sends them to the network controller.
It also enables offloading packet transmission to hardware in case the
NIC supports it, providing more time accuracy. For further information
about ETF qdisc, see tc-etf(8). The qdisc can be configured many ways,
in doc/aaf.txt we provide an example.

Below follows some implementation highlights:

The packet transmission time is configured through socket control
message interface so we now use sendmsg() to transmit AVTPDUs, instead
of sendto().

sendmsg() API requires a msghdr struct which is initialized during
device setup time. Strictly speaking, that struct is only required when
operating in playback mode but we initialize it always, no matter if
running in playback or capture mode. This makes hw_params() and
hw_free() callbacks implementation way more simpler, specially on
handling error cases.

[1] 1722-2016 - IEEE Standard for a Transport Protocol for Time-Sensitive
    Applications in Bridged Local Area Networks

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: Tx multiple AVTPDUs per media clock tick
Andre Guedes [Sat, 8 Dec 2018 01:55:49 +0000 (17:55 -0800)]
aaf: Tx multiple AVTPDUs per media clock tick

In order to implement the transmission offload mechanism, we need to
change the way the plugin behaves so, instead of sending only one
AVTPDU, it sends several AVTPDUs at every media clock tick.

To achieve that, this patch changes the plugin so it consumes the audio
buffer in chunks of period size instead of in frames_per_pdu. The number
of AVTPDUs sent at every media clock tick is calculated by dividing the
period size by the number of frames per AVTPDU. To ensure that number is
not fractional, the plugin requires that the period size is multiple of
the plugin configuration 'frames_per_pdu'.

For the sake of consistency, the capture mode is also changed so the
plugin presents audio frames to the alsa-lib layer in chunks of period
size as well.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: Refactor timeout routines
Andre Guedes [Sat, 8 Dec 2018 01:55:48 +0000 (17:55 -0800)]
aaf: Refactor timeout routines

The functions aaf_mclk_timeout_playback() and aaf_mclk_timeout_capture()
have some common code so this patch does a code refactoring by moving
the shared code into a new function called aaf_timer_timeout().

After the refactoring, aaf_mclk_timeout_playback() and aaf_mclk_timeout_
capture() ended up having no code related to timeout so they were
renamed to better represent what they really do (send frames and present
frames, respectively).

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: Refactor AVTPDU reception routines
Andre Guedes [Sat, 8 Dec 2018 01:55:47 +0000 (17:55 -0800)]
aaf: Refactor AVTPDU reception routines

This patch does some code refactoring in the AVTPDU reception
routines in order to prepare the code to support the transmission
offload mechanism that will be added by upcoming patches. No
functionality is added or removed by this patch.

In summary, the function aaf_rx_pdu() is broken down into smaller, new
functions and some code is moved to is_pdu_valid(). Below follows more
details about the code refactoring.

The function aaf_rx_pdu() was renamed to aaf_socket_new_data() which
reads the socket and dispatches the AVTPDU in case the PCM device isn't
in DRAIN state. Function aaf_dispatch_pdu() simply reads the subtype
field from the AVTPDU and dispatches it according. For now, only AAF
PDUs are supported. Finally, the aaf_dispatch_pdu_aaf() handles AAF
AVTPDUs which means to check if the AVTPDU is valid, copies the PCM
samples from the payload to the audio buffer, and start the media clock
in case it hasn't been started already.

The function is_pdu_valid() is moved around to avoid forward
declaration. Code to validate the sequence number and presentation time
from the AVTPDU which used to be in aaf_rx_pdu() is moved into
is_pdu_valid().

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: Refactor AVTPDU transmission routines
Andre Guedes [Sat, 8 Dec 2018 01:55:46 +0000 (17:55 -0800)]
aaf: Refactor AVTPDU transmission routines

This patch does some code refactoring in the AVTPDU transmission
routines in order to prepare the code to support the transmission
offload mechanism that will be added by upcoming patches. No
functionality is added or removed by this patch.

In summary, code from aaf_tx_pdu() is moved into aaf_mclk_timeout_
playback() and into a new function introduced by this patch called
aaf_tx_pdus(). Below follows more details about the code refactoring.

The function aaf_tx_pdu() is modified so it only takes care of setting
the payload, sequence number and presentation time from the AVTPDU, and
sending it to the kernel.

The new function aaf_tx_pdus() calculates the presentation time from
each AVTPDU and calls aaf_tx_pdu() multiple times, according to the pdu
count argument.

Finally, the function aaf_mclk_timeout_playback() now checks if there
are frames available to the "hardware" and takes care of moving the
hardware pointer forward.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: Add presentation time tolerance
Andre Guedes [Sat, 8 Dec 2018 01:55:45 +0000 (17:55 -0800)]
aaf: Add presentation time tolerance

Different AVTP applications have different presentation time tolerance.
The current version of the plugin doesn't support any tolerance so this
patch extends the AAF plugin in order to enable the user to configure
that tolerance value.

The presentation time tolerance is specified in microseconds and it is
relevant only when the plugin is operating in capture mode.  For more
information see the 'Plugin Configuration' session in doc/aaf.txt

This patch also does some code refactoring and encapsulates all
presentation time validation code in the new is_ptime_valid() helper
function.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agodoc: Fix typo in AAF doc
Andre Guedes [Sat, 8 Dec 2018 01:55:44 +0000 (17:55 -0800)]
doc: Fix typo in AAF doc

This patch fixes a typo in aaf.txt documentation.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoaaf: do not free twice aaf - snd_pcm_close() is called from snd_pcm_ioplug_delete()
Jaroslav Kysela [Thu, 25 Oct 2018 06:34:57 +0000 (08:34 +0200)]
aaf: do not free twice aaf - snd_pcm_close() is called from snd_pcm_ioplug_delete()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Add support for direct read/write transfers
Andre Guedes [Thu, 25 Oct 2018 01:11:16 +0000 (18:11 -0700)]
aaf: Add support for direct read/write transfers

This patch adds support for direct read/write transfers (i.e. mmap
access mode) to the AAF plugin.

In order to enable direct read/write transfers, the AAF plugin is
required to implement ioplug's pseudo mmap mode. In this mode, the audio
buffer management (e.g. areas allocation, clean up, and data copy) is
handled at upper layers, making the AAF plugin simpler. So this patch
removes all code related to audio buffer management as well as the
transfer() callback from the AAF plugin.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Implement dump() ioplug callback
Andre Guedes [Thu, 25 Oct 2018 01:11:15 +0000 (18:11 -0700)]
aaf: Implement dump() ioplug callback

This patch introduces the aaf_dump() function which prints information
about both PCM and AVTP setup.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Implement Capture mode support
Andre Guedes [Thu, 25 Oct 2018 01:11:14 +0000 (18:11 -0700)]
aaf: Implement Capture mode support

This patch implements the capture mode support from the AAF plugin.
Simply put, this mode works as follows: AVTPDUs are received from the
network, the PCM samples are retrieved and presented to the alsa-lib
layer at the presentation time. In summary, the capture mode implements
a typical AVTP Listener.

Once the AAF device is put in running state, packet reception is
started. Every time an AVTPDU is received, the plugin checks if it is
valid (according to the stream configuration provided by the user) and
copies the PCM samples to the audio buffer. Note that at this moment,
the samples are not presented to the alsa-lib layer yet (i.e. hw_ptr is
not incremented).

The media clock starts at the presentation time from the first AVTPDU.
At every tick from the media clock, PCM samples are presented to the
alsa-lib layer.

Below follows some secondary discussion about this patch:

The functions aaf_mclk_start_playback() and aaf_mclk_start_capture()
have some common code. This patch does some code refactoring so the
common code is put in a new function (aaf_mclk_start) which is called
by both aaf_mclk_start_playback() and aaf_mclk_start_capture().

Also, the helper function aaf_inc_hw_ptr() is refactored so it can be
used to increment both aaf->hw_ptr and aaf->hw_virt_ptr.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Prepare for Capture mode support
Andre Guedes [Thu, 25 Oct 2018 01:11:13 +0000 (18:11 -0700)]
aaf: Prepare for Capture mode support

The plugin code assumes only Playback mode is supported. This patch
prepares the code to support both Playback and Capture mode. Capture
mode support is implemented by a follow-up patch.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Implement Playback mode support
Andre Guedes [Thu, 25 Oct 2018 01:11:12 +0000 (18:11 -0700)]
aaf: Implement Playback mode support

This patch implements the playback mode support from the AAF plugin.
Simply put, this mode works as follows: PCM samples provided by alsa-lib
layer are encapsulated into AVTPDUs and transmitted through the network.
In summary, the playback mode implements a typical AVTP Talker.

When the AAF device is put in running state, its media clock is started.
At every tick from the media clock, audio frames are consumed from the
audio buffer, encapsulated into an AVTPDU, and transmitted to the
network. The presentation time from each AVTPDU is calculated taking in
consideration the maximum transit time and time uncertainty values
configured by the user.

Below follows some discussion about implementation details:

AVTP protocol doesn't support all formats and rates available in ALSA so
the plugin sets some constraints to ensure only supported configurations
are used (see aaf_set_hw_constraint function).

The plugin implements a media clock which is the source from AVTP
timestamps. The AVTP timestamp is based on PTP time which uses
International Atomic Time (TAI) coordinate system. The media clock is
implemented through a periodic timer using timerfd infrastructure so the
plugin requires that system clock and PTP clock are synchronized
(instructions on how to sync these clocks are provided in doc/aaf.txt).
CLOCK_TAI clockid isn't currently supported by timerfd so the timer fd
is created using CLOCK_REALTIME and the start time is converted from TAI
to UTC.

Even though only one file descriptor is used to implement the playback
mode, this patch doesn't leverage ioplug->poll_fd but defines poll
callbacks instead. The reason is these callbacks will be required to
support capture mode (to be implemented by upcoming patch).

The TSN data plane interface is the AF_PACKET socket family so the
plugin uses an AF_PACKET socket to send/receive AVTPDUs. Linux requires
CAP_NET_RAW capability in order to open an AF_PACKET socket so the
application that instantiates the plugin must have it. For further info
about AF_PACKET socket family see packet(7).

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Load configuration parameters
Andre Guedes [Thu, 25 Oct 2018 01:11:11 +0000 (18:11 -0700)]
aaf: Load configuration parameters

This patch implements the infrastructure to load the plugin
configuration from ALSA configuration file. The configuration
is loaded in open() callback.

All configuration parameters are described in details in doc/aaf.txt
file.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoaaf: Introduce plugin skeleton
Andre Guedes [Thu, 25 Oct 2018 01:11:10 +0000 (18:11 -0700)]
aaf: Introduce plugin skeleton

The patch introduces the skeleton code from the AAF plugin as well as
the buildsystem bits in order to get the plugin built. Following the
approach from other plugins, the AAF plugin is only built if its
dependency (libavtp) is detected by configure.

Follow-up patches implement support for both playback and capture modes.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoRevert "oss: Fix leaks when oss_hw_constraint() fails"
Jaroslav Kysela [Wed, 24 Oct 2018 10:27:16 +0000 (12:27 +0200)]
Revert "oss: Fix leaks when oss_hw_constraint() fails"

This reverts commit b8bcd458b79146547fc6dae1645832695545da44.

snd_pcm_ioplug_delete() already calls snd_pcm_close()!

6 years agoRevert "usb_stream: Fix leaks when us_set_hw_constraint() fails"
Jaroslav Kysela [Wed, 24 Oct 2018 10:23:11 +0000 (12:23 +0200)]
Revert "usb_stream: Fix leaks when us_set_hw_constraint() fails"

This reverts commit 6b996865126dd559ef186002e45dc6e1594291e7.

snd_pcm_ioplug_delete() already calls snd_pcm_close()!

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoRevert "jack: Fix leaks when jack_set_hw_constraint() fails"
Jaroslav Kysela [Wed, 24 Oct 2018 10:18:42 +0000 (12:18 +0200)]
Revert "jack: Fix leaks when jack_set_hw_constraint() fails"

This reverts commit f4746667a4a2490f17c2a82b6f421bc3c9bd6de8.

snd_pcm_ioplug_delete() already calls snd_pcm_close()!

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoa52_close: set slave to NULL to avoid double pcm free in open fcn
Jaroslav Kysela [Tue, 23 Oct 2018 07:32:46 +0000 (09:32 +0200)]
a52_close: set slave to NULL to avoid double pcm free in open fcn

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agopcm_usb_stream: fix signess issues
Jaroslav Kysela [Tue, 23 Oct 2018 06:49:23 +0000 (08:49 +0200)]
pcm_usb_stream: fix signess issues

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agopcm_usb_stream: remove unused parameter in snd_pcm_us_read()
Jaroslav Kysela [Tue, 23 Oct 2018 06:47:16 +0000 (08:47 +0200)]
pcm_usb_stream: remove unused parameter in snd_pcm_us_read()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agopcm_usb_stream: fix another leak in snd_pcm_us_open()
Jaroslav Kysela [Tue, 23 Oct 2018 06:39:16 +0000 (08:39 +0200)]
pcm_usb_stream: fix another leak in snd_pcm_us_open()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agoRelease v1.1.7 v1.1.7
Jaroslav Kysela [Tue, 16 Oct 2018 12:00:22 +0000 (14:00 +0200)]
Release v1.1.7

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agodoc: fix makefile, the files should be included to the distribution package unconditi...
Jaroslav Kysela [Tue, 16 Oct 2018 11:54:22 +0000 (13:54 +0200)]
doc: fix makefile, the files should be included to the distribution package unconditionally

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
6 years agousb_stream: Fix leaks when us_set_hw_constraint() fails
Andre Guedes [Fri, 28 Sep 2018 21:27:27 +0000 (14:27 -0700)]
usb_stream: Fix leaks when us_set_hw_constraint() fails

If us_set_hw_constraint() returns error, we leak the 'us' object and all
the resources referenced by it. This patch fixes the issue by calling
us_free() before returning.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agooss: Fix leaks when oss_hw_constraint() fails
Andre Guedes [Fri, 28 Sep 2018 21:27:26 +0000 (14:27 -0700)]
oss: Fix leaks when oss_hw_constraint() fails

If oss_hw_constraint() returns error, we leak 'oss' object and all the
resources referenced by it. This patch fixes the issue by jumping to
'error' label where the proper clean up is already done.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agojack: Fix leaks when jack_set_hw_constraint() fails
Andre Guedes [Fri, 28 Sep 2018 21:27:25 +0000 (14:27 -0700)]
jack: Fix leaks when jack_set_hw_constraint() fails

If jack_set_hw_constraint() returns error, we leak the 'jack' object and
all the resources referenced by it. This patch fixes the issue by
calling snd_pcm_jack_free() before returning.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoa52: Fix leaks when a52_set_hw_constraint() fails
Andre Guedes [Fri, 28 Sep 2018 21:27:24 +0000 (14:27 -0700)]
a52: Fix leaks when a52_set_hw_constraint() fails

If a52_set_hw_constraint() returns error, we leak 'rec' and
'rec->slave'. This patch fixes the issue by jumping to 'error' label
where the proper clean up is already done.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
6 years agoFix typo in configure.ac (--disable-libav)
Peter Levine [Tue, 25 Sep 2018 05:22:40 +0000 (01:22 -0400)]
Fix typo in configure.ac (--disable-libav)

Signed-off-by: Peter Levine <plevine457@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agojack: Only allow ALSA periods multiple of JACKd period
Laxmi Devi [Thu, 19 Jul 2018 07:50:09 +0000 (09:50 +0200)]
jack: Only allow ALSA periods multiple of JACKd period

There is a higher Xrun probability whenever the ALSA period is not a
multiple of the JACKd period and the ALSA buffer is only twice the period.
Allowing ALSA buffers of min. 3x period is not a good solution because this
would increase the latency.

As an example in case of ALSA is using a period of 11 frames and JACK a
period of 12 frames and a buffer of 22 frames (2x ALSA period) is used:
- The buffer is filled and contains 22 frames
- JACK is reading 12 frames. Buffer is only containing 10 frames
- Now, ALSA has to be scheduled exactly after the last JACK read and
  before the next read. Otherwise we will get an Xrun
In case of ALSA is using a multiple period of JACK, JACK can always read
2 periods before an Xrun if the buffer was full.

In case of ALSA is using a period of 12 frames and JACK a period of 11
frames and a buffer of 24 frames (2x ALSA period) is used:
- The buffer is filled and contains 24 frames
- JACK is reading 11 frames. Buffer is now containing 13 frames. But ALSA
  can still not write to the buffer
- JACK reads 11 additional frames. Buffer contains 2 frames
- Now, ALSA has to be scheduled exactly after the last JACK read and
  before the next read. Otherwise we will get an Xrun
In case of ALSA is using a multiple period of JACK, ALSA can always write
to the buffer as long as the buffer is filled with less or equal of half
of buffer.

Therefore this patch enforces an ALSA period which is always a multiple
of the JACKd period.

Signed-off-by: Laxmi Devi <ldevi@de.adit-jv.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agoconfigure: Require alsa-lib 1.1.6 and newer
Takashi Iwai [Tue, 3 Jul 2018 15:17:00 +0000 (17:17 +0200)]
configure: Require alsa-lib 1.1.6 and newer

JACK plugin requires the recently added API function.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Allow build with older alsa-lib
Takashi Iwai [Tue, 3 Jul 2018 15:13:00 +0000 (17:13 +0200)]
jack: Allow build with older alsa-lib

The new API snd_pcm_ioplug_avail() doesn't appear prior to alsa-lib
1.1.7.  Add an own code for allowing the build with alsa-lib 1.1.6.

It has a very slight overhead than the original snd_pcm_ioplug_avail()
but should be OK as a workaround.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Update poll_fd also in draining state
Timo Wischer [Tue, 3 Jul 2018 13:59:23 +0000 (15:59 +0200)]
jack: Update poll_fd also in draining state

... to support snd_pcm_drain for the JACK IO plugin.

With this changes there will be an poll_fd event in DRAINING state even if
the min_avail was not yet reached. Otherwise the application would never
recognize that all samples were processed by JACK.
In addition the JACK real-time thread is also processing when in DRAINING
state and not only when in RUNNING or PREPARE state.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Avoid call to snd_pcm_avail_update() from JACK thread
Timo Wischer [Tue, 3 Jul 2018 13:59:22 +0000 (15:59 +0200)]
jack: Avoid call to snd_pcm_avail_update() from JACK thread

snd_pcm_avail_update() can call snd_pcm_jack_stop() but
snd_pcm_jack_stop() should not be called by the JACK thread.
It should only be called by the thread how has called
snd_pcm_jack_start().

In addition the execution of snd_pcm_avail_update() can take a while.
Therefore it should not be called by the JACK thread to not block this
thread.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agousb_stream: Add explicit -lpthread to *_LIBADD
Takashi Iwai [Tue, 22 May 2018 12:15:21 +0000 (14:15 +0200)]
usb_stream: Add explicit -lpthread to *_LIBADD

The pthread library has to be linked for this module.  In some tool
chains, it results in a build error.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agoarcam-av: Add explicit -lpthread to *_LIBADD
Takashi Iwai [Tue, 22 May 2018 12:13:53 +0000 (14:13 +0200)]
arcam-av: Add explicit -lpthread to *_LIBADD

The pthread library has to be linked for this module.  In some tool
chains, it results in a build error.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agooss/Makefile.am: fix typo
Jaroslav Kysela [Mon, 16 Apr 2018 16:14:18 +0000 (18:14 +0200)]
oss/Makefile.am: fix typo

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoconfigure: change --with-alsaaddondir to --with-alsagconfdir and --with-alsalconfdir
Jaroslav Kysela [Mon, 16 Apr 2018 15:49:36 +0000 (17:49 +0200)]
configure: change --with-alsaaddondir to --with-alsagconfdir and --with-alsalconfdir

The local add-on configuration directory (/etc/alsa/conf.d) contains
links to the global configuration directory (/usr/share/alsa/alsa.conf.d) now.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoMove rate-lavc to rate-lav subdirectory and update to use libavresample
Jaroslav Kysela [Mon, 16 Apr 2018 14:24:29 +0000 (16:24 +0200)]
Move rate-lavc to rate-lav subdirectory and update to use libavresample

- --disable-avcodec renamed to --disable-libav
- --avcodec-includedir renamed to --libav-includedir
- --avcodec-libdir renamed to --libav-libdir
- --disable-lavcrate renamed to --disable-lavrate

The .c changes are from Anton Khirnov. The rest is from Jaroslav Kysela.

From: Anton Khirnov
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoconfig/Makefile: make everything modular
Jaroslav Kysela [Fri, 13 Apr 2018 11:37:36 +0000 (13:37 +0200)]
config/Makefile: make everything modular

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoconfigure: add --with-alsaaddondir, add default config files for plugins
Jaroslav Kysela [Wed, 4 Apr 2018 17:57:56 +0000 (19:57 +0200)]
configure: add --with-alsaaddondir, add default config files for plugins

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agosamplerate: fix unused variable warning
Jaroslav Kysela [Thu, 5 Apr 2018 07:23:09 +0000 (09:23 +0200)]
samplerate: fix unused variable warning

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoRelease v1.1.6 v1.1.6
Jaroslav Kysela [Tue, 3 Apr 2018 07:01:38 +0000 (09:01 +0200)]
Release v1.1.6

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agojack: Use correct parameter order for snd_pcm_areas_silence()
Timo Wischer [Wed, 21 Mar 2018 11:42:32 +0000 (12:42 +0100)]
jack: Use correct parameter order for snd_pcm_areas_silence()

Without this fix it will sometimes fail with a segmentation fault.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agojack: Report Xruns to user application
Timo Wischer [Fri, 16 Mar 2018 14:23:32 +0000 (15:23 +0100)]
jack: Report Xruns to user application

Only increasing the hw_ptr is not sufficient
because it will not be evaluated by the ALSA library
to detect an Xrun.

In addition there is a raise where an Xrun detected by the JACK thread
could not be detected in the ALSA thread.
- In playback use case
- The hw_ptr will be increased by the JACK thread
  (hw_ptr > appl_ptr => Xrun)
- But the ALSA thread increases the appl_ptr before evaluating the
hw_ptr
- Therefore the hw_ptr < appl_ptr again
- ALSA will not detect the Xrun which was already detected by the
JACK thread

Therefore an additional variable is required to report an Xrun from the
JACK thread to ALSA.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Do not Xrun the ALSA buffer
Timo Wischer [Tue, 13 Mar 2018 08:34:44 +0000 (09:34 +0100)]
jack: Do not Xrun the ALSA buffer

when the JACK thread is requesting too many audio frames

Playback:
Without this commit the ALSA audio buffer will be played with endless
repeats as long as the user application has not provided new audio data.
Therefore this garbage will be played as long as the user application has
not called snd_pcm_stop() after an Xrun. With this fix the rest of the
JACK buffer will be filled with silence.

Capture:
Without this commit the audio data in the ALSA buffer would be
overwritten. With this commit the new data from the JACK buffer will not
be copied. Therefore the existing data in the ALSA buffer will not be
overwritten.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Use boundary as hw_ptr wrap around
Timo Wischer [Fri, 23 Feb 2018 14:18:08 +0000 (15:18 +0100)]
jack: Use boundary as hw_ptr wrap around

instead of using buffer_size as wrap around.

This is required to detect Xruns.

It is also required to allow the JACK thread
to processes the whole ALSA audio buffer at once
without calling snd_pcm_avail_update() in between.

For example when the hw_ptr will be updated with
hw_ptr += buffer_size
and it is using the buffer_size as wrap around
hw_ptr %= buffer_size
would result in the same value as before the add operation.

Due to that the user application would not recognize
that the complete audio buffer was copied.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
7 years agojack: Write only valid values to the internal hw_ptr
Timo Wischer [Mon, 22 Jan 2018 08:37:20 +0000 (09:37 +0100)]
jack: Write only valid values to the internal hw_ptr

Otherwise the ALSA thread could for example read a hw_ptr >
buffer_size

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoChange FSF address (Franklin Street)
Jaroslav Kysela [Tue, 14 Nov 2017 13:40:56 +0000 (14:40 +0100)]
Change FSF address (Franklin Street)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
7 years agoRelease v1.1.5 v1.1.5
Jaroslav Kysela [Tue, 14 Nov 2017 07:52:10 +0000 (08:52 +0100)]
Release v1.1.5

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
8 years agopulse: prevent double-free when pulse_hw_constraint returns error
Kui Wang [Thu, 13 Jul 2017 19:33:05 +0000 (19:33 +0000)]
pulse: prevent double-free when pulse_hw_constraint returns error

When pulse_hw_constraint returns error, snd_pcm_ioplug_delete() is called.
It will then call pulse_close() where "snd_pcm_pulse_t *pcm" will be free.
Then if goto the "error" label, the "snd_pcm_pulse_t *pcm" will be double-free.

To prevent this, just jump over the code which might cause double-free.

Signed-off-by: Kui Wang <wangkuisuper@hotmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
8 years agoRelease v1.1.4 v1.1.4
Jaroslav Kysela [Fri, 12 May 2017 08:01:45 +0000 (10:01 +0200)]
Release v1.1.4

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
8 years agoconfigure: Fix detection of avcodec.h
Takashi Iwai [Wed, 3 May 2017 10:50:03 +0000 (12:50 +0200)]
configure: Fix detection of avcodec.h

Signed-off-by: Takashi Iwai <tiwai@suse.de>
8 years agoconfigure: enhancing configuration support for alsa plugins
Mounesh Sutar [Fri, 17 Feb 2017 07:24:19 +0000 (12:54 +0530)]
configure: enhancing configuration support for alsa plugins

Following plugins are made configurable in alsa-plugins:
* oss
* mix
* usbstream
* arcamav
* speexdsp

Signed-off-by: Mikhail Durnev <mikhail_durnev@mentor.com>
Signed-off-by: Mounesh Sutar <mounesh_sutar@mentor.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
9 years agoRelease v1.1.1 v1.1.1
Jaroslav Kysela [Thu, 31 Mar 2016 13:11:29 +0000 (15:11 +0200)]
Release v1.1.1

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
9 years agoa52: Fix usage of obsoleted avcodec_*_frame() functions
Daniel Kirchner [Wed, 9 Mar 2016 08:17:09 +0000 (09:17 +0100)]
a52: Fix usage of obsoleted avcodec_*_frame() functions

pcm_a52.c uses avcodec_alloc_frame and avcodec_free_frame that have
been replaced by av_frame_alloc and av_frame_free in recent versions
of libavcodec.  The following patch should fix this while remaining
backwards compatible.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
9 years agoa52: Make compatible with ffmpeg 3.0
Anatol Pomozov [Tue, 16 Feb 2016 01:49:22 +0000 (17:49 -0800)]
a52: Make compatible with ffmpeg 3.0

audioconvert.h has been deprecated a while ago and got removed in
ffmpeg 3.0 (commit 2d40968dd3ff17b12f7).

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
9 years agopph: include config.h from rate_speexrate.c
Tanu Kaskinen [Wed, 27 Jan 2016 11:45:51 +0000 (13:45 +0200)]
pph: include config.h from rate_speexrate.c

Fixes compilation against libspeexdsp 1.2rc3.

rate_speexrate.c includes speex_resampler.h, which depends on config.h
by referencing the HAVE_SPEEX_SPEEXDSP_TYPES_H macro. AFAIK it's not
a good idea to include config.h from headers (I don't know/remember
why, though), which is why I include config.h from rate_speexrate.c
instead of speex_resampler.h.

Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
9 years agoa52: fix reported input channel order
Tom Yan [Tue, 12 Jan 2016 07:57:39 +0000 (15:57 +0800)]
a52: fix reported input channel order

a52 plugin expects the input to be in ALSA order and remaps it to general order when encoding. However it reports that the input it takes should be in general order.

This fix should make programs (e.g. mpv) that is aware of channel layout reported by ALSA remap sources appropriately before sending when necessary.

It should not cause any regression to programs (e.g. mplayer) that does not check the reported channel layout (hence not affected by the issue) and remaps sources anyway.

Signed-off-by: Tom Yan <tom.ty89@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
9 years agospeex: Add missing include config.h
Takashi Iwai [Mon, 9 Nov 2015 10:53:22 +0000 (11:53 +0100)]
speex: Add missing include config.h

Signed-off-by: Takashi Iwai <tiwai@suse.de>