Merge "Generate face HAL java-source"
diff --git a/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp b/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp
index a3dc45b..8cc1882 100644
--- a/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp
+++ b/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp
@@ -2269,48 +2269,74 @@
 
     // Acquire the graphics buffer allocator
     android::GraphicBufferAllocator& alloc(android::GraphicBufferAllocator::get());
-    const auto usage = GRALLOC_USAGE_HW_TEXTURE |
-                       GRALLOC_USAGE_SW_READ_RARELY |
-                       GRALLOC_USAGE_SW_WRITE_OFTEN;
+    const auto usage =
+            GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_SW_READ_RARELY | GRALLOC_USAGE_SW_WRITE_OFTEN;
     const auto format = HAL_PIXEL_FORMAT_RGBA_8888;
-    const auto width = 640;
-    const auto height = 360;
-
-    // Allocate buffers to use
-    hidl_vec<BufferDesc> buffers;
-    buffers.resize(kBuffersToHold);
-    for (auto i = 0; i < kBuffersToHold; ++i) {
-        unsigned pixelsPerLine;
-        buffer_handle_t memHandle = nullptr;
-        android::status_t result = alloc.allocate(width,
-                                                  height,
-                                                  format,
-                                                  1,
-                                                  usage,
-                                                  &memHandle,
-                                                  &pixelsPerLine,
-                                                  0,
-                                                  "EvsApp");
-        if (result != android::NO_ERROR) {
-            LOG(ERROR) << __FUNCTION__ << " failed to allocate memory.";
-        } else {
-            BufferDesc buf;
-            AHardwareBuffer_Desc* pDesc =
-                reinterpret_cast<AHardwareBuffer_Desc *>(&buf.buffer.description);
-            pDesc->width = width;
-            pDesc->height = height;
-            pDesc->layers = 1;
-            pDesc->format = format;
-            pDesc->usage = usage;
-            pDesc->stride = pixelsPerLine;
-            buf.buffer.nativeHandle = memHandle;
-            buf.bufferId = i;   // Unique number to identify this buffer
-            buffers[i] = buf;
-        }
-    }
+    uint32_t width = 640;
+    uint32_t height = 360;
+    camera_metadata_entry_t streamCfgs;
 
     // Test each reported camera
-    for (auto&& cam: cameraInfo) {
+    for (auto&& cam : cameraInfo) {
+        bool foundCfg = false;
+        if (!find_camera_metadata_entry(reinterpret_cast<camera_metadata_t*>(cam.metadata.data()),
+                                        ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
+                                        &streamCfgs)) {
+            // Stream configurations are found in metadata
+            RawStreamConfig* ptr = reinterpret_cast<RawStreamConfig*>(streamCfgs.data.i32);
+
+            LOG(DEBUG) << __LINE__ << " start searching " << streamCfgs.count;
+            for (unsigned idx = 0; idx < streamCfgs.count; idx++) {
+                LOG(DEBUG) << "ptr->direction= " << ptr->direction
+                           << " ptr->format= " << ptr->format;
+                if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT &&
+                    ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) {
+                    width = ptr->width;
+                    height = ptr->height;
+                    foundCfg = true;
+                    // Always use the 1st available configuration
+                    break;
+                }
+                ++ptr;
+            }
+        }
+
+        if (!foundCfg) {
+            LOG(INFO) << "No configuration found. Use default stream configurations.";
+        }
+
+        // Allocate buffers to use
+        hidl_vec<BufferDesc> buffers;
+        buffers.resize(kBuffersToHold);
+        for (auto i = 0; i < kBuffersToHold; ++i) {
+            unsigned pixelsPerLine;
+            buffer_handle_t memHandle = nullptr;
+            android::status_t result =
+                    alloc.allocate(width, height, format, 1, usage, &memHandle, &pixelsPerLine, 0,
+                                   "CameraStreamExternalBufferingTest");
+            if (result != android::NO_ERROR) {
+                LOG(ERROR) << __FUNCTION__ << " failed to allocate memory.";
+                // Release previous allocated buffers
+                for (auto j = 0; j < i; j++) {
+                    alloc.free(buffers[i].buffer.nativeHandle);
+                }
+                return;
+            } else {
+                BufferDesc buf;
+                AHardwareBuffer_Desc* pDesc =
+                        reinterpret_cast<AHardwareBuffer_Desc*>(&buf.buffer.description);
+                pDesc->width = width;
+                pDesc->height = height;
+                pDesc->layers = 1;
+                pDesc->format = format;
+                pDesc->usage = usage;
+                pDesc->stride = pixelsPerLine;
+                buf.buffer.nativeHandle = memHandle;
+                buf.bufferId = i;  // Unique number to identify this buffer
+                buffers[i] = buf;
+            }
+        }
+
         bool isLogicalCam = false;
         getPhysicalCameraIds(cam.v1.cameraId, isLogicalCam);
 
@@ -2374,13 +2400,12 @@
         // Explicitly release the camera
         pEnumerator->closeCamera(pCam);
         activeCameras.clear();
+        // Release buffers
+        for (auto& b : buffers) {
+            alloc.free(b.buffer.nativeHandle);
+        }
+        buffers.resize(0);
     }
