Make audio stuff parcelable.

Make some generic audio classes parcelable so that they can be easily
used in binder call, including AudioProfile, AudioPort, AudioPortConfig,
DeviceDescriptorBase.

Bug: 135621476
Test: make
Change-Id: I8bdcd0da13739fc53638c78aac133336b77fb9d2
diff --git a/media/libaudiofoundation/AudioGain.cpp b/media/libaudiofoundation/AudioGain.cpp
index 9d1d6db..269de28 100644
--- a/media/libaudiofoundation/AudioGain.cpp
+++ b/media/libaudiofoundation/AudioGain.cpp
@@ -147,7 +147,7 @@
 
 status_t AudioGains::writeToParcel(android::Parcel *parcel) const {
     status_t status = NO_ERROR;
-    if ((status = parcel->writeUint64(this->size())) != NO_ERROR) return status;
+    if ((status = parcel->writeVectorSize(*this)) != NO_ERROR) return status;
     for (const auto &audioGain : *this) {
         if ((status = parcel->writeParcelable(*audioGain)) != NO_ERROR) {
             break;
@@ -158,15 +158,14 @@
 
 status_t AudioGains::readFromParcel(const android::Parcel *parcel) {
     status_t status = NO_ERROR;
-    uint64_t count;
-    if ((status = parcel->readUint64(&count)) != NO_ERROR) return status;
-    for (uint64_t i = 0; i < count; i++) {
-        sp<AudioGain> audioGain = new AudioGain(0, false);
-        if ((status = parcel->readParcelable(audioGain.get())) != NO_ERROR) {
+    this->clear();
+    if ((status = parcel->resizeOutVector(this)) != NO_ERROR) return status;
+    for (size_t i = 0; i < this->size(); i++) {
+        this->at(i) = new AudioGain(0, false);
+        if ((status = parcel->readParcelable(this->at(i).get())) != NO_ERROR) {
             this->clear();
             break;
         }
-        this->push_back(audioGain);
     }
     return status;
 }