audio: fixed channel count determination from channel mask

Do not use popcount() to derive channel count from channel mask.

Bug: 15000850.
Change-Id: I5050ce7fd7884369eb0de37967e40052630006a9
This commit is contained in:
Eric Laurent 2014-07-01 20:33:36 -07:00
parent 03d92f4a6e
commit 40508f66ca
3 changed files with 9 additions and 5 deletions

View file

@ -128,7 +128,8 @@ status_t AudioStreamOutStub::set(int *pFormat, uint32_t *pChannels, uint32_t *pR
ssize_t AudioStreamOutStub::write(const void* buffer, size_t bytes)
{
// fake timing for audio output
usleep(bytes * 1000000 / sizeof(int16_t) / AudioSystem::popCount(channels()) / sampleRate());
usleep(bytes * 1000000 / sizeof(int16_t) /
audio_channel_count_from_out_mask(channels()) / sampleRate());
return bytes;
}
@ -174,7 +175,8 @@ status_t AudioStreamInStub::set(int *pFormat, uint32_t *pChannels, uint32_t *pRa
ssize_t AudioStreamInStub::read(void* buffer, ssize_t bytes)
{
// fake timing for audio input
usleep(bytes * 1000000 / sizeof(int16_t) / AudioSystem::popCount(channels()) / sampleRate());
usleep(bytes * 1000000 / sizeof(int16_t) /
audio_channel_count_from_in_mask(channels()) / sampleRate());
memset(buffer, 0, bytes);
return bytes;
}

View file

@ -480,7 +480,7 @@ static size_t adev_get_input_buffer_size(const struct audio_hw_device *dev,
{
const struct legacy_audio_device *ladev = to_cladev(dev);
return ladev->hwif->getInputBufferSize(config->sample_rate, (int) config->format,
popcount(config->channel_mask));
audio_channel_count_from_in_mask(config->channel_mask));
}
static int adev_open_output_stream(struct audio_hw_device *dev,

View file

@ -69,7 +69,8 @@ public:
/**
* return the frame size (number of bytes per sample).
*/
uint32_t frameSize() const { return popcount(channels())*((format()==AUDIO_FORMAT_PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); }
uint32_t frameSize() const { return audio_channel_count_from_out_mask(channels())*
((format()==AUDIO_FORMAT_PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); }
/**
* return the audio hardware driver latency in milli seconds.
@ -145,7 +146,8 @@ public:
/**
* return the frame size (number of bytes per sample).
*/
uint32_t frameSize() const { return AudioSystem::popCount(channels())*((format()==AudioSystem::PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); }
uint32_t frameSize() const { return audio_channel_count_from_in_mask(channels())*
((format()==AudioSystem::PCM_16_BIT)?sizeof(int16_t):sizeof(int8_t)); }
/** set the input gain for the audio driver. This method is for
* for future use */