alsa: Fix sample acquisition and send normalized values
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Sun, 23 Dec 2012 18:57:37 +0000 (12:57 -0600)
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>
Wed, 26 Dec 2012 23:06:24 +0000 (17:06 -0600)
commit6b3c3d6817fbf2a302b64205d988291b398af1f7
tree16fe985591e830539b2ae9a86962e3ad6b22bd46
parent1ce3af410103490a28f2fad88c52d0e1d2ad32a9
alsa: Fix sample acquisition and send normalized values

The alsa driver requested signed 16-bit integers from ALSA, but casted them to
to an unsigned 16bit before finally casting them to a float. The end result was
that half of the wave would be clipped off.
We also requested data in little endian format. ALSA can be instructed to send
data with the correct endianess for the platform, without needing to worry
about what that is.

This patch attempts three points, which, together, fix the acquisition:
1) Request data from ALSA without specifying endianess; ALSA will handle the
endianess.
2) Simplify the int16_t to float loop by using straightforward indexes.
3) Normalize every value before sending it on the session bus.

NOTE: If testing with PulseView, it will appear as if sigrok is sending all
zeroes. sigrok is sending correct data, but since the data is normalized,
PulseView will incorrectly plot it as a straignt line.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
hardware/alsa/api.c
hardware/alsa/protocol.c