DeviceDescriptorBase parcels to media::AudioPort

It has been determined that all of the subclasses of AudioPort need to
be parceled into media::AudioPort rather than having their own type,
similar to how they correspond to the audio_port_v7 struct.

Test: Audio-related CTS tests from CtsMediaTestCases
Change-Id: I971d9dec990ae7d065a74952f63fa9cb7fed236c
diff --git a/media/libaudiofoundation/DeviceDescriptorBase.cpp b/media/libaudiofoundation/DeviceDescriptorBase.cpp
index 6261559..a3e9589 100644
--- a/media/libaudiofoundation/DeviceDescriptorBase.cpp
+++ b/media/libaudiofoundation/DeviceDescriptorBase.cpp
@@ -159,41 +159,49 @@
 
 status_t DeviceDescriptorBase::writeToParcel(Parcel *parcel) const
 {
-    media::DeviceDescriptorBase parcelable;
+    media::AudioPort parcelable;
     return writeToParcelable(&parcelable)
         ?: parcelable.writeToParcel(parcel);
 }
 
-status_t DeviceDescriptorBase::writeToParcelable(media::DeviceDescriptorBase* parcelable) const {
-    AudioPort::writeToParcelable(&parcelable->port);
-    AudioPortConfig::writeToParcelable(&parcelable->portConfig);
-    parcelable->device = VALUE_OR_RETURN_STATUS(
-            legacy2aidl_AudioDeviceTypeAddress(mDeviceTypeAddr));
-    parcelable->encapsulationModes = VALUE_OR_RETURN_STATUS(
+status_t DeviceDescriptorBase::writeToParcelable(media::AudioPort* parcelable) const {
+    AudioPort::writeToParcelable(parcelable);
+    AudioPortConfig::writeToParcelable(&parcelable->activeConfig);
+    parcelable->id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));
+
+    media::AudioPortDeviceExt ext;
+    ext.device = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioDeviceTypeAddress(mDeviceTypeAddr));
+    ext.encapsulationModes = VALUE_OR_RETURN_STATUS(
             legacy2aidl_AudioEncapsulationMode_mask(mEncapsulationModes));
-    parcelable->encapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
+    ext.encapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
             legacy2aidl_AudioEncapsulationMetadataType_mask(mEncapsulationMetadataTypes));
+    UNION_SET(parcelable->ext, device, std::move(ext));
     return OK;
 }
 
 status_t DeviceDescriptorBase::readFromParcel(const Parcel *parcel) {
-    media::DeviceDescriptorBase parcelable;
+    media::AudioPort parcelable;
     return parcelable.readFromParcel(parcel)
         ?: readFromParcelable(parcelable);
 }
 
-status_t DeviceDescriptorBase::readFromParcelable(const media::DeviceDescriptorBase& parcelable) {
-    status_t status = AudioPort::readFromParcelable(parcelable.port)
-                      ?: AudioPortConfig::readFromParcelable(parcelable.portConfig);
+status_t DeviceDescriptorBase::readFromParcelable(const media::AudioPort& parcelable) {
+    if (parcelable.type != media::AudioPortType::DEVICE) {
+        return BAD_VALUE;
+    }
+    status_t status = AudioPort::readFromParcelable(parcelable)
+                      ?: AudioPortConfig::readFromParcelable(parcelable.activeConfig);
     if (status != OK) {
         return status;
     }
+
+    media::AudioPortDeviceExt ext = VALUE_OR_RETURN_STATUS(UNION_GET(parcelable.ext, device));
     mDeviceTypeAddr = VALUE_OR_RETURN_STATUS(
-            aidl2legacy_AudioDeviceTypeAddress(parcelable.device));
+            aidl2legacy_AudioDeviceTypeAddress(ext.device));
     mEncapsulationModes = VALUE_OR_RETURN_STATUS(
-            aidl2legacy_AudioEncapsulationMode_mask(parcelable.encapsulationModes));
+            aidl2legacy_AudioEncapsulationMode_mask(ext.encapsulationModes));
     mEncapsulationMetadataTypes = VALUE_OR_RETURN_STATUS(
-            aidl2legacy_AudioEncapsulationMetadataType_mask(parcelable.encapsulationMetadataTypes));
+            aidl2legacy_AudioEncapsulationMetadataType_mask(ext.encapsulationMetadataTypes));
     return OK;
 }
 
@@ -219,7 +227,7 @@
 }
 
 ConversionResult<sp<DeviceDescriptorBase>>
-aidl2legacy_DeviceDescriptorBase(const media::DeviceDescriptorBase& aidl) {
+aidl2legacy_DeviceDescriptorBase(const media::AudioPort& aidl) {
     sp<DeviceDescriptorBase> result = new DeviceDescriptorBase(AUDIO_DEVICE_NONE);
     status_t status = result->readFromParcelable(aidl);
     if (status != OK) {
@@ -228,9 +236,9 @@
     return result;
 }
 
-ConversionResult<media::DeviceDescriptorBase>
+ConversionResult<media::AudioPort>
 legacy2aidl_DeviceDescriptorBase(const sp<DeviceDescriptorBase>& legacy) {
-    media::DeviceDescriptorBase aidl;
+    media::AudioPort aidl;
     status_t status = legacy->writeToParcelable(&aidl);
     if (status != OK) {
         return base::unexpected(status);