-
-    // Release buffers
-    for (auto& b : buffers) {
-        alloc.free(b.buffer.nativeHandle);
-    }
-    buffers.resize(0);
 }
 
 
diff --git a/tv/tuner/1.1/default/Filter.cpp b/tv/tuner/1.1/default/Filter.cpp
index 7d609ea..e0c785e 100644
--- a/tv/tuner/1.1/default/Filter.cpp
+++ b/tv/tuner/1.1/default/Filter.cpp
@@ -532,7 +532,7 @@
     return mTpid;
 }
 
-void Filter::updateFilterOutput(vector<uint8_t> data) {
+void Filter::updateFilterOutput(const vector<uint8_t>& data) {
     std::lock_guard<std::mutex> lock(mFilterOutputLock);
     mFilterOutput.insert(mFilterOutput.end(), data.begin(), data.end());
 }
@@ -542,7 +542,7 @@
     mPts = pts;
 }
 
-void Filter::updateRecordOutput(vector<uint8_t> data) {
+void Filter::updateRecordOutput(const vector<uint8_t>& data) {
     std::lock_guard<std::mutex> lock(mRecordFilterOutputLock);
     mRecordFilterOutput.insert(mRecordFilterOutput.end(), data.begin(), data.end());
 }
@@ -689,9 +689,7 @@
     Result result;
     if (mPts) {
         result = createMediaFilterEventWithIon(mFilterOutput);
-        if (result == Result::SUCCESS) {
-            mFilterOutput.clear();
-        }
+        mFilterOutput.clear();
         return result;
     }
 
@@ -729,6 +727,7 @@
         }
 
         result = createMediaFilterEventWithIon(mPesOutput);
+        mPesOutput.clear();
         if (result != Result::SUCCESS) {
             return result;
         }
@@ -739,7 +738,7 @@
     return Result::SUCCESS;
 }
 
