Merge "aaudio: do not assert if deleting an unopened stream" into oc-dr1-dev
diff --git a/media/libaaudio/tests/test_n_streams.cpp b/media/libaaudio/tests/test_n_streams.cpp
index bf4b64e..271d024 100644
--- a/media/libaaudio/tests/test_n_streams.cpp
+++ b/media/libaaudio/tests/test_n_streams.cpp
@@ -26,42 +26,31 @@
 #define MMAP_POLICY              AAUDIO_POLICY_AUTO
 //#define MMAP_POLICY              AAUDIO_POLICY_ALWAYS
 
-#define MAX_STREAMS   100
+#define MAX_STREAMS   200
 
-int main(int argc, char **argv)
-{
-    (void)argc; // unused
-    (void)argv; // unused
-
+aaudio_result_t testMaxStreams(aaudio_direction_t direction) {
     aaudio_result_t result = AAUDIO_OK;
     AAudioStreamBuilder *aaudioBuilder = nullptr;
-    AAudioStream *aaudioStream[MAX_STREAMS];
+    AAudioStream *aaudioStreams[MAX_STREAMS];
     int32_t numStreams = 0;
 
-    // Make printf print immediately so that debug info is not stuck
-    // in a buffer if we hang or crash.
-    setvbuf(stdout, NULL, _IONBF, (size_t) 0);
-
-    printf("Try to open a maximum of %d streams.\n", MAX_STREAMS);
-
-    AAudio_setMMapPolicy(MMAP_POLICY);
-    printf("requested MMapPolicy = %d\n", AAudio_getMMapPolicy());
-
     result = AAudio_createStreamBuilder(&aaudioBuilder);
     if (result != AAUDIO_OK) {
         return 1;
     }
 
+    AAudioStreamBuilder_setDirection(aaudioBuilder, direction);
+
     for (int i = 0; i < MAX_STREAMS; i++) {
         // Create an AAudioStream using the Builder.
-        result = AAudioStreamBuilder_openStream(aaudioBuilder, &aaudioStream[i]);
+        result = AAudioStreamBuilder_openStream(aaudioBuilder, &aaudioStreams[i]);
         if (result != AAUDIO_OK) {
             printf("ERROR could not open AAudio stream, %d %s\n",
                    result, AAudio_convertResultToText(result));
             break;
         } else {
             printf("AAudio stream[%2d] opened successfully. MMAP = %s\n",
-                   i, AAudioStream_isMMapUsed(aaudioStream[i]) ? "YES" : "NO");
+                   i, AAudioStream_isMMapUsed(aaudioStreams[i]) ? "YES" : "NO");
             numStreams++;
         }
     }
@@ -70,7 +59,7 @@
 
     // Close all the streams.
     for (int i = 0; i < numStreams; i++) {
-        result = AAudioStream_close(aaudioStream[i]);
+        result = AAudioStream_close(aaudioStreams[i]);
         if (result != AAUDIO_OK) {
             printf("ERROR could not close AAudio stream, %d %s\n",
                    result, AAudio_convertResultToText(result));
@@ -83,6 +72,28 @@
     AAudioStreamBuilder_delete(aaudioBuilder);
 
 finish:
-    return (result != AAUDIO_OK) ? EXIT_FAILURE : EXIT_SUCCESS;
+    return result;
 }
 
+int main(int argc, char **argv) {
+    (void)argc; // unused
+    (void)argv; // unused
+
+    // Make printf print immediately so that debug info is not stuck
+    // in a buffer if we hang or crash.
+    setvbuf(stdout, NULL, _IONBF, (size_t) 0);
+
+    printf("Try to open a maximum of %d streams.\n", MAX_STREAMS);
+
+    AAudio_setMMapPolicy(MMAP_POLICY);
+    printf("requested MMapPolicy = %d\n", AAudio_getMMapPolicy());
+
+    printf("Test AAUDIO_DIRECTION_OUTPUT ---------\n");
+    aaudio_result_t result = testMaxStreams(AAUDIO_DIRECTION_OUTPUT);
+    if (result == AAUDIO_OK) {
+        printf("Test AAUDIO_DIRECTION_INPUT ---------\n");
+        result = testMaxStreams(AAUDIO_DIRECTION_INPUT);
+    }
+
+    return (result != AAUDIO_OK) ? EXIT_FAILURE : EXIT_SUCCESS;
+}