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>
Sun, 23 Dec 2012 19:24:00 +0000 (13:24 -0600)
commit43a3521a1d3902218ec3918a1eccb023fca480d8
tree663c59ddeec7e26eab4a74e7e3f0be387b52a678
parentf9246a68f649a46b1152a0b192a147be7816b976
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