-Result Filter::createMediaFilterEventWithIon(vector<uint8_t> output) {
+Result Filter::createMediaFilterEventWithIon(const vector<uint8_t>& output) {
     if (mUsingSharedAvMem) {
         if (mSharedAvMemHandle.getNativeHandle() == nullptr) {
             return Result::UNKNOWN_ERROR;
@@ -793,7 +792,7 @@
     return Result::SUCCESS;
 }
 
-bool Filter::writeSectionsAndCreateEvent(vector<uint8_t> data) {
+bool Filter::writeSectionsAndCreateEvent(const vector<uint8_t>& data) {
     // TODO check how many sections has been read
     ALOGD("[Filter] section handler");
     std::lock_guard<std::mutex> lock(mFilterEventLock);
@@ -874,7 +873,7 @@
     return nativeHandle;
 }
 
-Result Filter::createIndependentMediaEvents(vector<uint8_t> output) {
+Result Filter::createIndependentMediaEvents(const vector<uint8_t>& output) {
     int av_fd = createAvIonFd(output.size());
     if (av_fd == -1) {
         return Result::UNKNOWN_ERROR;
@@ -912,8 +911,6 @@
     mFilterEvent.events.resize(size + 1);
     mFilterEvent.events[size].media(mediaEvent);
 
-    // Clear and log
-    output.clear();
     mAvBufferCopyCount = 0;
     ::close(av_fd);
     if (DEBUG_FILTER) {
@@ -922,7 +919,7 @@
     return Result::SUCCESS;
 }
 
-Result Filter::createShareMemMediaEvents(vector<uint8_t> output) {
+Result Filter::createShareMemMediaEvents(const vector<uint8_t>& output) {
     // copy the filtered data to the shared buffer
     uint8_t* sharedAvBuffer = getIonBuffer(mSharedAvMemHandle.getNativeHandle()->data[0],
                                            output.size() + mSharedAvMemOffset);
@@ -955,8 +952,6 @@
     mFilterEvent.events.resize(size + 1);
     mFilterEvent.events[size].media(mediaEvent);
 
-    // Clear and log
-    output.clear();
     if (DEBUG_FILTER) {
         ALOGD("[Filter] shared av data length %d", mediaEvent.dataLength);
     }
diff --git a/tv/tuner/1.1/default/Filter.h b/tv/tuner/1.1/default/Filter.h
index 659bebf..1ea2f51 100644
--- a/tv/tuner/1.1/default/Filter.h
+++ b/tv/tuner/1.1/default/Filter.h
@@ -93,8 +93,8 @@
      */
     bool createFilterMQ();
     uint16_t getTpid();
-    void updateFilterOutput(vector<uint8_t> data);
-    void updateRecordOutput(vector<uint8_t> data);
+    void updateFilterOutput(const vector<uint8_t>& data);
+    void updateRecordOutput(const vector<uint8_t>& data);
     void updatePts(uint64_t pts);
     Result startFilterHandler();
     Result startRecordFilterHandler();
@@ -177,7 +177,7 @@
     void deleteEventFlag();
     bool writeDataToFilterMQ(const std::vector<uint8_t>& data);
     bool readDataFromMQ();
-    bool writeSectionsAndCreateEvent(vector<uint8_t> data);
+    bool writeSectionsAndCreateEvent(const vector<uint8_t>& data);
     void maySendFilterStatusCallback();
     DemuxFilterStatus checkFilterStatusChange(uint32_t availableToWrite, uint32_t availableToRead,
                                               uint32_t highThreshold, uint32_t lowThreshold);
@@ -193,9 +193,9 @@
     int createAvIonFd(int size);
     uint8_t* getIonBuffer(int fd, int size);
     native_handle_t* createNativeHandle(int fd);
-    Result createMediaFilterEventWithIon(vector<uint8_t> output);
-    Result createIndependentMediaEvents(vector<uint8_t> output);
-    Result createShareMemMediaEvents(vector<uint8_t> output);
+    Result createMediaFilterEventWithIon(const vector<uint8_t>& output);
+    Result createIndependentMediaEvents(const vector<uint8_t>& output);
+    Result createShareMemMediaEvents(const vector<uint8_t>& output);
     bool sameFile(int fd1, int fd2);
 
     DemuxFilterEvent createMediaEvent();
diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterSubType.aidl
similarity index 97%
rename from tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl
rename to tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterSubType.aidl
index 2aa3a89..2e2a774 100644
--- a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl
+++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterSubType.aidl
@@ -34,7 +34,7 @@
 package android.hardware.tv.tuner;
 /* @hide */
 @VintfStability
-union DemuxFilterTypeDemuxFilterSubType {
+union DemuxFilterSubType {
   android.hardware.tv.tuner.DemuxTsFilterType tsFilterType = android.hardware.tv.tuner.DemuxTsFilterType.UNDEFINED;
   android.hardware.tv.tuner.DemuxMmtpFilterType mmtpFilterType;
   android.hardware.tv.tuner.DemuxIpFilterType ipFilterType;
diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterType.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterType.aidl
index 14f9202..b2f499d 100644
--- a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterType.aidl
+++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/DemuxFilterType.aidl
@@ -36,5 +36,5 @@
 @VintfStability
 parcelable DemuxFilterType {
   android.hardware.tv.tuner.DemuxFilterMainType mainType = android.hardware.tv.tuner.DemuxFilterMainType.UNDEFINED;
-  android.hardware.tv.tuner.DemuxFilterTypeDemuxFilterSubType subType;
+  android.hardware.tv.tuner.DemuxFilterSubType subType;
 }
diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendGuardInterval.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendGuardInterval.aidl
index 3d99633..15c738a 100644
--- a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendGuardInterval.aidl
+++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendGuardInterval.aidl
@@ -36,6 +36,6 @@
 @VintfStability
 union FrontendGuardInterval {
   android.hardware.tv.tuner.FrontendDvbtGuardInterval dvbt = android.hardware.tv.tuner.FrontendDvbtGuardInterval.UNDEFINED;
-  android.hardware.tv.tuner.FrontendDvbtGuardInterval isdbt;
+  android.hardware.tv.tuner.FrontendIsdbtGuardInterval isdbt;
   android.hardware.tv.tuner.FrontendDtmbGuardInterval dtmb;
 }
diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
index 5fcdf36..ffd30ef 100644
--- a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
+++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
@@ -41,7 +41,7 @@
   android.hardware.tv.tuner.FrontendIsdbtModulation modulation = android.hardware.tv.tuner.FrontendIsdbtModulation.UNDEFINED;
   android.hardware.tv.tuner.FrontendIsdbtBandwidth bandwidth = android.hardware.tv.tuner.FrontendIsdbtBandwidth.UNDEFINED;
   android.hardware.tv.tuner.FrontendIsdbtMode mode = android.hardware.tv.tuner.FrontendIsdbtMode.UNDEFINED;
-  android.hardware.tv.tuner.FrontendDvbtCoderate coderate = android.hardware.tv.tuner.FrontendDvbtCoderate.UNDEFINED;
-  android.hardware.tv.tuner.FrontendDvbtGuardInterval guardInterval = android.hardware.tv.tuner.FrontendDvbtGuardInterval.UNDEFINED;
+  android.hardware.tv.tuner.FrontendIsdbtCoderate coderate = android.hardware.tv.tuner.FrontendIsdbtCoderate.UNDEFINED;
+  android.hardware.tv.tuner.FrontendIsdbtGuardInterval guardInterval = android.hardware.tv.tuner.FrontendIsdbtGuardInterval.UNDEFINED;
   int serviceAreaId;
 }
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterSubType.aidl
similarity index 94%
rename from tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl
rename to tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterSubType.aidl
index cf1a59c..3dfc0ae 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterTypeDemuxFilterSubType.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterSubType.aidl
@@ -23,10 +23,11 @@
 import android.hardware.tv.tuner.DemuxTsFilterType;
 
 /**
+ * The different Demux Filter Sub Types.
  * @hide
  */
 @VintfStability
-union DemuxFilterTypeDemuxFilterSubType {
+union DemuxFilterSubType {
     DemuxTsFilterType tsFilterType = DemuxTsFilterType.UNDEFINED;
 
     DemuxMmtpFilterType mmtpFilterType;
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterType.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterType.aidl
index 38348b6..f5eda60 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterType.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/DemuxFilterType.aidl
@@ -17,7 +17,7 @@
 package android.hardware.tv.tuner;
 
 import android.hardware.tv.tuner.DemuxFilterMainType;
-import android.hardware.tv.tuner.DemuxFilterTypeDemuxFilterSubType;
+import android.hardware.tv.tuner.DemuxFilterSubType;
 
 /**
  * Demux Filter Type.
@@ -27,5 +27,5 @@
 parcelable DemuxFilterType {
     DemuxFilterMainType mainType = DemuxFilterMainType.UNDEFINED;
 
-    DemuxFilterTypeDemuxFilterSubType subType;
+    DemuxFilterSubType subType;
 }
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendGuardInterval.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendGuardInterval.aidl
index 3893523..cf82921 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendGuardInterval.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendGuardInterval.aidl
@@ -18,15 +18,17 @@
 
 import android.hardware.tv.tuner.FrontendDvbtGuardInterval;
 import android.hardware.tv.tuner.FrontendDtmbGuardInterval;
+import android.hardware.tv.tuner.FrontendIsdbtGuardInterval;
 
 /**
+ * The different Guard Interval Types.
  * @hide
  */
 @VintfStability
 union FrontendGuardInterval {
     FrontendDvbtGuardInterval dvbt = FrontendDvbtGuardInterval.UNDEFINED;
 
-    FrontendDvbtGuardInterval isdbt;
+    FrontendIsdbtGuardInterval isdbt;
 
     FrontendDtmbGuardInterval dtmb;
 }
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCapabilities.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCapabilities.aidl
index 1480906..4b764ad 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCapabilities.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCapabilities.aidl
@@ -38,12 +38,12 @@
     int modulationCap;
 
     /**
-     * Code Rates defined by FrontendDvbtCoderate.
+     * Code Rates defined by FrontendIsdbtCoderate.
      */
     int coderateCap;
 
     /**
-     * Guard Interval Types defined by FrontendDvbtGuardInterval.
+     * Guard Interval Types defined by FrontendIsdbtGuardInterval.
      */
     int guardIntervalCap;
 }
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCoderate.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCoderate.aidl
index 0a857b1..ee229c5 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCoderate.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtCoderate.aidl
@@ -17,7 +17,7 @@
 package android.hardware.tv.tuner;
 
 /**
- * Hierarchy Type for ISDBT.
+ * Code Rate for ISDBT.
  * @hide
  */
 @VintfStability
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
index 73d935a..ffa8845 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/FrontendIsdbtSettings.aidl
@@ -16,9 +16,9 @@
 
 package android.hardware.tv.tuner;
 
-import android.hardware.tv.tuner.FrontendDvbtCoderate;
-import android.hardware.tv.tuner.FrontendDvbtGuardInterval;
 import android.hardware.tv.tuner.FrontendIsdbtBandwidth;
+import android.hardware.tv.tuner.FrontendIsdbtCoderate;
+import android.hardware.tv.tuner.FrontendIsdbtGuardInterval;
 import android.hardware.tv.tuner.FrontendIsdbtMode;
 import android.hardware.tv.tuner.FrontendIsdbtModulation;
 import android.hardware.tv.tuner.FrontendSpectralInversion;
@@ -47,9 +47,9 @@
 
     FrontendIsdbtMode mode = FrontendIsdbtMode.UNDEFINED;
 
-    FrontendDvbtCoderate coderate = FrontendDvbtCoderate.UNDEFINED;
+    FrontendIsdbtCoderate coderate = FrontendIsdbtCoderate.UNDEFINED;
 
-    FrontendDvbtGuardInterval guardInterval = FrontendDvbtGuardInterval.UNDEFINED;
+    FrontendIsdbtGuardInterval guardInterval = FrontendIsdbtGuardInterval.UNDEFINED;
 
     int serviceAreaId;
 }
diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/ITuner.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/ITuner.aidl
index f881082..ab8b0b8 100644
--- a/tv/tuner/aidl/android/hardware/tv/tuner/ITuner.aidl
+++ b/tv/tuner/aidl/android/hardware/tv/tuner/ITuner.aidl
@@ -22,7 +22,6 @@
 import android.hardware.tv.tuner.IDescrambler;
 import android.hardware.tv.tuner.IFrontend;
 import android.hardware.tv.tuner.ILnb;
-import android.hardware.tv.tuner.FrontendDtmbCapabilities;
 
 /**
  * Top level interface to manage Frontend, Demux and Decrambler hardware
diff --git a/tv/tuner/aidl/default/Dvr.cpp b/tv/tuner/aidl/default/Dvr.cpp
index 51cb1e0..9eadb8c 100644
--- a/tv/tuner/aidl/default/Dvr.cpp
+++ b/tv/tuner/aidl/default/Dvr.cpp
@@ -253,7 +253,8 @@
 bool Dvr::readPlaybackFMQ(bool isVirtualFrontend, bool isRecording) {
     // Read playback data from the input FMQ
     int size = mDvrMQ->availableToRead();
-    int playbackPacketSize = mDvrSettings.get<DvrSettings::Tag::playback>().packetSize;
+    uint8_t playbackPacketSize =
+            static_cast<uint8_t>(mDvrSettings.get<DvrSettings::Tag::playback>().packetSize);
     vector<int8_t> dataOutputBuffer;
     dataOutputBuffer.resize(playbackPacketSize);
     // Dispatch the packet to the PID matching filter output buffer
diff --git a/tv/tuner/aidl/default/Filter.cpp b/tv/tuner/aidl/default/Filter.cpp
index dd9bee3..77ca2ee 100644
--- a/tv/tuner/aidl/default/Filter.cpp
+++ b/tv/tuner/aidl/default/Filter.cpp
@@ -46,29 +46,29 @@
 
     switch (mType.mainType) {
         case DemuxFilterMainType::TS:
-            if (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+            if (mType.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                         DemuxTsFilterType::AUDIO ||
-                mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+                mType.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                         DemuxTsFilterType::VIDEO) {
                 mIsMediaFilter = true;
             }
-            if (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+            if (mType.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                 DemuxTsFilterType::PCR) {
                 mIsPcrFilter = true;
             }
-            if (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+            if (mType.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                 DemuxTsFilterType::RECORD) {
                 mIsRecordFilter = true;
             }
             break;
         case DemuxFilterMainType::MMTP:
-            if (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>() ==
+            if (mType.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
                         DemuxMmtpFilterType::AUDIO ||
-                mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>() ==
+                mType.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
                         DemuxMmtpFilterType::VIDEO) {
                 mIsMediaFilter = true;
             }
-            if (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>() ==
+            if (mType.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
                 DemuxMmtpFilterType::RECORD) {
                 mIsRecordFilter = true;
             }
@@ -519,7 +519,7 @@
     return mTpid;
 }
 
-void Filter::updateFilterOutput(vector<int8_t> data) {
+void Filter::updateFilterOutput(vector<int8_t>& data) {
     std::lock_guard<std::mutex> lock(mFilterOutputLock);
     mFilterOutput.insert(mFilterOutput.end(), data.begin(), data.end());
 }
@@ -529,7 +529,7 @@
     mPts = pts;
 }
 
-void Filter::updateRecordOutput(vector<int8_t> data) {
+void Filter::updateRecordOutput(vector<int8_t>& data) {
     std::lock_guard<std::mutex> lock(mRecordFilterOutputLock);
     mRecordFilterOutput.insert(mRecordFilterOutput.end(), data.begin(), data.end());
 }
@@ -538,7 +538,7 @@
     std::lock_guard<std::mutex> lock(mFilterOutputLock);
     switch (mType.mainType) {
         case DemuxFilterMainType::TS:
-            switch (mType.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>()) {
+            switch (mType.subType.get<DemuxFilterSubType::Tag::tsFilterType>()) {
                 case DemuxTsFilterType::UNDEFINED:
                     break;
                 case DemuxTsFilterType::SECTION:
diff --git a/tv/tuner/aidl/default/Filter.h b/tv/tuner/aidl/default/Filter.h
index 7a037e6..4bb1a72 100644
--- a/tv/tuner/aidl/default/Filter.h
+++ b/tv/tuner/aidl/default/Filter.h
@@ -83,8 +83,8 @@
      */
     bool createFilterMQ();
     uint16_t getTpid();
-    void updateFilterOutput(vector<int8_t> data);
-    void updateRecordOutput(vector<int8_t> data);
+    void updateFilterOutput(vector<int8_t>& data);
+    void updateRecordOutput(vector<int8_t>& data);
     void updatePts(uint64_t pts);
     ::ndk::ScopedAStatus startFilterHandler();
     ::ndk::ScopedAStatus startRecordFilterHandler();
diff --git a/tv/tuner/aidl/default/Frontend.cpp b/tv/tuner/aidl/default/Frontend.cpp
index 7f7b989..438f897 100644
--- a/tv/tuner/aidl/default/Frontend.cpp
+++ b/tv/tuner/aidl/default/Frontend.cpp
@@ -532,7 +532,7 @@
                     }
                     case FrontendType::ISDBT: {
                         interval.set<FrontendGuardInterval::Tag::isdbt>(
-                                FrontendDvbtGuardInterval::INTERVAL_1_32);  // value = 1 << 1
+                                FrontendIsdbtGuardInterval::INTERVAL_1_32);  // value = 1 << 1
                         status.set<FrontendStatus::interval>(interval);
                         break;
                     }
diff --git a/tv/tuner/aidl/default/Tuner.cpp b/tv/tuner/aidl/default/Tuner.cpp
index 8335ffa..94c90a7 100644
--- a/tv/tuner/aidl/default/Tuner.cpp
+++ b/tv/tuner/aidl/default/Tuner.cpp
@@ -114,10 +114,9 @@
             .modeCap = (int)FrontendIsdbtMode::MODE_1 | (int)FrontendIsdbtMode::MODE_2,
             .bandwidthCap = (int)FrontendIsdbtBandwidth::BANDWIDTH_6MHZ,
             .modulationCap = (int)FrontendIsdbtModulation::MOD_16QAM,
-            // ISDBT shares coderate and guard interval with DVBT
-            .coderateCap = (int)FrontendDvbtCoderate::CODERATE_4_5 |
-                           (int)FrontendDvbtCoderate::CODERATE_6_7,
-            .guardIntervalCap = (int)FrontendDvbtGuardInterval::INTERVAL_1_128,
+            .coderateCap = (int)FrontendIsdbtCoderate::CODERATE_4_5 |
+                           (int)FrontendIsdbtCoderate::CODERATE_6_7,
+            .guardIntervalCap = (int)FrontendIsdbtGuardInterval::INTERVAL_1_128,
     };
     capsIsdbt.set<FrontendCapabilities::Tag::isdbtCaps>(isdbtCaps);
     mFrontendCaps[5] = capsIsdbt;
diff --git a/tv/tuner/aidl/vts/functional/DescramblerTests.cpp b/tv/tuner/aidl/vts/functional/DescramblerTests.cpp
index e0ee391..157fa04 100644
--- a/tv/tuner/aidl/vts/functional/DescramblerTests.cpp
+++ b/tv/tuner/aidl/vts/functional/DescramblerTests.cpp
@@ -175,9 +175,9 @@
                                                                 DemuxPid& pid) {
     switch (type.mainType) {
         case DemuxFilterMainType::TS:
-            if (type.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+            if (type.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                         DemuxTsFilterType::AUDIO ||
-                type.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>() ==
+                type.subType.get<DemuxFilterSubType::Tag::tsFilterType>() ==
                         DemuxTsFilterType::VIDEO) {
                 pid.set<DemuxPid::Tag::tPid>(settings.get<DemuxFilterSettings::Tag::ts>().tpid);
             } else {
@@ -186,9 +186,9 @@
             }
             break;
         case DemuxFilterMainType::MMTP:
-            if (type.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>() ==
+            if (type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
                         DemuxMmtpFilterType::AUDIO ||
-                type.subType.get<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>() ==
+                type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
                         DemuxMmtpFilterType::VIDEO) {
                 pid.set<DemuxPid::Tag::mmtpPid>(
                         settings.get<DemuxFilterSettings::Tag::mmtp>().mmtpPid);
diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
index e5cee76..13c5a80 100644
--- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
+++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
@@ -146,23 +146,23 @@
         type.mainType = static_cast<DemuxFilterMainType>(1 << bit);
         switch (type.mainType) {
             case DemuxFilterMainType::TS:
-                type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                         DemuxTsFilterType::UNDEFINED);
                 break;
             case DemuxFilterMainType::MMTP:
-                type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                         DemuxMmtpFilterType::UNDEFINED);
                 break;
             case DemuxFilterMainType::IP:
-                type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                         DemuxIpFilterType::UNDEFINED);
                 break;
             case DemuxFilterMainType::TLV:
-                type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tlvFilterType>(
+                type.subType.set<DemuxFilterSubType::Tag::tlvFilterType>(
                         DemuxTlvFilterType::UNDEFINED);
                 break;
             case DemuxFilterMainType::ALP:
-                type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::alpFilterType>(
+                type.subType.set<DemuxFilterSubType::Tag::alpFilterType>(
                         DemuxAlpFilterType::UNDEFINED);
                 break;
             default:
diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
index 1ddb641..b4fb54f 100644
--- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
+++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
@@ -119,9 +119,8 @@
     string defaultVideoFilterId = "FILTER_VIDEO_DEFAULT";
 
     filterMap[defaultVideoFilterId].type.mainType = DemuxFilterMainType::TS;
-    filterMap[defaultVideoFilterId]
-            .type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
-                    DemuxTsFilterType::VIDEO);
+    filterMap[defaultVideoFilterId].type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
+            DemuxTsFilterType::VIDEO);
     filterMap[defaultVideoFilterId].bufferSize = FMQ_SIZE_16M;
     filterMap[defaultVideoFilterId].settings =
             DemuxFilterSettings::make<DemuxFilterSettings::Tag::ts>();
@@ -138,9 +137,8 @@
             VideoStreamType::MPEG1);
 
     filterMap[defaultAudioFilterId].type.mainType = DemuxFilterMainType::TS;
-    filterMap[defaultAudioFilterId]
-            .type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
-                    DemuxTsFilterType::AUDIO);
+    filterMap[defaultAudioFilterId].type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
+            DemuxTsFilterType::AUDIO);
     filterMap[defaultAudioFilterId].bufferSize = FMQ_SIZE_16M;
     filterMap[defaultAudioFilterId].settings =
             DemuxFilterSettings::make<DemuxFilterSettings::Tag::ts>();
diff --git a/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h b/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
index 8525b4f..2d7be9e 100644
--- a/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
+++ b/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
@@ -689,11 +689,11 @@
                 bool isTsSet = false;
                 switch (subType) {
                     case FilterSubTypeEnum::UNDEFINED:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::UNDEFINED);
                         break;
                     case FilterSubTypeEnum::SECTION:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::SECTION);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::section>(
                                 readSectionFilterSettings(filterConfig));
@@ -701,46 +701,46 @@
                         break;
                     case FilterSubTypeEnum::PES:
                         // TODO: b/182519645 support all the filter settings
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::PES);
                         break;
                     case FilterSubTypeEnum::TS:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::TS);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
                         isTsSet = true;
                         break;
                     case FilterSubTypeEnum::PCR:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::PCR);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
                         isTsSet = true;
                         break;
                     case FilterSubTypeEnum::TEMI:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::TEMI);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
                         isTsSet = true;
                         break;
                     case FilterSubTypeEnum::AUDIO:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::AUDIO);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::av>(
                                 readAvFilterSettings(filterConfig));
                         isTsSet = true;
                         break;
                     case FilterSubTypeEnum::VIDEO:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::VIDEO);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::av>(
                                 readAvFilterSettings(filterConfig));
                         isTsSet = true;
                         break;
                     case FilterSubTypeEnum::RECORD:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::tsFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
                                 DemuxTsFilterType::RECORD);
                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::record>(
                                 readRecordFilterSettings(filterConfig));
