media: test audio codecs in testGetMaxSupportedInstances

Bug: 22975494
Change-Id: I1a68bf4657dcaef4d7b4e0ab14200027edc9800a
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
index b3fcce1..813af0f2 100644
--- a/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
@@ -19,6 +19,7 @@
 import android.cts.util.MediaUtils;
 import android.media.MediaCodec;
 import android.media.MediaCodecInfo;
+import android.media.MediaCodecInfo.AudioCapabilities;
 import android.media.MediaCodecInfo.CodecCapabilities;
 import android.media.MediaCodecInfo.CodecProfileLevel;
 import android.media.MediaCodecInfo.VideoCapabilities;
@@ -530,24 +531,35 @@
         }
     }
 
-    private static MediaFormat createMinFormat(String mime, VideoCapabilities vcaps, int color) {
-        int minWidth = vcaps.getSupportedWidths().getLower();
-        int minHeight = vcaps.getSupportedHeightsFor(minWidth).getLower();
-        int minBitrate = vcaps.getBitrateRange().getLower();
+    private static MediaFormat createMinFormat(String mime, CodecCapabilities caps) {
+        MediaFormat format;
+        if (caps.getVideoCapabilities() != null) {
+            VideoCapabilities vcaps = caps.getVideoCapabilities();
+            int minWidth = vcaps.getSupportedWidths().getLower();
+            int minHeight = vcaps.getSupportedHeightsFor(minWidth).getLower();
+            int minBitrate = vcaps.getBitrateRange().getLower();
+            format = MediaFormat.createVideoFormat(mime, minWidth, minHeight);
+            format.setInteger(MediaFormat.KEY_COLOR_FORMAT, caps.colorFormats[0]);
+            format.setInteger(MediaFormat.KEY_BIT_RATE, minBitrate);
+            format.setInteger(MediaFormat.KEY_FRAME_RATE, 10);
+            format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
+        } else {
+            AudioCapabilities acaps = caps.getAudioCapabilities();
+            int minSampleRate = acaps.getSupportedSampleRateRanges()[0].getLower();
+            int minChannelCount = 1;
+            int minBitrate = acaps.getBitrateRange().getLower();
+            format = MediaFormat.createAudioFormat(mime, minSampleRate, minChannelCount);
+            format.setInteger(MediaFormat.KEY_BIT_RATE, minBitrate);
+        }
 
-        MediaFormat format = MediaFormat.createVideoFormat(mime, minWidth, minHeight);
-        format.setInteger(MediaFormat.KEY_COLOR_FORMAT, color);
-        format.setInteger(MediaFormat.KEY_BIT_RATE, minBitrate);
-        format.setInteger(MediaFormat.KEY_FRAME_RATE, 10);
-        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
         return format;
     }
 
     private static int getActualMax(
             boolean isEncoder, String name, String mime, CodecCapabilities caps, int max) {
         int flag = isEncoder ? MediaCodec.CONFIGURE_FLAG_ENCODE : 0;
-        MediaFormat format =
-                createMinFormat(mime, caps.getVideoCapabilities(), caps.colorFormats[0]);
+        MediaFormat format = createMinFormat(mime, caps);
+        Log.d(TAG, "Test format " + format);
         Vector<MediaCodec> codecs = new Vector<MediaCodec>();
         MediaCodec codec = null;
         for (int i = 0; i < max; ++i) {
@@ -588,14 +600,6 @@
         return actualMax;
     }
 
-    private static boolean shouldTestActual(CodecCapabilities caps) {
-        if (caps.getVideoCapabilities() == null) {
-            // TODO: test audio codecs.
-            return false;
-        }
-        return true;
-    }
-
     public void testGetMaxSupportedInstances() {
         final int MAX_INSTANCES = 32;
         StringBuilder xmlOverrides = new StringBuilder();
@@ -612,21 +616,19 @@
                 Log.d(TAG, "getMaxSupportedInstances returns " + max);
                 assertTrue(max > 0);
 
-                if (shouldTestActual(caps)) {
-                    int actualMax = getActualMax(
-                            info.isEncoder(), info.getName(), types[j], caps, MAX_INSTANCES);
-                    Log.d(TAG, "actualMax " + actualMax + " vs reported max " + max);
-                    if (actualMax < (int)(max * 0.9) || actualMax > (int) Math.ceil(max * 1.1)) {
-                        String codec = "<MediaCodec name=\"" + info.getName() +
-                                "\" type=\"" + types[j] + "\" >";
-                        String limit = "    <Limit name=\"concurrent-instances\" max=\"" +
-                                actualMax + "\" />";
-                        xmlOverrides.append(codec);
-                        xmlOverrides.append("\n");
-                        xmlOverrides.append(limit);
-                        xmlOverrides.append("\n");
-                        xmlOverrides.append("</MediaCodec>\n");
-                    }
+                int actualMax = getActualMax(
+                        info.isEncoder(), info.getName(), types[j], caps, MAX_INSTANCES);
+                Log.d(TAG, "actualMax " + actualMax + " vs reported max " + max);
+                if (actualMax < (int)(max * 0.9) || actualMax > (int) Math.ceil(max * 1.1)) {
+                    String codec = "<MediaCodec name=\"" + info.getName() +
+                            "\" type=\"" + types[j] + "\" >";
+                    String limit = "    <Limit name=\"concurrent-instances\" max=\"" +
+                            actualMax + "\" />";
+                    xmlOverrides.append(codec);
+                    xmlOverrides.append("\n");
+                    xmlOverrides.append(limit);
+                    xmlOverrides.append("\n");
+                    xmlOverrides.append("</MediaCodec>\n");
                 }
             }
         }