OSDN Git Service

Fixing non-playback on USB devices with support for MONO playback.
authorPaul McLean <pmclean@google.com>
Mon, 25 Aug 2014 15:04:02 +0000 (08:04 -0700)
committerPaul McLean <pmclean@google.com>
Thu, 28 Aug 2014 16:16:39 +0000 (09:16 -0700)
Bug 17136854

Change-Id: Ia0136fa8f9b4789d538b2dccb3f6071ae5062010

modules/usbaudio/alsa_device_profile.c
modules/usbaudio/audio_hw.c

index f214eab..9deedce 100644 (file)
@@ -267,19 +267,28 @@ static unsigned profile_enum_sample_formats(alsa_device_profile* profile, struct
 
 static unsigned profile_enum_channel_counts(alsa_device_profile* profile, unsigned min, unsigned max)
 {
-    static const unsigned std_channel_counts[] = {8, 4, 2, 1};
+    // TODO: Don't return MONO even if the device supports it. This causes problems
+    // in AudioPolicyManager. Revisit.
+    static const unsigned std_out_channel_counts[] = {8, 4, 2/*, 1*/};
+    static const unsigned std_in_channel_counts[] = {8, 4, 2, 1};
+
+    unsigned * channel_counts =
+        profile->direction == PCM_OUT ? std_out_channel_counts : std_in_channel_counts;
+    unsigned num_channel_counts =
+        profile->direction == PCM_OUT
+            ? ARRAY_SIZE(std_out_channel_counts) : ARRAY_SIZE(std_in_channel_counts);
 
     unsigned num_counts = 0;
     unsigned index;
     /* TODO write a profile_test_channel_count() */
     /* Ensure there is at least one invalid channel count to terminate the channel counts array */
-    for (index = 0; index < ARRAY_SIZE(std_channel_counts) &&
+    for (index = 0; index < num_channel_counts &&
                     num_counts < ARRAY_SIZE(profile->channel_counts) - 1;
          index++) {
         /* TODO Do we want a channel counts test? */
-        if (std_channel_counts[index] >= min && std_channel_counts[index] <= max /* &&
-         profile_test_channel_count(profile, std_channel_counts[index])*/) {
-            profile->channel_counts[num_counts++] = std_channel_counts[index];
+        if (channel_counts[index] >= min && channel_counts[index] <= max /* &&
+            profile_test_channel_count(profile, channel_counts[index])*/) {
+            profile->channel_counts[num_counts++] = channel_counts[index];
         }
     }
 
index 7e65ab5..4310855 100644 (file)
@@ -271,7 +271,6 @@ static audio_format_t out_get_format(const struct audio_stream *stream)
      */
     alsa_device_proxy * proxy = &((struct stream_out*)stream)->proxy;
     audio_format_t format = audio_format_from_pcm_format(proxy_get_format(proxy));
-    ALOGV("out_get_format() = %d", format);
     return format;
 }