AudioPolicy/AudioFlinger: Track AudioRecords via Record IDs

The client must provide a unique Record ID (RIID) when creating
an AudioRecord. This RIID is passed down to AudioInputDescriptor
in AudioPolicyManager which sends configuration updates
via IAudioPolicyServiceClient callback.

By supplying RIID, the Audio Service can coalesce start / stop
events coming from clients (apps) with recording configuration
update events.

For AAudio MMap clients everything is handled at the server
side because they correspond directly to audioserver objects.

Bug: 123312504
Test: android.media.cts.AudioRecordingConfigurationTest
      AudioRecordTest#testAudioRecordInfoCallback
      MediaRecorderTest#testAudioRecordInfoCallback
      manual testing using Oboe and Solo test apps

Change-Id: I3d32241752d9a747736606dc4cb1e068e6b7aa3b
diff --git a/media/libaudioclient/IAudioPolicyServiceClient.cpp b/media/libaudioclient/IAudioPolicyServiceClient.cpp
index 52d8ccd..0f9580c 100644
--- a/media/libaudioclient/IAudioPolicyServiceClient.cpp
+++ b/media/libaudioclient/IAudioPolicyServiceClient.cpp
@@ -50,6 +50,7 @@
 }
 
 inline void readRecordClientInfoFromParcel(const Parcel& data, record_client_info_t *clientInfo) {
+    clientInfo->riid = (audio_unique_id_t) data.readInt32();
     clientInfo->uid = (uid_t) data.readUint32();
     clientInfo->session = (audio_session_t) data.readInt32();
     clientInfo->source = (audio_source_t) data.readInt32();
@@ -58,6 +59,7 @@
 }
 
 inline void writeRecordClientInfoToParcel(Parcel& data, const record_client_info_t *clientInfo) {
+    data.writeInt32((int32_t) clientInfo->riid);
     data.writeUint32((uint32_t) clientInfo->uid);
     data.writeInt32((int32_t) clientInfo->session);
     data.writeInt32((int32_t) clientInfo->source);