Revert recent r_submix patches

Revert "r_submix: Fix logspam on pipe corruption"
This reverts commit ab5b51838c94afc60f9979cdde2117930ef90ea9.
Revert "r_submix: Use intermediate pipe in non-blocking mode"
This reverts commit 1df8a0039ffaa5161e1ecdfda3ae3f7e5c7068c2.

Reason: breaks Android Auto projected mode

Bug: 74142786
Test: with Android Auto head unit simulator
Change-Id: I8e1bc146a131cb5b1ab88cf242b03a6b02a84339
diff --git a/modules/audio_remote_submix/audio_hw.cpp b/modules/audio_remote_submix/audio_hw.cpp
index e826ac3..8c0c097 100644
--- a/modules/audio_remote_submix/audio_hw.cpp
+++ b/modules/audio_remote_submix/audio_hw.cpp
@@ -418,8 +418,8 @@
             config->format);
         const NBAIO_Format offers[1] = {format};
         size_t numCounterOffers = 0;
-        // Create a MonoPipe with optional blocking set to false.
-        MonoPipe* sink = new MonoPipe(buffer_size_frames, format, false /*writeCanBlock*/);
+        // Create a MonoPipe with optional blocking set to true.
+        MonoPipe* sink = new MonoPipe(buffer_size_frames, format, true /*writeCanBlock*/);
         // Negotiation between the source and sink cannot fail as the device open operation
         // creates both ends of the pipe using the same audio format.
         ssize_t index = sink->negotiate(offers, 1, NULL, numCounterOffers);
@@ -714,8 +714,30 @@
 
 static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
 {
-    (void)stream;
+    int exiting = -1;
+    AudioParameter parms = AudioParameter(String8(kvpairs));
     SUBMIX_ALOGV("out_set_parameters() kvpairs='%s'", kvpairs);
+
+    // FIXME this is using hard-coded strings but in the future, this functionality will be
+    //       converted to use audio HAL extensions required to support tunneling
+    if ((parms.getInt(String8("exiting"), exiting) == NO_ERROR) && (exiting > 0)) {
+        struct submix_audio_device * const rsxadev =
+                audio_stream_get_submix_stream_out(stream)->dev;
+        pthread_mutex_lock(&rsxadev->lock);
+        { // using the sink
+            sp<MonoPipe> sink =
+                    rsxadev->routes[audio_stream_get_submix_stream_out(stream)->route_handle]
+                                    .rsxSink;
+            if (sink == NULL) {
+                pthread_mutex_unlock(&rsxadev->lock);
+                return 0;
+            }
+
+            ALOGD("out_set_parameters(): shutting down MonoPipe sink");
+            sink->shutdown(true);
+        } // done using the sink
+        pthread_mutex_unlock(&rsxadev->lock);
+    }
     return 0;
 }
 
@@ -783,12 +805,12 @@
         return 0;
     }
 
-    // If the write to the sink would block, flush enough frames
+    // If the write to the sink would block when no input stream is present, flush enough frames
     // from the pipe to make space to write the most recent data.
     {
         const size_t availableToWrite = sink->availableToWrite();
         sp<MonoPipeReader> source = rsxadev->routes[out->route_handle].rsxSource;
-        if (availableToWrite < frames) {
+        if (rsxadev->routes[out->route_handle].input == NULL && availableToWrite < frames) {
             static uint8_t flush_buffer[64];
             const size_t flushBufferSizeFrames = sizeof(flush_buffer) / frame_size;
             size_t frames_to_flush_from_source = frames - availableToWrite;
@@ -821,11 +843,6 @@
 
             written_frames = 0;
             return 0;
-        } else if (written_frames == -EIO) {
-            // receiving -EIO means that the underlying FIFO has shut itself down
-            // due to reader/writer indices corruption. This state is irreversible,
-            // so shut down the monopipe. It will be destroyed on the next call to 'write.'
-            sink->shutdown(true);
         } else {
             // write() returned UNDERRUN or WOULD_BLOCK, retry
             ALOGE("out_write() write to pipe returned unexpected %zd", written_frames);