OSDN Git Service

audio: fixed channel count determination from channel mask
authorEric Laurent <elaurent@google.com>
Wed, 2 Jul 2014 03:33:36 +0000 (20:33 -0700)
committerEric Laurent <elaurent@google.com>
Wed, 2 Jul 2014 03:33:36 +0000 (20:33 -0700)
Do not use popcount() to derive channel count from channel mask.

Bug: 15000850.
Change-Id: I5050ce7fd7884369eb0de37967e40052630006a9

audio/AudioHardwareStub.cpp
audio/audio_hw_hal.cpp
include/hardware_legacy/AudioHardwareInterface.h

index 1083889..fd647d5 100644 (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;
 }
index 9b1f1a3..23ebdae 100644 (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,
index f5b38ea..d37da11 100644 (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 */