@@ -766,11 +766,11 @@
                 bool isMmtpSet = false;
                 switch (subType) {
                     case FilterSubTypeEnum::UNDEFINED:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::UNDEFINED);
                         break;
                     case FilterSubTypeEnum::SECTION:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::SECTION);
                         mmtp.filterSettings
                                 .set<DemuxMmtpFilterSettingsFilterSettings::Tag::section>(
@@ -778,40 +778,40 @@
                         isMmtpSet = true;
                         break;
                     case FilterSubTypeEnum::PES:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::PES);
                         // TODO: b/182519645 support all the filter settings
                         break;
                     case FilterSubTypeEnum::MMTP:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::MMTP);
                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
                         isMmtpSet = true;
                         break;
                     case FilterSubTypeEnum::AUDIO:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::AUDIO);
                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::av>(
                                 readAvFilterSettings(filterConfig));
                         isMmtpSet = true;
                         break;
                     case FilterSubTypeEnum::VIDEO:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::VIDEO);
                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::av>(
                                 readAvFilterSettings(filterConfig));
                         isMmtpSet = true;
                         break;
                     case FilterSubTypeEnum::RECORD:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::RECORD);
                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::record>(
                                 readRecordFilterSettings(filterConfig));
                         isMmtpSet = true;
                         break;
                     case FilterSubTypeEnum::DOWNLOAD:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::mmtpFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
                                 DemuxMmtpFilterType::DOWNLOAD);
                         // TODO: b/182519645 support all the filter settings
                         break;
@@ -834,18 +834,18 @@
                 DemuxIpFilterSettings ip;
                 switch (subType) {
                     case FilterSubTypeEnum::UNDEFINED:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                                 DemuxIpFilterType::UNDEFINED);
                         break;
                     case FilterSubTypeEnum::SECTION:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                                 DemuxIpFilterType::SECTION);
                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::section>(
                                 readSectionFilterSettings(filterConfig));
                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
                         break;
                     case FilterSubTypeEnum::NTP:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                                 DemuxIpFilterType::NTP);
                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
@@ -860,14 +860,14 @@
                         break;
                     }
                     case FilterSubTypeEnum::IP_PAYLOAD:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                                 DemuxIpFilterType::IP_PAYLOAD);
                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
                                 true);
                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
                         break;
                     case FilterSubTypeEnum::PAYLOAD_THROUGH:
-                        type.subType.set<DemuxFilterTypeDemuxFilterSubType::Tag::ipFilterType>(
+                        type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
                                 DemuxIpFilterType::PAYLOAD_THROUGH);
                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
                                 true);