diff --git a/automotive/evs/1.0/vts/functional/Android.bp b/automotive/evs/1.0/vts/functional/Android.bp
index 22ceff3..e86e9bc 100644
--- a/automotive/evs/1.0/vts/functional/Android.bp
+++ b/automotive/evs/1.0/vts/functional/Android.bp
@@ -19,7 +19,8 @@
 
     srcs: [
         "VtsEvsV1_0TargetTest.cpp",
-        "FrameHandler.cpp"
+        "FrameHandler.cpp",
+        "FormatConvert.cpp"
     ],
 
     defaults: [
diff --git a/automotive/evs/1.0/vts/functional/FormatConvert.cpp b/automotive/evs/1.0/vts/functional/FormatConvert.cpp
new file mode 100644
index 0000000..e5cc8ee
--- /dev/null
+++ b/automotive/evs/1.0/vts/functional/FormatConvert.cpp
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "VtsHalEvsTest"
+
+#include "FormatConvert.h"
+
+#include <algorithm>    // std::min
+
+
+// Round up to the nearest multiple of the given alignment value
+template<unsigned alignment>
+int align(int value) {
+    static_assert((alignment && !(alignment & (alignment - 1))),
+                  "alignment must be a power of 2");
+
+    unsigned mask = alignment - 1;
+    return (value + mask) & ~mask;
+}
+
+
+// Limit the given value to the provided range.  :)
+static inline float clamp(float v, float min, float max) {
+    if (v < min) return min;
+    if (v > max) return max;
+    return v;
+}
+
+
+static uint32_t yuvToRgbx(const unsigned char Y, const unsigned char Uin, const unsigned char Vin) {
+    // Don't use this if you want to see the best performance.  :)
+    // Better to do this in a pixel shader if we really have to, but on actual
+    // embedded hardware we expect to be able to texture directly from the YUV data
+    float U = Uin - 128.0f;
+    float V = Vin - 128.0f;
+
+    float Rf = Y + 1.140f*V;
+    float Gf = Y - 0.395f*U - 0.581f*V;
+    float Bf = Y + 2.032f*U;
+    unsigned char R = (unsigned char)clamp(Rf, 0.0f, 255.0f);
+    unsigned char G = (unsigned char)clamp(Gf, 0.0f, 255.0f);
+    unsigned char B = (unsigned char)clamp(Bf, 0.0f, 255.0f);
+
+    return (R      ) |
+           (G <<  8) |
+           (B << 16) |
+           0xFF000000;  // Fill the alpha channel with ones
+}
+
+
+void copyNV21toRGB32(unsigned width, unsigned height,
+                     uint8_t* src,
+                     uint32_t* dst, unsigned dstStridePixels)
+{
+    // The NV21 format provides a Y array of 8bit values, followed by a 1/2 x 1/2 interleaved
+    // U/V array.  It assumes an even width and height for the overall image, and a horizontal
+    // stride that is an even multiple of 16 bytes for both the Y and UV arrays.
+    unsigned strideLum = align<16>(width);
+    unsigned sizeY = strideLum * height;
+    unsigned strideColor = strideLum;   // 1/2 the samples, but two interleaved channels
+    unsigned offsetUV = sizeY;
+
+    uint8_t* srcY = src;
+    uint8_t* srcUV = src+offsetUV;
+
+    for (unsigned r = 0; r < height; r++) {
+        // Note that we're walking the same UV row twice for even/odd luminance rows
+        uint8_t* rowY  = srcY  + r*strideLum;
+        uint8_t* rowUV = srcUV + (r/2 * strideColor);
+
+        uint32_t* rowDest = dst + r*dstStridePixels;
+
+        for (unsigned c = 0; c < width; c++) {
+            unsigned uCol = (c & ~1);   // uCol is always even and repeats 1:2 with Y values
+            unsigned vCol = uCol | 1;   // vCol is always odd
+            rowDest[c] = yuvToRgbx(rowY[c], rowUV[uCol], rowUV[vCol]);
+        }
+    }
+}
+
+
+void copyYV12toRGB32(unsigned width, unsigned height,
+                     uint8_t* src,
+                     uint32_t* dst, unsigned dstStridePixels)
+{
+    // The YV12 format provides a Y array of 8bit values, followed by a 1/2 x 1/2 U array, followed
+    // by another 1/2 x 1/2 V array.  It assumes an even width and height for the overall image,
+    // and a horizontal stride that is an even multiple of 16 bytes for each of the Y, U,
+    // and V arrays.
+    unsigned strideLum = align<16>(width);
+    unsigned sizeY = strideLum * height;
+    unsigned strideColor = align<16>(strideLum/2);
+    unsigned sizeColor = strideColor * height/2;
+    unsigned offsetU = sizeY;
+    unsigned offsetV = sizeY + sizeColor;
+
+    uint8_t* srcY = src;
+    uint8_t* srcU = src+offsetU;
+    uint8_t* srcV = src+offsetV;
+
+    for (unsigned r = 0; r < height; r++) {
+        // Note that we're walking the same U and V rows twice for even/odd luminance rows
+        uint8_t* rowY = srcY + r*strideLum;
+        uint8_t* rowU = srcU + (r/2 * strideColor);
+        uint8_t* rowV = srcV + (r/2 * strideColor);
+
+        uint32_t* rowDest = dst + r*dstStridePixels;
+
+        for (unsigned c = 0; c < width; c++) {
+            rowDest[c] = yuvToRgbx(rowY[c], rowU[c], rowV[c]);
+        }
+    }
+}
+
+
+void copyYUYVtoRGB32(unsigned width, unsigned height,
+                     uint8_t* src, unsigned srcStridePixels,
+                     uint32_t* dst, unsigned dstStridePixels)
+{
+    uint32_t* srcWords = (uint32_t*)src;
+
+    const int srcRowPadding32 = srcStridePixels/2 - width/2;  // 2 bytes per pixel, 4 bytes per word
+    const int dstRowPadding32 = dstStridePixels   - width;    // 4 bytes per pixel, 4 bytes per word
+
+    for (unsigned r = 0; r < height; r++) {
+        for (unsigned c = 0; c < width/2; c++) {
+            // Note:  we're walking two pixels at a time here (even/odd)
+            uint32_t srcPixel = *srcWords++;
+
+            uint8_t Y1 = (srcPixel)       & 0xFF;
+            uint8_t U  = (srcPixel >> 8)  & 0xFF;
+            uint8_t Y2 = (srcPixel >> 16) & 0xFF;
+            uint8_t V  = (srcPixel >> 24) & 0xFF;
+
+            // On the RGB output, we're writing one pixel at a time
+            *(dst+0) = yuvToRgbx(Y1, U, V);
+            *(dst+1) = yuvToRgbx(Y2, U, V);
+            dst += 2;
+        }
+
+        // Skip over any extra data or end of row alignment padding
+        srcWords += srcRowPadding32;
+        dst += dstRowPadding32;
+    }
+}
+
+
+void copyMatchedInterleavedFormats(unsigned width, unsigned height,
+                                   void* src, unsigned srcStridePixels,
+                                   void* dst, unsigned dstStridePixels,
+                                   unsigned pixelSize) {
+    for (unsigned row = 0; row < height; row++) {
+        // Copy the entire row of pixel data
+        memcpy(dst, src, width * pixelSize);
+
+        // Advance to the next row (keeping in mind that stride here is in units of pixels)
+        src = (uint8_t*)src + srcStridePixels * pixelSize;
+        dst = (uint8_t*)dst + dstStridePixels * pixelSize;
+    }
+}
diff --git a/automotive/evs/1.0/vts/functional/FormatConvert.h b/automotive/evs/1.0/vts/functional/FormatConvert.h
new file mode 100644
index 0000000..3ff1eec
--- /dev/null
+++ b/automotive/evs/1.0/vts/functional/FormatConvert.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef EVS_VTS_FORMATCONVERT_H
+#define EVS_VTS_FORMATCONVERT_H
+
+#include <queue>
+#include <stdint.h>
+
+
+// Given an image buffer in NV21 format (HAL_PIXEL_FORMAT_YCRCB_420_SP), output 32bit RGBx values.
+// The NV21 format provides a Y array of 8bit values, followed by a 1/2 x 1/2 interleaved
+// U/V array.  It assumes an even width and height for the overall image, and a horizontal
+// stride that is an even multiple of 16 bytes for both the Y and UV arrays.
+void copyNV21toRGB32(unsigned width, unsigned height,
+                     uint8_t* src,
+                     uint32_t* dst, unsigned dstStridePixels);
+
+
+// Given an image buffer in YV12 format (HAL_PIXEL_FORMAT_YV12), output 32bit RGBx values.
+// The YV12 format provides a Y array of 8bit values, followed by a 1/2 x 1/2 U array, followed
+// by another 1/2 x 1/2 V array.  It assumes an even width and height for the overall image,
+// and a horizontal stride that is an even multiple of 16 bytes for each of the Y, U,
+// and V arrays.
+void copyYV12toRGB32(unsigned width, unsigned height,
+                     uint8_t* src,
+                     uint32_t* dst, unsigned dstStridePixels);
+
+
+// Given an image buffer in YUYV format (HAL_PIXEL_FORMAT_YCBCR_422_I), output 32bit RGBx values.
+// The NV21 format provides a Y array of 8bit values, followed by a 1/2 x 1/2 interleaved
+// U/V array.  It assumes an even width and height for the overall image, and a horizontal
+// stride that is an even multiple of 16 bytes for both the Y and UV arrays.
+void copyYUYVtoRGB32(unsigned width, unsigned height,
+                     uint8_t* src, unsigned srcStrideBytes,
+                     uint32_t* dst, unsigned dstStrideBytes);
+
+
+// Given an simple rectangular image buffer with an integer number of bytes per pixel,
+// copy the pixel values into a new rectangular buffer (potentially with a different stride).
+// This is typically used to copy RGBx data into an RGBx output buffer.
+void copyMatchedInterleavedFormats(unsigned width, unsigned height,
+                                   void* src, unsigned srcStridePixels,
+                                   void* dst, unsigned dstStridePixels,
+                                   unsigned pixelSize);
+
+#endif // EVS_VTS_FORMATCONVERT_H
diff --git a/automotive/evs/1.0/vts/functional/FrameHandler.cpp b/automotive/evs/1.0/vts/functional/FrameHandler.cpp
index 58c2f26..a69f72b 100644
--- a/automotive/evs/1.0/vts/functional/FrameHandler.cpp
+++ b/automotive/evs/1.0/vts/functional/FrameHandler.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "VtsHalEvsTest"
 
 #include "FrameHandler.h"
+#include "FormatConvert.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -25,14 +26,6 @@
 #include <cutils/native_handle.h>
 #include <ui/GraphicBuffer.h>
 
-#include <algorithm>    // std::min
-
-
-// For the moment, we're assuming that the underlying EVS driver we're working with
-// is providing 4 byte RGBx data.  This is fine for loopback testing, although
-// real hardware is expected to provide YUV data -- most likly formatted as YV12
-static const unsigned kBytesPerPixel = 4;   // assuming 4 byte RGBx pixels
-
 
 FrameHandler::FrameHandler(android::sp <IEvsCamera> pCamera, CameraDesc cameraInfo,
                            android::sp <IEvsDisplay> pDisplay,
@@ -58,14 +51,18 @@
 
 
 bool FrameHandler::startStream() {
+    // Tell the camera to start streaming
+    Return<EvsResult> result = mCamera->startVideoStream(this);
+    if (result != EvsResult::OK) {
+        return false;
+    }
+
     // Mark ourselves as running
     mLock.lock();
     mRunning = true;
     mLock.unlock();
 
-    // Tell the camera to start streaming
-    Return<EvsResult> result = mCamera->startVideoStream(this);
-    return (result == EvsResult::OK);
+    return true;
 }
 
 
@@ -82,7 +79,9 @@
 
     // Wait until the stream has actually stopped
     std::unique_lock<std::mutex> lock(mLock);
-    mSignal.wait(lock, [this](){ return !mRunning; });
+    if (mRunning) {
+        mSignal.wait(lock, [this]() { return !mRunning; });
+    }
 }
 
 
@@ -179,13 +178,13 @@
 
         switch (mReturnMode) {
         case eAutoReturn:
-            // Send the camera buffer back now that we're done with it
+            // Send the camera buffer back now that the client has seen it
             ALOGD("Calling doneWithFrame");
             // TODO:  Why is it that we get a HIDL crash if we pass back the cloned buffer?
             mCamera->doneWithFrame(bufferArg);
             break;
         case eNoAutoReturn:
-            // Hang onto the buffer handle for now -- we'll return it explicitly later
+            // Hang onto the buffer handle for now -- the client will return it explicitly later
             mHeldBuffers.push(bufferArg);
         }
 
@@ -228,25 +227,41 @@
         srcBuffer.width, srcBuffer.height, srcBuffer.format, 1, srcBuffer.usage,
         srcBuffer.stride);
 
-    // Lock our source buffer for reading
-    unsigned char* srcPixels = nullptr;
+    // Lock our source buffer for reading (current expectation are for this to be NV21 format)
+    uint8_t* srcPixels = nullptr;
     src->lock(GRALLOC_USAGE_SW_READ_OFTEN, (void**)&srcPixels);
 
-    // Lock our target buffer for writing
-    unsigned char* tgtPixels = nullptr;
+    // Lock our target buffer for writing (should be RGBA8888 format)
+    uint32_t* tgtPixels = nullptr;
     tgt->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, (void**)&tgtPixels);
 
     if (srcPixels && tgtPixels) {
-        for (unsigned row = 0; row < height; row++) {
-            // Copy the entire row of pixel data
-            memcpy(tgtPixels, srcPixels, width * kBytesPerPixel);
-
-            // Advance to the next row (keeping in mind that stride here is in units of pixels)
-            tgtPixels += tgtBuffer.stride * kBytesPerPixel;
-            srcPixels += srcBuffer.stride * kBytesPerPixel;
+        if (tgtBuffer.format != HAL_PIXEL_FORMAT_RGBA_8888) {
+            // We always expect 32 bit RGB for the display output for now.  Is there a need for 565?
+            ALOGE("Diplay buffer is always expected to be 32bit RGBA");
+            success = false;
+        } else {
+            if (srcBuffer.format == HAL_PIXEL_FORMAT_YCRCB_420_SP) {   // 420SP == NV21
+                copyNV21toRGB32(width, height,
+                                srcPixels,
+                                tgtPixels, tgtBuffer.stride);
+            } else if (srcBuffer.format == HAL_PIXEL_FORMAT_YV12) { // YUV_420P == YV12
+                copyYV12toRGB32(width, height,
+                                srcPixels,
+                                tgtPixels, tgtBuffer.stride);
+            } else if (srcBuffer.format == HAL_PIXEL_FORMAT_YCBCR_422_I) { // YUYV
+                copyYUYVtoRGB32(width, height,
+                                srcPixels, srcBuffer.stride,
+                                tgtPixels, tgtBuffer.stride);
+            } else if (srcBuffer.format == tgtBuffer.format) {  // 32bit RGBA
+                copyMatchedInterleavedFormats(width, height,
+                                              srcPixels, srcBuffer.stride,
+                                              tgtPixels, tgtBuffer.stride,
+                                              tgtBuffer.pixelSize);
+            }
         }
     } else {
-        ALOGE("Failed to copy buffer contents");
+        ALOGE("Failed to lock buffer contents for contents transfer");
         success = false;
     }
 
diff --git a/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp b/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp
index 50b6581..2e80afe 100644
--- a/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp
+++ b/automotive/evs/1.0/vts/functional/VtsEvsV1_0TargetTest.cpp
@@ -107,6 +107,8 @@
  * call to closeCamera.  Then repeats the test to ensure all cameras can be reopened.
  */
 TEST_F(EvsHidlTest, CameraOpenClean) {
+    ALOGI("Starting CameraOpenClean test");
+
     // Get the camera list
     loadCameraList();
 
@@ -137,6 +139,8 @@
  * the system to be tolerant of shutdown/restart race conditions.
  */
 TEST_F(EvsHidlTest, CameraOpenAggressive) {
+    ALOGI("Starting CameraOpenAggressive test");
+
     // Get the camera list
     loadCameraList();
 
@@ -183,6 +187,8 @@
  * Test both clean shut down and "aggressive open" device stealing behavior.
  */
 TEST_F(EvsHidlTest, DisplayOpen) {
+    ALOGI("Starting DisplayOpen test");
+
     // Request exclusive access to the EVS display, then let it go
     {
         sp<IEvsDisplay> pDisplay = pEnumerator->openDisplay();
@@ -229,6 +235,8 @@
  * object itself or the owning enumerator.
  */
 TEST_F(EvsHidlTest, DisplayStates) {
+    ALOGI("Starting DisplayStates test");
+
     // Ensure the display starts in the expected state
     EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_OPEN);
 
@@ -270,15 +278,14 @@
     }
 
     // TODO:  This hack shouldn't be necessary.  b/36122635
-// NOTE:  Calling flushCommand here did not avoid the race.  Going back to sleep...  :(
-//    android::hardware::IPCThreadState::self()->flushCommands();
     sleep(1);
 
     // Now that the display pointer has gone out of scope, causing the IEvsDisplay interface
     // object to be destroyed, we should be back to the "not open" state.
     // NOTE:  If we want this to pass without the sleep above, we'd have to add the
     //        (now recommended) closeDisplay() call instead of relying on the smarter pointer
-    //        going out of scope.
+    //        going out of scope.  I've not done that because I want to verify that the deletion
+    //        of the object does actually clean up (eventually).
     EXPECT_EQ((DisplayState)pEnumerator->getDisplayState(), DisplayState::NOT_OPEN);
 }
 
@@ -288,6 +295,8 @@
  * Measure and qualify the stream start up time and streaming frame rate of each reported camera
  */
 TEST_F(EvsHidlTest, CameraStreamPerformance) {
+    ALOGI("Starting CameraStreamPerformance test");
+
     // Get the camera list
     loadCameraList();
 
@@ -304,7 +313,7 @@
         // Start the camera's video stream
         nsecs_t start = systemTime(SYSTEM_TIME_MONOTONIC);
         bool startResult = frameHandler->startStream();
-        EXPECT_EQ(startResult, true);
+        ASSERT_TRUE(startResult);
 
         // Ensure the first frame arrived within the expected time
         frameHandler->waitForFrameCount(1);
@@ -344,6 +353,8 @@
  * than one frame time.  The camera must cleanly skip frames until the client is ready again.
  */
 TEST_F(EvsHidlTest, CameraStreamBuffering) {
+    ALOGI("Starting CameraStreamBuffering test");
+
     // Arbitrary constant (should be > 1 and less than crazy)
     static const unsigned int kBuffersToHold = 6;
 
@@ -372,14 +383,14 @@
 
         // Start the camera's video stream
         bool startResult = frameHandler->startStream();
-        EXPECT_TRUE(startResult);
+        ASSERT_TRUE(startResult);
 
         // Check that the video stream stalls once we've gotten exactly the number of buffers
         // we requested since we told the frameHandler not to return them.
-        sleep(1);   // 1 second would be enough for at least 5 frames to be delivered worst case
+        sleep(2);   // 1 second should be enough for at least 5 frames to be delivered worst case
         unsigned framesReceived = 0;
         frameHandler->getFramesCounters(&framesReceived, nullptr);
-        EXPECT_EQ(kBuffersToHold, framesReceived);
+        ASSERT_EQ(kBuffersToHold, framesReceived) << "Stream didn't stall at expected buffer limit";
 
 
         // Give back one buffer
@@ -390,7 +401,7 @@
         // filled since we require 10fps minimum -- but give a 10% allowance just in case.
         usleep(110 * kMillisecondsToMicroseconds);
         frameHandler->getFramesCounters(&framesReceived, nullptr);
-        EXPECT_EQ(kBuffersToHold+1, framesReceived);
+        EXPECT_EQ(kBuffersToHold+1, framesReceived) << "Stream should've resumed";
 
         // Even when the camera pointer goes out of scope, the FrameHandler object will
         // keep the stream alive unless we tell it to shutdown.
@@ -411,6 +422,8 @@
  * which a human could observe to see the operation of the system on the physical display.
  */
 TEST_F(EvsHidlTest, CameraToDisplayRoundTrip) {
+    ALOGI("Starting CameraToDisplayRoundTrip test");
+
     // Get the camera list
     loadCameraList();
 
@@ -434,7 +447,7 @@
 
         // Start the camera's video stream
         bool startResult = frameHandler->startStream();
-        EXPECT_EQ(startResult, true);
+        ASSERT_TRUE(startResult);
 
         // Wait a while to let the data flow
         static const int kSecondsToWait = 5;
diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml
new file mode 100644
index 0000000..cd3904e
--- /dev/null
+++ b/compatibility_matrix.xml
@@ -0,0 +1,34 @@
+<compatibility-matrix version="1.0" type="framework">
+    <hal format="hidl" optional="true">
+        <name>android.hardware.bluetooth</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.boot</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.configstore</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.ir</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.nfc</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.radio</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.renderscript</name>
+        <version>1.0</version>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.wifi</name>
+        <version>1.0</version>
+    </hal>
+</compatibility-matrix>
diff --git a/current.txt b/current.txt
index 1f6d592..089f128 100644
--- a/current.txt
+++ b/current.txt
@@ -98,7 +98,7 @@
 17971eb8a482893dadcfc16e0583f492d42a034ef95d9b0b709417af30838396 android.hardware.graphics.allocator@2.0::IAllocator
 60bf42a4898e4fb70dbd720b263aeafd7f35f5e1a5effeabb4d5d659878a5f18 android.hardware.graphics.bufferqueue@1.0::IGraphicBufferProducer
 b8a75617b9ec12bea641f3a73d4025a33e8b9a2f9169dd46094af56adf9249c5 android.hardware.graphics.bufferqueue@1.0::IProducerListener
-862cd4c41884b6c06d843b88061a021ed117e751b60b8efe8916eb64a0b3c062 android.hardware.graphics.common@1.0::types
+4f6dedbcdd21c309dfc650acea81a096d6b242493ffe49c8d61bd3c43aad354e android.hardware.graphics.common@1.0::types
 b3aac6c3817f039964fcd62268274b3039e17bd7d0d5b40b4d1d1c7b19a1f866 android.hardware.graphics.composer@2.1::IComposer
 b19d00eb8a8b3b0034a0321f22e8f32162bf4c2aebbce6da22c025f56e459ea2 android.hardware.graphics.composer@2.1::IComposerCallback
 e992684e690dfe67a8cbeab5005bfa3fa9c2bf3d4b0b75657fb1f0c2d5dd2bae android.hardware.graphics.composer@2.1::IComposerClient
diff --git a/gnss/1.0/default/Gnss.cpp b/gnss/1.0/default/Gnss.cpp
index afb659c..cfcee24 100644
--- a/gnss/1.0/default/Gnss.cpp
+++ b/gnss/1.0/default/Gnss.cpp
@@ -129,16 +129,19 @@
         auto svInfo = status->gnss_sv_list[i];
         IGnssCallback::GnssSvInfo gnssSvInfo = {
             .svid = svInfo.svid,
-            .constellation = static_cast<android::hardware::gnss::V1_0::GnssConstellationType>(
-                    svInfo.constellation),
+            .constellation = static_cast<
+                android::hardware::gnss::V1_0::GnssConstellationType>(
+                svInfo.constellation),
             .cN0Dbhz = svInfo.c_n0_dbhz,
             .elevationDegrees = svInfo.elevation,
             .azimuthDegrees = svInfo.azimuth,
-            .svFlag = svInfo.flags,
-            // Older chipsets do not provide carrier frequency, hence HAS_CARRIER_FREQUENCY flag
-            // is not set and the carrierFrequencyHz field is set to zero
-            .carrierFrequencyHz = 0
-        };
+            // Older chipsets do not provide carrier frequency, hence
+            // HAS_CARRIER_FREQUENCY flag and the carrierFrequencyHz fields
+            // are not set. So we are resetting both fields here.
+            .svFlag = static_cast<uint8_t>(
+                svInfo.flags &= ~(static_cast<uint8_t>(
+                    IGnssCallback::GnssSvFlags::HAS_CARRIER_FREQUENCY))),
+            .carrierFrequencyHz = 0};
         svStatus.gnssSvList[i] = gnssSvInfo;
     }
 
diff --git a/graphics/allocator/2.0/default/Android.bp b/graphics/allocator/2.0/default/Android.bp
index 4a7cfe0..9968f41 100644
--- a/graphics/allocator/2.0/default/Android.bp
+++ b/graphics/allocator/2.0/default/Android.bp
@@ -42,7 +42,7 @@
     defaults: ["hidl_defaults"],
     srcs: ["gralloc1-adapter.cpp", "Gralloc1On0Adapter.cpp"],
     include_dirs: ["system/core/libsync/include"],
-    cflags: ["-Wall", "-Wextra", "-Wno-unused-parameter"],
+    cflags: ["-Wall", "-Wextra"],
     export_include_dirs: ["."],
     whole_static_libs: ["libgrallocusage"],
 }
diff --git a/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp b/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp
index be055ec..041ce77 100644
--- a/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp
+++ b/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp
@@ -77,8 +77,7 @@
 }
 
 void Gralloc1On0Adapter::doGetCapabilities(uint32_t* outCount,
-        int32_t* outCapabilities)
-{
+                                           int32_t* /*outCapabilities*/) {
     *outCount = 0;
 }
 
diff --git a/graphics/common/1.0/types.hal b/graphics/common/1.0/types.hal
index 76b3bec..3369fad 100644
--- a/graphics/common/1.0/types.hal
+++ b/graphics/common/1.0/types.hal
@@ -505,26 +505,29 @@
 
 /**
  * Transformation definitions
- *
- * IMPORTANT NOTE:
- * ROT_90 is applied CLOCKWISE and AFTER FLIP_{H|V}.
- *
  */
 @export(name="android_transform_t", value_prefix="HAL_TRANSFORM_")
 enum Transform : int32_t {
-    /** flip source image horizontally (around the vertical axis) */
-    FLIP_H    = 0x01,
     /**
-     * flip source image vertically (around the horizontal axis)*/
-    FLIP_V    = 0x02,
-    /** rotate source image 90 degrees clockwise */
-    ROT_90    = 0x04,
-    /** rotate source image 180 degrees */
-    ROT_180   = 0x03,
-    /** rotate source image 270 degrees clockwise */
-    ROT_270   = 0x07,
+     * Horizontal flip. FLIP_H/FLIP_V is applied before ROT_90.
+     */
+    FLIP_H    = 1 << 0,
 
-    /** 0x08 is reserved */
+    /**
+     * Vertical flip. FLIP_H/FLIP_V is applied before ROT_90.
+     */
+    FLIP_V    = 1 << 1,
+
+    /**
+     * 90 degree clockwise rotation. FLIP_H/FLIP_V is applied before ROT_90.
+     */
+    ROT_90    = 1 << 2,
+
+    /**
+     * Commonly used combinations.
+     */
+    ROT_180   = FLIP_H | FLIP_V,
+    ROT_270   = FLIP_H | FLIP_V | ROT_90,
 };
 
 /**
@@ -1222,209 +1225,209 @@
  */
 @export(name="android_color_mode_t", value_prefix="HAL_COLOR_MODE_")
 enum ColorMode : int32_t {
-  /**
-   * DEFAULT is the "native" gamut of the display.
-   * White Point: Vendor/OEM defined
-   * Panel Gamma: Vendor/OEM defined (typically 2.2)
-   * Rendering Intent: Vendor/OEM defined (typically 'enhanced')
-   */
-  NATIVE = 0,
+    /**
+     * DEFAULT is the "native" gamut of the display.
+     * White Point: Vendor/OEM defined
+     * Panel Gamma: Vendor/OEM defined (typically 2.2)
+     * Rendering Intent: Vendor/OEM defined (typically 'enhanced')
+     */
+    NATIVE = 0,
 
-  /**
-   * STANDARD_BT601_625 corresponds with display
-   * settings that implement the ITU-R Recommendation BT.601
-   * or Rec 601. Using 625 line version
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.290   0.600
-   *  blue            0.150   0.060
-   *  red             0.640   0.330
-   *  white (D65)     0.3127  0.3290
-   *
-   *  KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
-   *  for RGB conversion from the one purely determined by the primaries
-   *  to minimize the color shift into RGB space that uses BT.709
-   *  primaries.
-   *
-   * Gamma Correction (GC):
-   *
-   *  if Vlinear < 0.018
-   *    Vnonlinear = 4.500 * Vlinear
-   *  else
-   *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
-   */
-  STANDARD_BT601_625 = 1,
+    /**
+     * STANDARD_BT601_625 corresponds with display
+     * settings that implement the ITU-R Recommendation BT.601
+     * or Rec 601. Using 625 line version
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.290   0.600
+     *  blue            0.150   0.060
+     *  red             0.640   0.330
+     *  white (D65)     0.3127  0.3290
+     *
+     *  KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
+     *  for RGB conversion from the one purely determined by the primaries
+     *  to minimize the color shift into RGB space that uses BT.709
+     *  primaries.
+     *
+     * Gamma Correction (GC):
+     *
+     *  if Vlinear < 0.018
+     *    Vnonlinear = 4.500 * Vlinear
+     *  else
+     *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
+     */
+    STANDARD_BT601_625 = 1,
 
-  /**
-   * Primaries:
-   *                  x       y
-   *  green           0.290   0.600
-   *  blue            0.150   0.060
-   *  red             0.640   0.330
-   *  white (D65)     0.3127  0.3290
-   *
-   *  Use the unadjusted KR = 0.222, KB = 0.071 luminance interpretation
-   *  for RGB conversion.
-   *
-   * Gamma Correction (GC):
-   *
-   *  if Vlinear < 0.018
-   *    Vnonlinear = 4.500 * Vlinear
-   *  else
-   *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
-   */
-  STANDARD_BT601_625_UNADJUSTED = 2,
+    /**
+     * Primaries:
+     *                  x       y
+     *  green           0.290   0.600
+     *  blue            0.150   0.060
+     *  red             0.640   0.330
+     *  white (D65)     0.3127  0.3290
+     *
+     *  Use the unadjusted KR = 0.222, KB = 0.071 luminance interpretation
+     *  for RGB conversion.
+     *
+     * Gamma Correction (GC):
+     *
+     *  if Vlinear < 0.018
+     *    Vnonlinear = 4.500 * Vlinear
+     *  else
+     *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
+     */
+    STANDARD_BT601_625_UNADJUSTED = 2,
 
-  /**
-   * Primaries:
-   *                  x       y
-   *  green           0.310   0.595
-   *  blue            0.155   0.070
-   *  red             0.630   0.340
-   *  white (D65)     0.3127  0.3290
-   *
-   *  KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
-   *  for RGB conversion from the one purely determined by the primaries
-   *  to minimize the color shift into RGB space that uses BT.709
-   *  primaries.
-   *
-   * Gamma Correction (GC):
-   *
-   *  if Vlinear < 0.018
-   *    Vnonlinear = 4.500 * Vlinear
-   *  else
-   *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
-   */
-  STANDARD_BT601_525 = 3,
+    /**
+     * Primaries:
+     *                  x       y
+     *  green           0.310   0.595
+     *  blue            0.155   0.070
+     *  red             0.630   0.340
+     *  white (D65)     0.3127  0.3290
+     *
+     *  KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
+     *  for RGB conversion from the one purely determined by the primaries
+     *  to minimize the color shift into RGB space that uses BT.709
+     *  primaries.
+     *
+     * Gamma Correction (GC):
+     *
+     *  if Vlinear < 0.018
+     *    Vnonlinear = 4.500 * Vlinear
+     *  else
+     *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
+     */
+    STANDARD_BT601_525 = 3,
 
-  /**
-   * Primaries:
-   *                  x       y
-   *  green           0.310   0.595
-   *  blue            0.155   0.070
-   *  red             0.630   0.340
-   *  white (D65)     0.3127  0.3290
-   *
-   *  Use the unadjusted KR = 0.212, KB = 0.087 luminance interpretation
-   *  for RGB conversion (as in SMPTE 240M).
-   *
-   * Gamma Correction (GC):
-   *
-   *  if Vlinear < 0.018
-   *    Vnonlinear = 4.500 * Vlinear
-   *  else
-   *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
-   */
-  STANDARD_BT601_525_UNADJUSTED = 4,
+    /**
+     * Primaries:
+     *                  x       y
+     *  green           0.310   0.595
+     *  blue            0.155   0.070
+     *  red             0.630   0.340
+     *  white (D65)     0.3127  0.3290
+     *
+     *  Use the unadjusted KR = 0.212, KB = 0.087 luminance interpretation
+     *  for RGB conversion (as in SMPTE 240M).
+     *
+     * Gamma Correction (GC):
+     *
+     *  if Vlinear < 0.018
+     *    Vnonlinear = 4.500 * Vlinear
+     *  else
+     *    Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
+     */
+    STANDARD_BT601_525_UNADJUSTED = 4,
 
-  /**
-   * REC709 corresponds with display settings that implement
-   * the ITU-R Recommendation BT.709 / Rec. 709 for high-definition television.
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.300   0.600
-   *  blue            0.150   0.060
-   *  red             0.640   0.330
-   *  white (D65)     0.3127  0.3290
-   *
-   * HDTV REC709 Inverse Gamma Correction (IGC): V represents normalized
-   * (with [0 to 1] range) value of R, G, or B.
-   *
-   *  if Vnonlinear < 0.081
-   *    Vlinear = Vnonlinear / 4.5
-   *  else
-   *    Vlinear = ((Vnonlinear + 0.099) / 1.099) ^ (1/0.45)
-   *
-   * HDTV REC709 Gamma Correction (GC):
-   *
-   *  if Vlinear < 0.018
-   *    Vnonlinear = 4.5 * Vlinear
-   *  else
-   *    Vnonlinear = 1.099 * (Vlinear) ^ 0.45 – 0.099
-   */
-  STANDARD_BT709 = 5,
+    /**
+     * REC709 corresponds with display settings that implement
+     * the ITU-R Recommendation BT.709 / Rec. 709 for high-definition television.
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.300   0.600
+     *  blue            0.150   0.060
+     *  red             0.640   0.330
+     *  white (D65)     0.3127  0.3290
+     *
+     * HDTV REC709 Inverse Gamma Correction (IGC): V represents normalized
+     * (with [0 to 1] range) value of R, G, or B.
+     *
+     *  if Vnonlinear < 0.081
+     *    Vlinear = Vnonlinear / 4.5
+     *  else
+     *    Vlinear = ((Vnonlinear + 0.099) / 1.099) ^ (1/0.45)
+     *
+     * HDTV REC709 Gamma Correction (GC):
+     *
+     *  if Vlinear < 0.018
+     *    Vnonlinear = 4.5 * Vlinear
+     *  else
+     *    Vnonlinear = 1.099 * (Vlinear) ^ 0.45 – 0.099
+     */
+    STANDARD_BT709 = 5,
 
-  /**
-   * DCI_P3 corresponds with display settings that implement
-   * SMPTE EG 432-1 and SMPTE RP 431-2
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.265   0.690
-   *  blue            0.150   0.060
-   *  red             0.680   0.320
-   *  white (D65)     0.3127  0.3290
-   *
-   * Gamma: 2.6
-   */
-  DCI_P3 = 6,
+    /**
+     * DCI_P3 corresponds with display settings that implement
+     * SMPTE EG 432-1 and SMPTE RP 431-2
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.265   0.690
+     *  blue            0.150   0.060
+     *  red             0.680   0.320
+     *  white (D65)     0.3127  0.3290
+     *
+     * Gamma: 2.6
+     */
+    DCI_P3 = 6,
 
-  /**
-   * SRGB corresponds with display settings that implement
-   * the sRGB color space. Uses the same primaries as ITU-R Recommendation
-   * BT.709
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.300   0.600
-   *  blue            0.150   0.060
-   *  red             0.640   0.330
-   *  white (D65)     0.3127  0.3290
-   *
-   * PC/Internet (sRGB) Inverse Gamma Correction (IGC):
-   *
-   *  if Vnonlinear ≤ 0.03928
-   *    Vlinear = Vnonlinear / 12.92
-   *  else
-   *    Vlinear = ((Vnonlinear + 0.055)/1.055) ^ 2.4
-   *
-   * PC/Internet (sRGB) Gamma Correction (GC):
-   *
-   *  if Vlinear ≤ 0.0031308
-   *    Vnonlinear = 12.92 * Vlinear
-   *  else
-   *    Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
-   */
-  SRGB = 7,
+    /**
+     * SRGB corresponds with display settings that implement
+     * the sRGB color space. Uses the same primaries as ITU-R Recommendation
+     * BT.709
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.300   0.600
+     *  blue            0.150   0.060
+     *  red             0.640   0.330
+     *  white (D65)     0.3127  0.3290
+     *
+     * PC/Internet (sRGB) Inverse Gamma Correction (IGC):
+     *
+     *  if Vnonlinear ≤ 0.03928
+     *    Vlinear = Vnonlinear / 12.92
+     *  else
+     *    Vlinear = ((Vnonlinear + 0.055)/1.055) ^ 2.4
+     *
+     * PC/Internet (sRGB) Gamma Correction (GC):
+     *
+     *  if Vlinear ≤ 0.0031308
+     *    Vnonlinear = 12.92 * Vlinear
+     *  else
+     *    Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
+     */
+    SRGB = 7,
 
-  /**
-   * ADOBE_RGB corresponds with the RGB color space developed
-   * by Adobe Systems, Inc. in 1998.
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.210   0.710
-   *  blue            0.150   0.060
-   *  red             0.640   0.330
-   *  white (D65)     0.3127  0.3290
-   *
-   * Gamma: 2.2
-   */
-  ADOBE_RGB = 8,
+    /**
+     * ADOBE_RGB corresponds with the RGB color space developed
+     * by Adobe Systems, Inc. in 1998.
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.210   0.710
+     *  blue            0.150   0.060
+     *  red             0.640   0.330
+     *  white (D65)     0.3127  0.3290
+     *
+     * Gamma: 2.2
+     */
+    ADOBE_RGB = 8,
 
-  /**
-   * DISPLAY_P3 is a color space that uses the DCI_P3 primaries,
-   * the D65 white point and the SRGB transfer functions.
-   * Rendering Intent: Colorimetric
-   * Primaries:
-   *                  x       y
-   *  green           0.265   0.690
-   *  blue            0.150   0.060
-   *  red             0.680   0.320
-   *  white (D65)     0.3127  0.3290
-   *
-   * PC/Internet (sRGB) Gamma Correction (GC):
-   *
-   *  if Vlinear ≤ 0.0030186
-   *    Vnonlinear = 12.92 * Vlinear
-   *  else
-   *    Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
-   *
-   * Note: In most cases sRGB transfer function will be fine.
-   */
-  DISPLAY_P3 = 9
+    /**
+     * DISPLAY_P3 is a color space that uses the DCI_P3 primaries,
+     * the D65 white point and the SRGB transfer functions.
+     * Rendering Intent: Colorimetric
+     * Primaries:
+     *                  x       y
+     *  green           0.265   0.690
+     *  blue            0.150   0.060
+     *  red             0.680   0.320
+     *  white (D65)     0.3127  0.3290
+     *
+     * PC/Internet (sRGB) Gamma Correction (GC):
+     *
+     *  if Vlinear ≤ 0.0030186
+     *    Vnonlinear = 12.92 * Vlinear
+     *  else
+     *    Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
+     *
+     * Note: In most cases sRGB transfer function will be fine.
+     */
+    DISPLAY_P3 = 9
 };
 
 /**
diff --git a/graphics/composer/2.1/default/ComposerClient.cpp b/graphics/composer/2.1/default/ComposerClient.cpp
index 87e4d3b..ce4e17f 100644
--- a/graphics/composer/2.1/default/ComposerClient.cpp
+++ b/graphics/composer/2.1/default/ComposerClient.cpp
@@ -655,18 +655,24 @@
     auto fence = readFence();
     auto dataspace = readSigned();
     auto damage = readRegion((length - 4) / 4);
+    bool closeFence = true;
 
     auto err = lookupBuffer(BufferCache::CLIENT_TARGETS,
             slot, useCache, clientTarget, &clientTarget);
     if (err == Error::NONE) {
         err = mHal.setClientTarget(mDisplay, clientTarget, fence,
                 dataspace, damage);
-
-        updateBuffer(BufferCache::CLIENT_TARGETS, slot, useCache,
-                clientTarget);
+        auto updateBufErr = updateBuffer(BufferCache::CLIENT_TARGETS, slot,
+                useCache, clientTarget);
+        if (err == Error::NONE) {
+            closeFence = false;
+            err = updateBufErr;
+        }
+    }
+    if (closeFence) {
+        close(fence);
     }
     if (err != Error::NONE) {
-        close(fence);
         mWriter.setError(getCommandLoc(), err);
     }
 
@@ -683,17 +689,23 @@
     auto slot = read();
     auto outputBuffer = readHandle(&useCache);
     auto fence = readFence();
+    bool closeFence = true;
 
     auto err = lookupBuffer(BufferCache::OUTPUT_BUFFERS,
             slot, useCache, outputBuffer, &outputBuffer);
     if (err == Error::NONE) {
         err = mHal.setOutputBuffer(mDisplay, outputBuffer, fence);
-
-        updateBuffer(BufferCache::OUTPUT_BUFFERS,
-            slot, useCache, outputBuffer);
+        auto updateBufErr = updateBuffer(BufferCache::OUTPUT_BUFFERS,
+                slot, useCache, outputBuffer);
+        if (err == Error::NONE) {
+            closeFence = false;
+            err = updateBufErr;
+        }
+    }
+    if (closeFence) {
+        close(fence);
     }
     if (err != Error::NONE) {
-        close(fence);
         mWriter.setError(getCommandLoc(), err);
     }
 
@@ -786,17 +798,23 @@
     auto slot = read();
     auto buffer = readHandle(&useCache);
     auto fence = readFence();
+    bool closeFence = true;
 
     auto err = lookupBuffer(BufferCache::LAYER_BUFFERS,
             slot, useCache, buffer, &buffer);
     if (err == Error::NONE) {
         err = mHal.setLayerBuffer(mDisplay, mLayer, buffer, fence);
-
-        updateBuffer(BufferCache::LAYER_BUFFERS,
-            slot, useCache, buffer);
+        auto updateBufErr = updateBuffer(BufferCache::LAYER_BUFFERS, slot,
+                useCache, buffer);
+        if (err == Error::NONE) {
+            closeFence = false;
+            err = updateBufErr;
+        }
+    }
+    if (closeFence) {
+        close(fence);
     }
     if (err != Error::NONE) {
-        close(fence);
         mWriter.setError(getCommandLoc(), err);
     }
 
@@ -915,8 +933,10 @@
     auto err = lookupLayerSidebandStream(stream, &stream);
     if (err == Error::NONE) {
         err = mHal.setLayerSidebandStream(mDisplay, mLayer, stream);
-
-        updateLayerSidebandStream(stream);
+        auto updateErr = updateLayerSidebandStream(stream);
+        if (err == Error::NONE) {
+            err = updateErr;
+        }
     }
     if (err != Error::NONE) {
         mWriter.setError(getCommandLoc(), err);
@@ -1097,21 +1117,24 @@
     return Error::NONE;
 }
 
-void ComposerClient::CommandReader::updateBuffer(BufferCache cache,
+Error ComposerClient::CommandReader::updateBuffer(BufferCache cache,
         uint32_t slot, bool useCache, buffer_handle_t handle)
 {
     // handle was looked up from cache
     if (useCache) {
-        return;
+        return Error::NONE;
     }
 
     std::lock_guard<std::mutex> lock(mClient.mDisplayDataMutex);
 
     BufferCacheEntry* entry = nullptr;
-    lookupBufferCacheEntryLocked(cache, slot, &entry);
-    LOG_FATAL_IF(!entry, "failed to find the cache entry to update");
+    Error error = lookupBufferCacheEntryLocked(cache, slot, &entry);
+    if (error != Error::NONE) {
+      return error;
+    }
 
     *entry = handle;
+    return Error::NONE;
 }
 
 } // namespace implementation
diff --git a/graphics/composer/2.1/default/ComposerClient.h b/graphics/composer/2.1/default/ComposerClient.h
index c973351..3d10f80 100644
--- a/graphics/composer/2.1/default/ComposerClient.h
+++ b/graphics/composer/2.1/default/ComposerClient.h
@@ -173,7 +173,7 @@
         Error lookupBuffer(BufferCache cache, uint32_t slot,
                 bool useCache, buffer_handle_t handle,
                 buffer_handle_t* outHandle);
-        void updateBuffer(BufferCache cache, uint32_t slot,
+        Error updateBuffer(BufferCache cache, uint32_t slot,
                 bool useCache, buffer_handle_t handle);
 
         Error lookupLayerSidebandStream(buffer_handle_t handle,
@@ -182,9 +182,9 @@
             return lookupBuffer(BufferCache::LAYER_SIDEBAND_STREAMS,
                     0, false, handle, outHandle);
         }
-        void updateLayerSidebandStream(buffer_handle_t handle)
+        Error updateLayerSidebandStream(buffer_handle_t handle)
         {
-            updateBuffer(BufferCache::LAYER_SIDEBAND_STREAMS,
+            return updateBuffer(BufferCache::LAYER_SIDEBAND_STREAMS,
                     0, false, handle);
         }
 
diff --git a/health/1.0/vts/functional/Android.bp b/health/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..1a4c8c8
--- /dev/null
+++ b/health/1.0/vts/functional/Android.bp
@@ -0,0 +1,32 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_test {
+    name: "VtsHalHealthV1_0TargetTest",
+    defaults: ["hidl_defaults"],
+    srcs: ["VtsHalHealthV1_0TargetTest.cpp"],
+    shared_libs: [
+        "libhidlbase",
+        "liblog",
+        "libutils",
+        "android.hardware.health@1.0",
+    ],
+    static_libs: ["VtsHalHidlTargetTestBase"],
+    cflags: [
+        "-O0",
+        "-g",
+    ]
+}
diff --git a/health/1.0/vts/functional/VtsHalHealthV1_0TargetTest.cpp b/health/1.0/vts/functional/VtsHalHealthV1_0TargetTest.cpp
new file mode 100644
index 0000000..324eb9f
--- /dev/null
+++ b/health/1.0/vts/functional/VtsHalHealthV1_0TargetTest.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "health_hidl_hal_test"
+
+#include <android/hardware/health/1.0/IHealth.h>
+#include <android/hardware/health/1.0/types.h>
+#include <log/log.h>
+#include <VtsHalHidlTargetTestBase.h>
+
+using HealthConfig = ::android::hardware::health::V1_0::HealthConfig;
+using HealthInfo = ::android::hardware::health::V1_0::HealthInfo;
+using IHealth = ::android::hardware::health::V1_0::IHealth;
+using Result = ::android::hardware::health::V1_0::Result;
+
+using ::android::sp;
+
+class HealthHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+   public:
+    virtual void SetUp() override {
+        health = ::testing::VtsHalHidlTargetTestBase::getService<IHealth>();
+        ASSERT_NE(health, nullptr);
+        health->init(config,
+                     [&](const auto& halConfigOut) { config = halConfigOut; });
+    }
+
+    sp<IHealth> health;
+    HealthConfig config;
+};
+
+/**
+ * Ensure EnergyCounter call returns positive energy counter or NOT_SUPPORTED
+ */
+TEST_F(HealthHidlTest, TestEnergyCounter) {
+    Result result;
+    int64_t energy = 0;
+    health->energyCounter([&](Result ret, int64_t energyOut) {
+        result = ret;
+        energy = energyOut;
+    });
+
+    ASSERT_TRUE(result == Result::SUCCESS || result == Result::NOT_SUPPORTED);
+    ASSERT_TRUE(result != Result::SUCCESS || energy > 0);
+}
+
+int main(int argc, char **argv) {
+    ::testing::InitGoogleTest(&argc, argv);
+    int status = RUN_ALL_TESTS();
+    ALOGI("Test result = %d", status);
+    return status;
+}
diff --git a/health/Android.bp b/health/Android.bp
index bbb3e4b..33f70eb 100644
--- a/health/Android.bp
+++ b/health/Android.bp
@@ -1,4 +1,5 @@
 // This is an autogenerated file, do not edit.
 subdirs = [
     "1.0",
+    "1.0/vts/functional",
 ]
diff --git a/media/omx/1.0/vts/functional/README.md b/media/omx/1.0/vts/functional/README.md
index 0593c1e..fa88811 100644
--- a/media/omx/1.0/vts/functional/README.md
+++ b/media/omx/1.0/vts/functional/README.md
@@ -1,49 +1,33 @@
-## Codec OMX Tests
+## Omx Hal @ 1.0 tests ##
 ---
+## Overview :
+The scope of the tests presented here is not restricted solely to testing omx hal @ 1.0 API but also test to omx core functionality and to an extent omx components as well. The current directory contains the following folders: audio, common, component, master and video. Besides common all other folders contain test fixtures for testing AV decoder, encoder components. Common constitutes files that are used across by these test applications.
 
-The current directory contains the following folders: audio, common, component, master
-and video.
+#### master :
+Functionality of master is to enumerate all the omx components (and the roles it supports) available in android media framework.
 
-Besides common, all other folders contain basic OMX unit tests for testing audio and video decoder-encoder
-components. common constitutes files that are used across test applications.
+usage: VtsHalMediaOmxV1\_0TargetMasterTest -I default
 
-## master
-Enumerates all the omx components (and their roles) available in android media framework.
+#### component :
+This folder includes test fixtures that tests aspects common to all omx compatible components. For instance, port enabling/disabling, enumerating port formats, state transitions, flush, ..., stay common to all components irrespective of the service they offer. Test fixtures are directed towards testing the omx core. Every standard OMX compatible component is expected to pass these tests.
 
-Usage:
+usage: VtsHalMediaOmxV1\_0TargetComponentTest -I default -C <comp name> -R <comp role>
 
-VtsHalMediaOmxV1\_0TargetMasterTest -I default
+#### audio :
+This folder includes test fixtures associated with testing audio encoder and decoder components such as simple encoding of a raw clip or decoding of an elementary stream, end of stream test, timestamp deviations test, flush test and so on. These tests are aimed towards testing the plugin that connects the component to the omx core.
 
-## component
-This folder includes test fixtures that tests aspects common to all OMX compatible components. For instance, port enabling/disabling, enumerating port formats, state transitions, flush etc. stay common to all components irrespective of the service they offer. In a way this tests the OMX Core. Every standard OMX compatible component is expected to pass these tests.
+usage:
 
+VtsHalMediaOmxV1\_0TargetAudioDecTest -I default -C <comp name> -R audio_decoder.<comp class> -P /sdcard/media/
 
-Usage:
+VtsHalMediaOmxV1\_0TargetAudioEncTest -I default -C <comp name> -R audio_encoder.<comp class> -P /sdcard/media/
 
-VtsHalMediaOmxV1\_0TargetComponentTest -I default -C <component name> -R <component role>
+#### video :
+This folder includes test fixtures associated with testing video encoder and decoder components such as simple encoding of a raw clip or decoding of an elementary stream, end of stream test, timestamp deviations test, flush test and so on. These tests are aimed towards testing the plugin that connects the component to the omx core.
 
-## audio
-This folder includes test fixtures associated with audio encoder/decoder components such as encoding/decoding, EOS test, timestamp test etc. These tests are aimed towards testing the component specific aspects.
+usage:
 
-Usage:
+VtsHalMediaOmxV1\_0TargetVideoDecTest -I default -C <comp name> -R video_decoder.<comp class> -P /sdcard/media/
 
-VtsHalMediaOmxV1\_0TargetAudioDecTest -I default -C <component name> -R audio_decoder.<class>
-
-VtsHalMediaOmxV1\_0TargetAudioEncTest -I default -C <component name> -R audio_encoder.<class>
-
-## video
-This folder includes test fixtures associated with video encoder/decoder components like encoding/decoding, EOS test, timestamp test etc. These tests are aimed towards testing the component specific aspects.
-
-Usage:
-
-VtsHalMediaOmxV1\_0TargetVideoDecTest -I default -C <component name> -R video_decoder.<class>
-
-VtsHalMediaOmxV1\_0TargetVideoEncTest -I default -C <component name> -R video_encoder.<class>
-
-## notes
-Every component shall be tested by two applications,
-
-* ComponentTest.
-
-* AudioDecTest/AudioEncTest/VideoDecTest/VideoEncTest depending on the component class.
+VtsHalMediaOmxV1\_0TargetVideoEncTest -I default -C <comp name> -R video_encoder.<comp class> -P /sdcard/media/
 
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
index 34658b8..7cef52f 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
@@ -51,7 +51,7 @@
     virtual void SetUp() {}
     virtual void TearDown() {}
 
-    ComponentTestEnvironment() : instance("default") {}
+    ComponentTestEnvironment() : instance("default"), res("/sdcard/media/") {}
 
     void setInstance(const char* _instance) { instance = _instance; }
 
@@ -59,7 +59,7 @@
 
     void setRole(const char* _role) { role = _role; }
 
-    void setQuirks(int _quirks) { quirks = _quirks; }
+    void setRes(const char* _res) { res = _res; }
 
     const hidl_string getInstance() const { return instance; }
 
@@ -67,19 +67,19 @@
 
     const hidl_string getRole() const { return role; }
 
-    int getQuirks() const { return quirks; }
+    const hidl_string getRes() const { return res; }
 
     int initFromOptions(int argc, char** argv) {
         static struct option options[] = {
             {"instance", required_argument, 0, 'I'},
             {"component", required_argument, 0, 'C'},
             {"role", required_argument, 0, 'R'},
-            {"quirks", required_argument, 0, 'Q'},
+            {"res", required_argument, 0, 'P'},
             {0, 0, 0, 0}};
 
         while (true) {
             int index = 0;
-            int c = getopt_long(argc, argv, "I:C:Q:R:", options, &index);
+            int c = getopt_long(argc, argv, "I:C:R:P:", options, &index);
             if (c == -1) {
                 break;
             }
@@ -91,12 +91,12 @@
                 case 'C':
                     setComponent(optarg);
                     break;
-                case 'Q':
-                    setQuirks(atoi(optarg));
-                    break;
                 case 'R':
                     setRole(optarg);
                     break;
+                case 'P':
+                    setRes(optarg);
+                    break;
                 case '?':
                     break;
             }
@@ -109,8 +109,8 @@
                     "test options are:\n\n"
                     "-I, --instance: HAL instance to test\n"
                     "-C, --component: OMX component to test\n"
-                    "-R, --Role: OMX component Role\n"
-                    "-Q, --quirks: Component quirks\n",
+                    "-R, --role: OMX component Role\n"
+                    "-P, --res: Resource files directory location\n",
                     argv[optind ?: 1], argv[0]);
             return 2;
         }
@@ -121,12 +121,12 @@
     hidl_string instance;
     hidl_string component;
     hidl_string role;
-    // to be removed when IOmxNode::setQuirks is removed
-    int quirks;
+    hidl_string res;
 };
 
 static ComponentTestEnvironment* gEnv = nullptr;
 
+// audio decoder test fixture class
 class AudioDecHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    public:
     virtual void SetUp() override {
@@ -134,7 +134,8 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver();
+        observer =
+            new CodecObserver([this](Message msg) { handleMessage(msg); });
         ASSERT_NE(observer, nullptr);
         ASSERT_EQ(strncmp(gEnv->getComponent().c_str(), "OMX.", 4), 0)
             << "Invalid Component Name";
@@ -195,6 +196,10 @@
             }
         }
         ASSERT_NE(i, kNumCompToCoding);
+        eosFlag = false;
+        framesReceived = 0;
+        timestampUs = 0;
+        timestampDevTest = false;
     }
 
     virtual void TearDown() override {
@@ -204,6 +209,51 @@
         }
     }
 
+    // callback function to process messages received by onMessages() from IL
+    // client.
+    void handleMessage(Message msg) {
+        if (msg.type == Message::Type::FILL_BUFFER_DONE) {
+            if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
+                eosFlag = true;
+            }
+            if (msg.data.extendedBufferData.rangeLength != 0) {
+                framesReceived += 1;
+                // For decoder components current timestamp always exceeds
+                // previous timestamp
+                EXPECT_GE(msg.data.extendedBufferData.timestampUs, timestampUs);
+                timestampUs = msg.data.extendedBufferData.timestampUs;
+                // Test if current timestamp is among the list of queued
+                // timestamps
+                if (timestampDevTest) {
+                    bool tsHit = false;
+                    android::List<uint64_t>::iterator it =
+                        timestampUslist.begin();
+                    while (it != timestampUslist.end()) {
+                        if (*it == timestampUs) {
+                            timestampUslist.erase(it);
+                            tsHit = true;
+                            break;
+                        }
+                        it++;
+                    }
+                    if (tsHit == false) {
+                        if (timestampUslist.empty() == false) {
+                            EXPECT_EQ(tsHit, true)
+                                << "TimeStamp not recognized";
+                        } else {
+                            std::cerr
+                                << "[          ] Warning ! Received non-zero "
+                                   "output / TimeStamp not recognized \n";
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    void testEOS(android::Vector<BufferInfo>* iBuffer,
+                 android::Vector<BufferInfo>* oBuffer, bool signalEOS = false);
+
     enum standardComp {
         mp3,
         amrnb,
@@ -220,6 +270,11 @@
     sp<IOmxNode> omxNode;
     standardComp compName;
     OMX_AUDIO_CODINGTYPE eEncoding;
+    bool eosFlag;
+    uint32_t framesReceived;
+    uint64_t timestampUs;
+    ::android::List<uint64_t> timestampUslist;
+    bool timestampDevTest;
 
    protected:
     static void description(const std::string& description) {
@@ -227,6 +282,44 @@
     }
 };
 
+// end of stream test for audio decoder components
+void AudioDecHidlTest::testEOS(android::Vector<BufferInfo>* iBuffer,
+                               android::Vector<BufferInfo>* oBuffer,
+                               bool signalEOS) {
+    android::hardware::media::omx::V1_0::Status status;
+    size_t i = 0;
+    if (signalEOS) {
+        if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
+            // signal an empty buffer with flag set to EOS
+            dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0);
+        } else {
+            ASSERT_TRUE(false);
+        }
+    }
+    // Dispatch all client owned output buffers to recover remaining frames
+    while (1) {
+        if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, i);
+        } else {
+            break;
+        }
+    }
+    while (1) {
+        Message msg;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        EXPECT_EQ(status,
+                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+        for (; i < iBuffer->size(); i++) {
+            if ((*iBuffer)[i].owner != client) break;
+        }
+        if (i == iBuffer->size()) break;
+    }
+    // test for flag
+    EXPECT_EQ(eosFlag, true);
+    eosFlag = false;
+}
+
 // Set Default port param.
 void setDefaultPortParam(
     sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding,
@@ -340,8 +433,8 @@
 }
 
 // LookUpTable of clips and metadata for component testing
-void GetURLForComponent(AudioDecHidlTest::standardComp comp, const char** mURL,
-                        const char** info) {
+void GetURLForComponent(AudioDecHidlTest::standardComp comp, char* mURL,
+                        char* info) {
     struct CompToURL {
         AudioDecHidlTest::standardComp comp;
         const char* mURL;
@@ -349,42 +442,155 @@
     };
     static const CompToURL kCompToURL[] = {
         {AudioDecHidlTest::standardComp::mp3,
-         "/sdcard/media/bbb_mp3_stereo_192kbps_48000hz.mp3",
-         "/sdcard/media/bbb_mp3_stereo_192kbps_48000hz.info"},
+         "bbb_mp3_stereo_192kbps_48000hz.mp3",
+         "bbb_mp3_stereo_192kbps_48000hz.info"},
         {AudioDecHidlTest::standardComp::aac,
-         "/sdcard/media/bbb_aac_stereo_128kbps_48000hz.aac",
-         "/sdcard/media/bbb_aac_stereo_128kbps_48000hz.info"},
+         "bbb_aac_stereo_128kbps_48000hz.aac",
+         "bbb_aac_stereo_128kbps_48000hz.info"},
         {AudioDecHidlTest::standardComp::amrnb,
-         "/sdcard/media/sine_amrnb_1ch_12kbps_8000hz.amrnb",
-         "/sdcard/media/sine_amrnb_1ch_12kbps_8000hz.info"},
+         "sine_amrnb_1ch_12kbps_8000hz.amrnb",
+         "sine_amrnb_1ch_12kbps_8000hz.info"},
         {AudioDecHidlTest::standardComp::amrwb,
-         "/sdcard/media/sine_amrwb_1ch_24kbps_16000hz.amrwb",
-         "/sdcard/media/sine_amrwb_1ch_24kbps_16000hz.info"},
+         "sine_amrwb_1ch_24kbps_16000hz.amrwb",
+         "sine_amrwb_1ch_24kbps_16000hz.info"},
         {AudioDecHidlTest::standardComp::vorbis,
-         "/sdcard/media/bbb_vorbis_stereo_128kbps_48000hz.vorbis",
-         "/sdcard/media/bbb_vorbis_stereo_128kbps_48000hz.info"},
+         "bbb_vorbis_stereo_128kbps_48000hz.vorbis",
+         "bbb_vorbis_stereo_128kbps_48000hz.info"},
         {AudioDecHidlTest::standardComp::opus,
-         "/sdcard/media/bbb_opus_stereo_128kbps_48000hz.opus",
-         "/sdcard/media/bbb_opus_stereo_128kbps_48000hz.info"},
+         "bbb_opus_stereo_128kbps_48000hz.opus",
+         "bbb_opus_stereo_128kbps_48000hz.info"},
     };
 
-    *mURL = *info = nullptr;
     for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
         if (kCompToURL[i].comp == comp) {
-            *mURL = kCompToURL[i].mURL;
-            *info = kCompToURL[i].info;
+            strcat(mURL, kCompToURL[i].mURL);
+            strcat(info, kCompToURL[i].info);
             return;
         }
     }
 }
 
+// port settings reconfiguration during runtime. reconfigures sample rate and
+// number
+void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                         android::Vector<BufferInfo>* iBuffer,
+                         android::Vector<BufferInfo>* oBuffer,
+                         OMX_AUDIO_CODINGTYPE eEncoding,
+                         OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
+                         Message msg) {
+    android::hardware::media::omx::V1_0::Status status;
+
+    if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
+        ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
+
+        status = omxNode->sendCommand(toRawCommandType(OMX_CommandPortDisable),
+                                      kPortIndexOutput);
+        ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        if (status == android::hardware::media::omx::V1_0::Status::TIMED_OUT) {
+            for (size_t i = 0; i < oBuffer->size(); ++i) {
+                // test if client got all its buffers back
+                EXPECT_EQ((*oBuffer)[i].owner, client);
+                // free the buffers
+                status =
+                    omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id);
+                ASSERT_EQ(status,
+                          android::hardware::media::omx::V1_0::Status::OK);
+            }
+            status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer,
+                                              oBuffer);
+            ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+            ASSERT_EQ(msg.type, Message::Type::EVENT);
+            ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+            ASSERT_EQ(msg.data.eventData.data1, OMX_CommandPortDisable);
+            ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
+
+            // set Port Params
+            int32_t nChannels;
+            int32_t nSampleRate;
+            getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels,
+                                &nSampleRate);
+            setDefaultPortParam(omxNode, kPortIndexOutput, OMX_AUDIO_CodingPCM,
+                                nChannels, nSampleRate);
+
+            // If you can disable a port, then you should be able to
+            // enable
+            // it as well
+            status = omxNode->sendCommand(
+                toRawCommandType(OMX_CommandPortEnable), kPortIndexOutput);
+            ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+
+            // do not enable the port until all the buffers are supplied
+            status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer,
+                                              oBuffer);
+            ASSERT_EQ(status,
+                      android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+
+            allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
+            status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer,
+                                              oBuffer);
+            ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+            ASSERT_EQ(msg.type, Message::Type::EVENT);
+            ASSERT_EQ(msg.data.eventData.data1, OMX_CommandPortEnable);
+            ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
+
+            // dispatch output buffers
+            for (size_t i = 0; i < oBuffer->size(); i++) {
+                dispatchOutputBuffer(omxNode, oBuffer, i);
+            }
+        } else {
+            ASSERT_TRUE(false);
+        }
+    } else {
+        EXPECT_TRUE(false);
+        return;
+    }
+}
+
+// blocking call to ensures application to Wait till all the inputs are consumed
+void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                            android::Vector<BufferInfo>* iBuffer,
+                            android::Vector<BufferInfo>* oBuffer,
+                            OMX_AUDIO_CODINGTYPE eEncoding,
+                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    while (1) {
+        size_t i = 0;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        if (status == android::hardware::media::omx::V1_0::Status::OK) {
+            EXPECT_EQ(msg.type, Message::Type::EVENT);
+            portReconfiguration(omxNode, observer, iBuffer, oBuffer, eEncoding,
+                                kPortIndexInput, kPortIndexOutput, msg);
+        }
+        // status == TIMED_OUT, it could be due to process time being large
+        // than DEFAULT_TIMEOUT or component needs output buffers to start
+        // processing.
+        for (; i < iBuffer->size(); i++) {
+            if ((*iBuffer)[i].owner != client) break;
+        }
+        if (i == iBuffer->size()) break;
+
+        // Dispatch an output buffer assuming outQueue.empty() is true
+        size_t index;
+        if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, index);
+        }
+    }
+}
+
 // Decode N Frames
 void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                    android::Vector<BufferInfo>* iBuffer,
                    android::Vector<BufferInfo>* oBuffer,
                    OMX_AUDIO_CODINGTYPE eEncoding, OMX_U32 kPortIndexInput,
-                   OMX_U32 kPortIndexOutput, uint32_t nFrames,
-                   std::ifstream& eleStream, std::ifstream& eleInfo) {
+                   OMX_U32 kPortIndexOutput, std::ifstream& eleStream,
+                   android::Vector<FrameData>* Info, int offset, int range,
+                   bool signalEOS = true) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
@@ -393,21 +599,24 @@
         dispatchOutputBuffer(omxNode, oBuffer, i);
     }
     // dispatch input buffers
-    int bytesCount = 0;
     uint32_t flags = 0;
-    uint64_t timestamp = 0;
-    for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
+    int frameID = offset;
+    for (size_t i = 0; (i < iBuffer->size()) && (frameID < (int)Info->size()) &&
+                       (frameID < (offset + range));
+         i++) {
         char* ipBuffer = static_cast<char*>(
             static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
-        if (!(eleInfo >> bytesCount)) break;
-        ASSERT_LE(bytesCount,
+        ASSERT_LE((*Info)[frameID].bytesCount,
                   static_cast<int>((*iBuffer)[i].mMemory->getSize()));
-        eleStream.read(ipBuffer, bytesCount);
-        ASSERT_EQ(eleStream.gcount(), bytesCount);
-        eleInfo >> flags;
-        eleInfo >> timestamp;
-        dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, 0, timestamp);
-        nFrames--;
+        eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
+        ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
+        flags = (*Info)[frameID].flags;
+        if (signalEOS && ((frameID == (int)Info->size() - 1) ||
+                          (frameID == (offset + range - 1))))
+            flags |= OMX_BUFFERFLAG_EOS;
+        dispatchInputBuffer(omxNode, iBuffer, i, (*Info)[frameID].bytesCount,
+                            flags, (*Info)[frameID].timestamp);
+        frameID++;
     }
 
     while (1) {
@@ -417,101 +626,29 @@
         // Port Reconfiguration
         if (status == android::hardware::media::omx::V1_0::Status::OK &&
             msg.type == Message::Type::EVENT) {
-            if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
-                ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
-
-                status = omxNode->sendCommand(
-                    toRawCommandType(OMX_CommandPortDisable), kPortIndexOutput);
-                ASSERT_EQ(status,
-                          android::hardware::media::omx::V1_0::Status::OK);
-
-                status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
-                                                  iBuffer, oBuffer);
-                if (status ==
-                    android::hardware::media::omx::V1_0::Status::TIMED_OUT) {
-                    for (size_t i = 0; i < oBuffer->size(); ++i) {
-                        // test if client got all its buffers back
-                        EXPECT_EQ((*oBuffer)[i].owner, client);
-                        // free the buffers
-                        status = omxNode->freeBuffer(kPortIndexOutput,
-                                                     (*oBuffer)[i].id);
-                        ASSERT_EQ(
-                            status,
-                            android::hardware::media::omx::V1_0::Status::OK);
-                    }
-                    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
-                                                      iBuffer, oBuffer);
-                    ASSERT_EQ(status,
-                              android::hardware::media::omx::V1_0::Status::OK);
-                    ASSERT_EQ(msg.type, Message::Type::EVENT);
-                    ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
-                    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandPortDisable);
-                    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
-
-                    // set Port Params
-                    int32_t nChannels;
-                    int32_t nSampleRate;
-                    getInputChannelInfo(omxNode, kPortIndexInput, eEncoding,
-                                        &nChannels, &nSampleRate);
-                    setDefaultPortParam(omxNode, kPortIndexOutput,
-                                        OMX_AUDIO_CodingPCM, nChannels,
-                                        nSampleRate);
-
-                    // If you can disable a port, then you should be able to
-                    // enable
-                    // it as well
-                    status = omxNode->sendCommand(
-                        toRawCommandType(OMX_CommandPortEnable),
-                        kPortIndexOutput);
-                    ASSERT_EQ(status,
-                              android::hardware::media::omx::V1_0::Status::OK);
-
-                    // do not enable the port until all the buffers are supplied
-                    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
-                                                      iBuffer, oBuffer);
-                    ASSERT_EQ(
-                        status,
-                        android::hardware::media::omx::V1_0::Status::TIMED_OUT);
-
-                    allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput);
-                    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
-                                                      iBuffer, oBuffer);
-                    ASSERT_EQ(status,
-                              android::hardware::media::omx::V1_0::Status::OK);
-                    ASSERT_EQ(msg.type, Message::Type::EVENT);
-                    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandPortEnable);
-                    ASSERT_EQ(msg.data.eventData.data2, kPortIndexOutput);
-
-                    // dispatch output buffers
-                    for (size_t i = 0; i < oBuffer->size(); i++) {
-                        dispatchOutputBuffer(omxNode, oBuffer, i);
-                    }
-                } else {
-                    ASSERT_TRUE(false);
-                }
-            } else {
-                EXPECT_TRUE(false);
-                return;
-            }
+            portReconfiguration(omxNode, observer, iBuffer, oBuffer, eEncoding,
+                                kPortIndexInput, kPortIndexOutput, msg);
         }
 
-        if (nFrames == 0) break;
+        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
 
         // Dispatch input buffer
         size_t index = 0;
         if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
             char* ipBuffer = static_cast<char*>(
                 static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
-            if (!(eleInfo >> bytesCount)) break;
-            ASSERT_LE(bytesCount,
+            ASSERT_LE((*Info)[frameID].bytesCount,
                       static_cast<int>((*iBuffer)[index].mMemory->getSize()));
-            eleStream.read(ipBuffer, bytesCount);
-            ASSERT_EQ(eleStream.gcount(), bytesCount);
-            eleInfo >> flags;
-            eleInfo >> timestamp;
-            dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, 0,
-                                timestamp);
-            nFrames--;
+            eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
+            ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
+            flags = (*Info)[frameID].flags;
+            if (signalEOS && ((frameID == (int)Info->size() - 1) ||
+                              (frameID == (offset + range - 1))))
+                flags |= OMX_BUFFERFLAG_EOS;
+            dispatchInputBuffer(omxNode, iBuffer, index,
+                                (*Info)[frameID].bytesCount, flags,
+                                (*Info)[frameID].timestamp);
+            frameID++;
         }
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
@@ -519,6 +656,7 @@
     }
 }
 
+// set component role
 TEST_F(AudioDecHidlTest, SetRole) {
     description("Test Set Component Role");
     android::hardware::media::omx::V1_0::Status status;
@@ -526,6 +664,7 @@
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port format enumeration
 TEST_F(AudioDecHidlTest, EnumeratePortFormat) {
     description("Test Component on Mandatory Port Parameters (Port Format)");
     android::hardware::media::omx::V1_0::Status status;
@@ -545,8 +684,10 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// test port settings reconfiguration, elementary stream decode and timestamp
+// deviation
 TEST_F(AudioDecHidlTest, DecodeTest) {
-    description("Tests Port Reconfiguration and Decode");
+    description("Tests Port Reconfiguration, Decode and timestamp deviation");
     android::hardware::media::omx::V1_0::Status status;
     uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
     status = setRole(omxNode, gEnv->getRole().c_str());
@@ -558,16 +699,29 @@
         kPortIndexInput = params.nStartPortNumber;
         kPortIndexOutput = kPortIndexInput + 1;
     }
-    const char *mURL = nullptr, *info = nullptr;
-    GetURLForComponent(compName, &mURL, &info);
-    EXPECT_NE(mURL, nullptr);
-    EXPECT_NE(info, nullptr);
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
 
     std::ifstream eleStream, eleInfo;
-    eleStream.open(mURL, std::ifstream::binary);
-    ASSERT_EQ(eleStream.is_open(), true);
+
     eleInfo.open(info);
     ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    timestampDevTest = true;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+        if (flags != OMX_BUFFERFLAG_CODECCONFIG)
+            timestampUslist.push_back(timestamp);
+    }
+    eleInfo.close();
 
     int32_t nChannels, nSampleRate;
     // Configure input port
@@ -586,16 +740,234 @@
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
     // Port Reconfiguration
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
-                  kPortIndexInput, kPortIndexOutput, 1024, eleStream, eleInfo);
+                  kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0,
+                  (int)Info.size());
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    EXPECT_EQ(timestampUslist.empty(), true);
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
     // set state to executing
     changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                             kPortIndexInput, kPortIndexOutput);
+}
 
+// end of sequence test
+TEST_F(AudioDecHidlTest, EOSTest) {
+    description("Test end of stream");
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamAudioInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
+
+    std::ifstream eleStream, eleInfo;
+
+    eleInfo.open(info);
+    ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+    }
     eleInfo.close();
+
+    int32_t nChannels, nSampleRate;
+    // Configure input port
+    setDefaultPortParam(omxNode, kPortIndexInput, eEncoding);
+    getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels,
+                        &nSampleRate);
+    // Configure output port
+    setDefaultPortParam(omxNode, kPortIndexOutput, OMX_AUDIO_CodingPCM,
+                        nChannels, nSampleRate);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    // request EOS at the start
+    testEOS(&iBuffer, &oBuffer, true);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 0U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // request EOS for thumbnail
+    // signal EOS flag with last frame
+    size_t i = 0;
+    while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++;
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                  kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0,
+                  i + 1);
     eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 1U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // signal EOS flag after last frame
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                  kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, i + 1,
+                  false);
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer, true);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 1U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // request EOS at the end
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                  kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0,
+                  (int)Info.size());
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+}
+
+// test input/output port flush
+TEST_F(AudioDecHidlTest, FlushTest) {
+    description("Test Flush");
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamAudioInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
+
+    std::ifstream eleStream, eleInfo;
+
+    eleInfo.open(info);
+    ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+    }
+    eleInfo.close();
+
+    int32_t nChannels, nSampleRate;
+    // Configure input port
+    setDefaultPortParam(omxNode, kPortIndexInput, eEncoding);
+    getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels,
+                        &nSampleRate);
+    // Configure output port
+    setDefaultPortParam(omxNode, kPortIndexOutput, OMX_AUDIO_CodingPCM,
+                        nChannels, nSampleRate);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    // Decode 128 frames and flush. here 128 is chosen to ensure there is a key
+    // frame after this so that the below section can be convered for all
+    // components
+    int nFrames = 128;
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                  kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0,
+                  nFrames, false);
+    // Note: Assumes 200 ms is enough to end any decode call that started
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput, 200000);
+    framesReceived = 0;
+
+    // Seek to next key frame and start decoding till the end
+    int index = nFrames;
+    bool keyFrame = false;
+    while (index < (int)Info.size()) {
+        if ((Info[index].flags & OMX_BUFFERFLAG_SYNCFRAME) ==
+            OMX_BUFFERFLAG_SYNCFRAME) {
+            timestampUs = Info[index - 1].timestamp;
+            keyFrame = true;
+            break;
+        }
+        eleStream.ignore(Info[index].bytesCount);
+        index++;
+    }
+    if (keyFrame) {
+        decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
+                      kPortIndexInput, kPortIndexOutput, eleStream, &Info,
+                      index, Info.size() - index, false);
+    }
+    // Note: Assumes 200 ms is enough to end any decode call that started
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput, 200000);
+    framesReceived = 0;
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
 }
 
 int main(int argc, char** argv) {
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
index 066d554..131e2e1 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
@@ -51,7 +51,7 @@
     virtual void SetUp() {}
     virtual void TearDown() {}
 
-    ComponentTestEnvironment() : instance("default") {}
+    ComponentTestEnvironment() : instance("default"), res("/sdcard/media/") {}
 
     void setInstance(const char* _instance) { instance = _instance; }
 
@@ -59,7 +59,7 @@
 
     void setRole(const char* _role) { role = _role; }
 
-    void setQuirks(int _quirks) { quirks = _quirks; }
+    void setRes(const char* _res) { res = _res; }
 
     const hidl_string getInstance() const { return instance; }
 
@@ -67,19 +67,19 @@
 
     const hidl_string getRole() const { return role; }
 
-    int getQuirks() const { return quirks; }
+    const hidl_string getRes() const { return res; }
 
     int initFromOptions(int argc, char** argv) {
         static struct option options[] = {
             {"instance", required_argument, 0, 'I'},
             {"component", required_argument, 0, 'C'},
             {"role", required_argument, 0, 'R'},
-            {"quirks", required_argument, 0, 'Q'},
+            {"res", required_argument, 0, 'P'},
             {0, 0, 0, 0}};
 
         while (true) {
             int index = 0;
-            int c = getopt_long(argc, argv, "I:C:Q:R:", options, &index);
+            int c = getopt_long(argc, argv, "I:C:R:P:", options, &index);
             if (c == -1) {
                 break;
             }
@@ -91,12 +91,12 @@
                 case 'C':
                     setComponent(optarg);
                     break;
-                case 'Q':
-                    setQuirks(atoi(optarg));
-                    break;
                 case 'R':
                     setRole(optarg);
                     break;
+                case 'P':
+                    setRes(optarg);
+                    break;
                 case '?':
                     break;
             }
@@ -109,8 +109,8 @@
                     "test options are:\n\n"
                     "-I, --instance: HAL instance to test\n"
                     "-C, --component: OMX component to test\n"
-                    "-R, --Role: OMX component Role\n"
-                    "-Q, --quirks: Component quirks\n",
+                    "-R, --role: OMX component Role\n"
+                    "-P, --res: Resource files directory location\n",
                     argv[optind ?: 1], argv[0]);
             return 2;
         }
@@ -121,12 +121,12 @@
     hidl_string instance;
     hidl_string component;
     hidl_string role;
-    // to be removed when IOmxNode::setQuirks is removed
-    int quirks;
+    hidl_string res;
 };
 
 static ComponentTestEnvironment* gEnv = nullptr;
 
+// audio encoder test fixture class
 class AudioEncHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    public:
     virtual void SetUp() override {
@@ -134,7 +134,7 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver();
+        observer = new CodecObserver([this](Message msg) { (void)msg; });
         ASSERT_NE(observer, nullptr);
         ASSERT_EQ(strncmp(gEnv->getComponent().c_str(), "OMX.", 4), 0)
             << "Invalid Component Name";
@@ -257,27 +257,21 @@
 }
 
 // LookUpTable of clips and metadata for component testing
-void GetURLForComponent(AudioEncHidlTest::standardComp comp,
-                        const char** mURL) {
+void GetURLForComponent(AudioEncHidlTest::standardComp comp, char* mURL) {
     struct CompToURL {
         AudioEncHidlTest::standardComp comp;
         const char* mURL;
     };
     static const CompToURL kCompToURL[] = {
-        {AudioEncHidlTest::standardComp::aac,
-         "/sdcard/media/bbb_raw_2ch_48khz_s16le.raw"},
-        {AudioEncHidlTest::standardComp::amrnb,
-         "/sdcard/media/bbb_raw_1ch_8khz_s16le.raw"},
-        {AudioEncHidlTest::standardComp::amrwb,
-         "/sdcard/media/bbb_raw_1ch_16khz_s16le.raw"},
-        {AudioEncHidlTest::standardComp::flac,
-         "/sdcard/media/bbb_raw_2ch_48khz_s16le.raw"},
+        {AudioEncHidlTest::standardComp::aac, "bbb_raw_2ch_48khz_s16le.raw"},
+        {AudioEncHidlTest::standardComp::amrnb, "bbb_raw_1ch_8khz_s16le.raw"},
+        {AudioEncHidlTest::standardComp::amrwb, "bbb_raw_1ch_16khz_s16le.raw"},
+        {AudioEncHidlTest::standardComp::flac, "bbb_raw_2ch_48khz_s16le.raw"},
     };
 
-    *mURL = nullptr;
     for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
         if (kCompToURL[i].comp == comp) {
-            *mURL = kCompToURL[i].mURL;
+            strcat(mURL, kCompToURL[i].mURL);
             return;
         }
     }
@@ -343,6 +337,7 @@
     }
 }
 
+// set component role
 TEST_F(AudioEncHidlTest, SetRole) {
     description("Test Set Component Role");
     android::hardware::media::omx::V1_0::Status status;
@@ -350,6 +345,7 @@
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port format enumeration
 TEST_F(AudioEncHidlTest, EnumeratePortFormat) {
     description("Test Component on Mandatory Port Parameters (Port Format)");
     android::hardware::media::omx::V1_0::Status status;
@@ -369,6 +365,7 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// test raw stream encode
 TEST_F(AudioEncHidlTest, EncodeTest) {
     description("Tests Encode");
     android::hardware::media::omx::V1_0::Status status;
@@ -382,9 +379,9 @@
         kPortIndexInput = params.nStartPortNumber;
         kPortIndexOutput = kPortIndexInput + 1;
     }
-    const char* mURL = nullptr;
-    GetURLForComponent(compName, &mURL);
-    EXPECT_NE(mURL, nullptr);
+    char mURL[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL);
 
     std::ifstream eleStream;
     eleStream.open(mURL, std::ifstream::binary);
diff --git a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
index d8dfe58..d107889 100644
--- a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
@@ -235,6 +235,26 @@
     return buffArray->size();
 }
 
+// dispatch buffer to output port
+void dispatchOutputBuffer(sp<IOmxNode> omxNode,
+                          android::Vector<BufferInfo>* buffArray,
+                          size_t bufferIndex) {
+    android::hardware::media::omx::V1_0::Status status;
+    CodecBuffer t;
+    t.sharedMemory = android::hardware::hidl_memory();
+    t.nativeHandle = android::hardware::hidl_handle();
+    t.type = CodecBuffer::Type::PRESET;
+    t.attr.preset.rangeOffset = 0;
+    t.attr.preset.rangeLength = 0;
+    native_handle_t* fenceNh = native_handle_create(0, 0);
+    ASSERT_NE(fenceNh, nullptr);
+    status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
+    native_handle_close(fenceNh);
+    native_handle_delete(fenceNh);
+    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+    buffArray->editItemAt(bufferIndex).owner = component;
+}
+
 // dispatch buffer to input port
 void dispatchInputBuffer(sp<IOmxNode> omxNode,
                          android::Vector<BufferInfo>* buffArray,
@@ -257,31 +277,11 @@
     buffArray->editItemAt(bufferIndex).owner = component;
 }
 
-// dispatch buffer to output port
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex) {
-    android::hardware::media::omx::V1_0::Status status;
-    CodecBuffer t;
-    t.sharedMemory = android::hardware::hidl_memory();
-    t.nativeHandle = android::hardware::hidl_handle();
-    t.type = CodecBuffer::Type::PRESET;
-    t.attr.preset.rangeOffset = 0;
-    t.attr.preset.rangeLength = 0;
-    native_handle_t* fenceNh = native_handle_create(0, 0);
-    ASSERT_NE(fenceNh, nullptr);
-    status = omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
-    native_handle_close(fenceNh);
-    native_handle_delete(fenceNh);
-    ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    buffArray->editItemAt(bufferIndex).owner = component;
-}
-
 // Flush input and output ports
 void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                 android::Vector<BufferInfo>* iBuffer,
                 android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput) {
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
@@ -289,7 +289,7 @@
     status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
                                   kPortIndexInput);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
     ASSERT_EQ(msg.type, Message::Type::EVENT);
     ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
@@ -304,7 +304,7 @@
     status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
                                   kPortIndexOutput);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
     ASSERT_EQ(msg.type, Message::Type::EVENT);
     ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
@@ -317,10 +317,10 @@
 }
 
 Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
-    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE encoding) {
+    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding) {
     OMX_U32 index = 0;
     OMX_AUDIO_PARAM_PORTFORMATTYPE portFormat;
-    std::vector<OMX_AUDIO_CODINGTYPE> eEncoding;
+    std::vector<OMX_AUDIO_CODINGTYPE> arrEncoding;
     android::hardware::media::omx::V1_0::Status status;
 
     while (1) {
@@ -328,24 +328,26 @@
         status = getPortParam(omxNode, OMX_IndexParamAudioPortFormat, portIndex,
                               &portFormat);
         if (status != ::android::hardware::media::omx::V1_0::Status::OK) break;
-        eEncoding.push_back(portFormat.eEncoding);
+        arrEncoding.push_back(portFormat.eEncoding);
         index++;
         if (index == 512) {
+            // enumerated way too many formats, highly unusual for this to
+            // happen.
             EXPECT_LE(index, 512U)
                 << "Expecting OMX_ErrorNoMore but not received";
             break;
         }
     }
     if (!index) return status;
-    for (index = 0; index < eEncoding.size(); index++) {
-        if (eEncoding[index] == encoding) {
-            portFormat.eEncoding = eEncoding[index];
+    for (index = 0; index < arrEncoding.size(); index++) {
+        if (arrEncoding[index] == eEncoding) {
+            portFormat.eEncoding = arrEncoding[index];
             break;
         }
     }
-    if (index == eEncoding.size()) {
+    if (index == arrEncoding.size()) {
         ALOGI("setting default Port format");
-        portFormat.eEncoding = eEncoding[0];
+        portFormat.eEncoding = arrEncoding[0];
     }
     // In setParam call nIndex shall be ignored as per omx-il specification.
     // see how this holds up by corrupting nIndex
diff --git a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
index 89eb83c..e5cccf6 100644
--- a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.h
@@ -48,22 +48,22 @@
 
 size_t getEmptyBufferID(android::Vector<BufferInfo>* buffArray);
 
+void dispatchOutputBuffer(sp<IOmxNode> omxNode,
+                          android::Vector<BufferInfo>* buffArray,
+                          size_t bufferIndex);
+
 void dispatchInputBuffer(sp<IOmxNode> omxNode,
                          android::Vector<BufferInfo>* buffArray,
                          size_t bufferIndex, int bytesCount, uint32_t flags,
                          uint64_t timestamp);
 
-void dispatchOutputBuffer(sp<IOmxNode> omxNode,
-                          android::Vector<BufferInfo>* buffArray,
-                          size_t bufferIndex);
-
 void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                 android::Vector<BufferInfo>* iBuffer,
                 android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput);
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
 
 Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
-    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE encoding);
+    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding);
 
 Return<android::hardware::media::omx::V1_0::Status> setRole(
     sp<IOmxNode> omxNode, const char* role);
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
index a51ea97..b152895 100644
--- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
@@ -71,8 +71,15 @@
     ::android::sp<IMemory> mMemory;
 };
 
+struct FrameData {
+    int bytesCount;
+    uint32_t flags;
+    uint32_t timestamp;
+};
+
 struct CodecObserver : public IOmxObserver {
    public:
+    CodecObserver(std::function<void(Message)> fn) : callBack(fn) {}
     Return<void> onMessages(const hidl_vec<Message>& messages) override {
         android::Mutex::Autolock autoLock(msgLock);
         for (hidl_vec<Message>::const_iterator it = messages.begin();
@@ -103,6 +110,7 @@
                         for (i = 0; i < oBuffers->size(); ++i) {
                             if ((*oBuffers)[i].id ==
                                 it->data.bufferData.buffer) {
+                                if (callBack) callBack(*it);
                                 oBuffers->editItemAt(i).owner = client;
                                 msgQueue.erase(it);
                                 break;
@@ -127,12 +135,14 @@
                 }
                 ++it;
             }
+            if (finishBy - android::ALooper::GetNowUs() < 0)
+                return toStatus(android::TIMED_OUT);
             android::status_t err =
                 (timeoutUs < 0)
                     ? msgCondition.wait(msgLock)
                     : msgCondition.waitRelative(
                           msgLock,
-                          (finishBy - android::ALooper::GetNowUs()) * 1000);
+                          (finishBy - android::ALooper::GetNowUs()) * 1000ll);
             if (err == android::TIMED_OUT) return toStatus(err);
         }
     }
@@ -140,6 +150,7 @@
     android::List<Message> msgQueue;
     android::Mutex msgLock;
     android::Condition msgCondition;
+    std::function<void(Message)> callBack;
 };
 
 /*
diff --git a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
index 6b6c9cf..6181827 100644
--- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
+++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
@@ -57,27 +57,22 @@
 
     void setRole(const char* _role) { role = _role; }
 
-    void setQuirks(int _quirks) { quirks = _quirks; }
-
     const hidl_string getInstance() const { return instance; }
 
     const hidl_string getComponent() const { return component; }
 
     const hidl_string getRole() const { return role; }
 
-    int getQuirks() const { return quirks; }
-
     int initFromOptions(int argc, char** argv) {
         static struct option options[] = {
             {"instance", required_argument, 0, 'I'},
             {"component", required_argument, 0, 'C'},
             {"role", required_argument, 0, 'R'},
-            {"quirks", required_argument, 0, 'Q'},
             {0, 0, 0, 0}};
 
         while (true) {
             int index = 0;
-            int c = getopt_long(argc, argv, "I:C:Q:R:", options, &index);
+            int c = getopt_long(argc, argv, "I:C:R:", options, &index);
             if (c == -1) {
                 break;
             }
@@ -89,9 +84,6 @@
                 case 'C':
                     setComponent(optarg);
                     break;
-                case 'Q':
-                    setQuirks(atoi(optarg));
-                    break;
                 case 'R':
                     setRole(optarg);
                     break;
@@ -107,8 +99,7 @@
                     "test options are:\n\n"
                     "-I, --instance: HAL instance to test\n"
                     "-C, --component: OMX component to test\n"
-                    "-R, --Role: OMX component Role\n"
-                    "-Q, --quirks: Component quirks\n",
+                    "-R, --Role: OMX component Role\n",
                     argv[optind ?: 1], argv[0]);
             return 2;
         }
@@ -119,12 +110,11 @@
     hidl_string instance;
     hidl_string component;
     hidl_string role;
-    // to be removed when IOmxNode::setQuirks is removed
-    int quirks;
 };
 
 static ComponentTestEnvironment* gEnv = nullptr;
 
+// generic component test fixture class
 class ComponentHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    public:
     virtual void SetUp() override {
@@ -132,7 +122,7 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver();
+        observer = new CodecObserver(nullptr);
         ASSERT_NE(observer, nullptr);
         ASSERT_EQ(strncmp(gEnv->getComponent().c_str(), "OMX.", 4), 0)
             << "Invalid Component Name";
@@ -465,14 +455,15 @@
     }
 }
 
+// get/set video component port format
 Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex,
-    OMX_VIDEO_CODINGTYPE compressionFormat, OMX_COLOR_FORMATTYPE colorFormat,
-    OMX_U32 frameRate) {
+    OMX_VIDEO_CODINGTYPE eCompressionFormat, OMX_COLOR_FORMATTYPE eColorFormat,
+    OMX_U32 xFramerate) {
     OMX_U32 index = 0;
     OMX_VIDEO_PARAM_PORTFORMATTYPE portFormat;
-    std::vector<OMX_COLOR_FORMATTYPE> eColorFormat;
-    std::vector<OMX_VIDEO_CODINGTYPE> eCompressionFormat;
+    std::vector<OMX_COLOR_FORMATTYPE> arrColorFormat;
+    std::vector<OMX_VIDEO_CODINGTYPE> arrCompressionFormat;
     android::hardware::media::omx::V1_0::Status status;
 
     while (1) {
@@ -480,10 +471,10 @@
         status = getPortParam(omxNode, OMX_IndexParamVideoPortFormat, portIndex,
                               &portFormat);
         if (status != ::android::hardware::media::omx::V1_0::Status::OK) break;
-        if (compressionFormat == OMX_VIDEO_CodingUnused)
-            eColorFormat.push_back(portFormat.eColorFormat);
+        if (eCompressionFormat == OMX_VIDEO_CodingUnused)
+            arrColorFormat.push_back(portFormat.eColorFormat);
         else
-            eCompressionFormat.push_back(portFormat.eCompressionFormat);
+            arrCompressionFormat.push_back(portFormat.eCompressionFormat);
         index++;
         if (index == 512) {
             // enumerated way too many formats, highly unusual for this to
@@ -494,45 +485,46 @@
         }
     }
     if (!index) return status;
-    if (compressionFormat == OMX_VIDEO_CodingUnused) {
-        for (index = 0; index < eColorFormat.size(); index++) {
-            if (eColorFormat[index] == colorFormat) {
-                portFormat.eColorFormat = eColorFormat[index];
+    if (eCompressionFormat == OMX_VIDEO_CodingUnused) {
+        for (index = 0; index < arrColorFormat.size(); index++) {
+            if (arrColorFormat[index] == eColorFormat) {
+                portFormat.eColorFormat = arrColorFormat[index];
                 break;
             }
         }
-        if (index == eColorFormat.size()) {
+        if (index == arrColorFormat.size()) {
             ALOGI("setting default color format");
-            portFormat.eColorFormat = eColorFormat[0];
+            portFormat.eColorFormat = arrColorFormat[0];
         }
         portFormat.eCompressionFormat = OMX_VIDEO_CodingUnused;
     } else {
-        for (index = 0; index < eCompressionFormat.size(); index++) {
-            if (eCompressionFormat[index] == compressionFormat) {
-                portFormat.eCompressionFormat = eCompressionFormat[index];
+        for (index = 0; index < arrCompressionFormat.size(); index++) {
+            if (arrCompressionFormat[index] == eCompressionFormat) {
+                portFormat.eCompressionFormat = arrCompressionFormat[index];
                 break;
             }
         }
-        if (index == eCompressionFormat.size()) {
+        if (index == arrCompressionFormat.size()) {
             ALOGI("setting default compression format");
-            portFormat.eCompressionFormat = eCompressionFormat[0];
+            portFormat.eCompressionFormat = arrCompressionFormat[0];
         }
         portFormat.eColorFormat = OMX_COLOR_FormatUnused;
     }
     // In setParam call nIndex shall be ignored as per omx-il specification.
     // see how this holds up by corrupting nIndex
     portFormat.nIndex = RANDOM_INDEX;
-    portFormat.xFramerate = frameRate;
+    portFormat.xFramerate = xFramerate;
     status = setPortParam(omxNode, OMX_IndexParamVideoPortFormat, portIndex,
                           &portFormat);
     return status;
 }
 
+// get/set audio component port format
 Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
-    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE encoding) {
+    sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE eEncoding) {
     OMX_U32 index = 0;
     OMX_AUDIO_PARAM_PORTFORMATTYPE portFormat;
-    std::vector<OMX_AUDIO_CODINGTYPE> eEncoding;
+    std::vector<OMX_AUDIO_CODINGTYPE> arrEncoding;
     android::hardware::media::omx::V1_0::Status status;
 
     while (1) {
@@ -540,7 +532,7 @@
         status = getPortParam(omxNode, OMX_IndexParamAudioPortFormat, portIndex,
                               &portFormat);
         if (status != ::android::hardware::media::omx::V1_0::Status::OK) break;
-        eEncoding.push_back(portFormat.eEncoding);
+        arrEncoding.push_back(portFormat.eEncoding);
         index++;
         if (index == 512) {
             // enumerated way too many formats, highly unusual for this to
@@ -551,15 +543,15 @@
         }
     }
     if (!index) return status;
-    for (index = 0; index < eEncoding.size(); index++) {
-        if (eEncoding[index] == encoding) {
-            portFormat.eEncoding = eEncoding[index];
+    for (index = 0; index < arrEncoding.size(); index++) {
+        if (arrEncoding[index] == eEncoding) {
+            portFormat.eEncoding = arrEncoding[index];
             break;
         }
     }
-    if (index == eEncoding.size()) {
+    if (index == arrEncoding.size()) {
         ALOGI("setting default Port format");
-        portFormat.eEncoding = eEncoding[0];
+        portFormat.eEncoding = arrEncoding[0];
     }
     // In setParam call nIndex shall be ignored as per omx-il specification.
     // see how this holds up by corrupting nIndex
@@ -569,6 +561,7 @@
     return status;
 }
 
+// set component role
 Return<android::hardware::media::omx::V1_0::Status> setRole(
     sp<IOmxNode> omxNode, const char* role) {
     OMX_PARAM_COMPONENTROLETYPE params;
@@ -576,6 +569,7 @@
     return setParam(omxNode, OMX_IndexParamStandardComponentRole, &params);
 }
 
+// set component role
 TEST_F(ComponentHidlTest, SetRole) {
     description("Test Set Component Role");
     android::hardware::media::omx::V1_0::Status status;
@@ -583,8 +577,9 @@
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port indices enumeration
 TEST_F(ComponentHidlTest, GetPortIndices) {
-    description("Test Component on Mandatory Port Parameters (Port ID's)");
+    description("Test Component on Mandatory Port Parameters (Port Indices)");
     android::hardware::media::omx::V1_0::Status status;
     OMX_PORT_PARAM_TYPE params;
 
@@ -604,6 +599,7 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port format enumeration
 TEST_F(ComponentHidlTest, EnumeratePortFormat) {
     description("Test Component on Mandatory Port Parameters (Port Format)");
     android::hardware::media::omx::V1_0::Status status;
@@ -623,8 +619,8 @@
         kPortIndexOutput = kPortIndexInput + 1;
     }
 
-    OMX_COLOR_FORMATTYPE colorFormat = OMX_COLOR_FormatYUV420Planar;
-    OMX_U32 frameRate = 24 << 16;
+    OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
+    OMX_U32 xFramerate = 24U << 16;
 
     // Enumerate Port Format
     if (compClass == audio_encoder) {
@@ -644,7 +640,7 @@
     } else if (compClass == video_encoder) {
         status =
             setVideoPortFormat(omxNode, kPortIndexInput, OMX_VIDEO_CodingUnused,
-                               colorFormat, frameRate);
+                               eColorFormat, xFramerate);
         EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
         status = setVideoPortFormat(omxNode, kPortIndexOutput,
                                     OMX_VIDEO_CodingAutoDetect,
@@ -655,13 +651,14 @@
                                     OMX_VIDEO_CodingAutoDetect,
                                     OMX_COLOR_FormatUnused, 0U);
         EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
-        status =
-            setVideoPortFormat(omxNode, kPortIndexOutput,
-                               OMX_VIDEO_CodingUnused, colorFormat, frameRate);
+        status = setVideoPortFormat(omxNode, kPortIndexOutput,
+                                    OMX_VIDEO_CodingUnused, eColorFormat,
+                                    xFramerate);
         EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
     }
 }
 
+// get/set default port settings of a component
 TEST_F(ComponentHidlTest, SetDefaultPortParams) {
     description(
         "Test Component on Mandatory Port Parameters (Port Definition)");
@@ -700,11 +697,15 @@
                 status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
                                       kPortIndexInput, &iPortDef);
             }
-            EXPECT_EQ(status,
-                      ::android::hardware::media::omx::V1_0::Status::OK);
         } else if (compClass == video_encoder || compClass == video_decoder) {
             EXPECT_EQ(iPortDef.eDomain, OMX_PortDomainVideo);
+            if (compClass == video_decoder) {
+                iPortDef.format.video.bFlagErrorConcealment = OMX_TRUE;
+                status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
+                                      kPortIndexInput, &iPortDef);
+            }
         }
+        EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
         OMX_PARAM_PORTDEFINITIONTYPE dummy = iPortDef;
         iPortDef.nBufferCountActual = iPortDef.nBufferCountMin - 1;
         status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
@@ -748,11 +749,15 @@
                 status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
                                       kPortIndexOutput, &oPortDef);
             }
-            EXPECT_EQ(status,
-                      ::android::hardware::media::omx::V1_0::Status::OK);
         } else if (compClass == video_encoder || compClass == video_decoder) {
             EXPECT_EQ(oPortDef.eDomain, OMX_PortDomainVideo);
+            if (compClass == video_encoder) {
+                oPortDef.format.video.bFlagErrorConcealment = OMX_TRUE;
+                status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
+                                      kPortIndexOutput, &oPortDef);
+            }
         }
+        EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
         OMX_PARAM_PORTDEFINITIONTYPE dummy = oPortDef;
         oPortDef.nBufferCountActual = oPortDef.nBufferCountMin - 1;
         status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
@@ -780,6 +785,7 @@
     }
 }
 
+// populate port test
 TEST_F(ComponentHidlTest, PopulatePort) {
     description("Verify bPopulated field of a component port");
     android::hardware::media::omx::V1_0::Status status;
@@ -843,11 +849,12 @@
         getPortParam(omxNode, OMX_IndexParamPortDefinition, portBase, &portDef);
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
     // A port is populated when all of the buffers indicated by
-    // nBufferCountActual
-    // with a size of at least nBufferSizehave been allocated on the port.
+    // nBufferCountActual with a size of at least nBufferSizehave been
+    // allocated on the port.
     ASSERT_EQ(portDef.bPopulated, OMX_FALSE);
 }
 
+// Flush test
 TEST_F(ComponentHidlTest, Flush) {
     description("Test Flush");
     android::hardware::media::omx::V1_0::Status status;
@@ -896,8 +903,9 @@
                             kPortIndexInput, kPortIndexOutput);
 }
 
+// state transitions test
 TEST_F(ComponentHidlTest, StateTransitions) {
-    description("Test State Transitions");
+    description("Test State Transitions Loaded<->Idle<->Execute");
     android::hardware::media::omx::V1_0::Status status;
     uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
     Message msg;
@@ -942,6 +950,7 @@
                             kPortIndexInput, kPortIndexOutput);
 }
 
+// state transitions test - monkeying
 TEST_F(ComponentHidlTest, StateTransitions_M) {
     description("Test State Transitions monkeying");
     android::hardware::media::omx::V1_0::Status status;
@@ -1004,6 +1013,7 @@
                             kPortIndexInput, kPortIndexOutput);
 }
 
+// port enable disable test
 TEST_F(ComponentHidlTest, PortEnableDisable_Loaded) {
     description("Test Port Enable and Disable (Component State :: Loaded)");
     android::hardware::media::omx::V1_0::Status status;
@@ -1052,6 +1062,7 @@
     }
 }
 
+// port enable disable test
 TEST_F(ComponentHidlTest, PortEnableDisable_Idle) {
     description("Test Port Enable and Disable (Component State :: Idle)");
     android::hardware::media::omx::V1_0::Status status;
@@ -1145,6 +1156,7 @@
                             kPortIndexInput, kPortIndexOutput);
 }
 
+// port enable disable test
 TEST_F(ComponentHidlTest, PortEnableDisable_Execute) {
     description("Test Port Enable and Disable (Component State :: Execute)");
     android::hardware::media::omx::V1_0::Status status;
@@ -1252,6 +1264,7 @@
                             kPortIndexInput, kPortIndexOutput);
 }
 
+// port enable disable test - monkeying
 TEST_F(ComponentHidlTest, PortEnableDisable_M) {
     description(
         "Test Port Enable and Disable Monkeying (Component State :: Loaded)");
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
index a327c30..c1b0e62 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
@@ -51,7 +51,7 @@
     virtual void SetUp() {}
     virtual void TearDown() {}
 
-    ComponentTestEnvironment() : instance("default") {}
+    ComponentTestEnvironment() : instance("default"), res("/sdcard/media/") {}
 
     void setInstance(const char* _instance) { instance = _instance; }
 
@@ -59,7 +59,7 @@
 
     void setRole(const char* _role) { role = _role; }
 
-    void setQuirks(int _quirks) { quirks = _quirks; }
+    void setRes(const char* _res) { res = _res; }
 
     const hidl_string getInstance() const { return instance; }
 
@@ -67,19 +67,19 @@
 
     const hidl_string getRole() const { return role; }
 
-    int getQuirks() const { return quirks; }
+    const hidl_string getRes() const { return res; }
 
     int initFromOptions(int argc, char** argv) {
         static struct option options[] = {
             {"instance", required_argument, 0, 'I'},
             {"component", required_argument, 0, 'C'},
             {"role", required_argument, 0, 'R'},
-            {"quirks", required_argument, 0, 'Q'},
+            {"res", required_argument, 0, 'P'},
             {0, 0, 0, 0}};
 
         while (true) {
             int index = 0;
-            int c = getopt_long(argc, argv, "I:C:Q:R:", options, &index);
+            int c = getopt_long(argc, argv, "I:C:R:P:", options, &index);
             if (c == -1) {
                 break;
             }
@@ -91,12 +91,12 @@
                 case 'C':
                     setComponent(optarg);
                     break;
-                case 'Q':
-                    setQuirks(atoi(optarg));
-                    break;
                 case 'R':
                     setRole(optarg);
                     break;
+                case 'P':
+                    setRes(optarg);
+                    break;
                 case '?':
                     break;
             }
@@ -109,8 +109,8 @@
                     "test options are:\n\n"
                     "-I, --instance: HAL instance to test\n"
                     "-C, --component: OMX component to test\n"
-                    "-R, --Role: OMX component Role\n"
-                    "-Q, --quirks: Component quirks\n",
+                    "-R, --role: OMX component Role\n"
+                    "-P, --res: Resource files directory location\n",
                     argv[optind ?: 1], argv[0]);
             return 2;
         }
@@ -121,12 +121,12 @@
     hidl_string instance;
     hidl_string component;
     hidl_string role;
-    // to be removed when IOmxNode::setQuirks is removed
-    int quirks;
+    hidl_string res;
 };
 
 static ComponentTestEnvironment* gEnv = nullptr;
 
+// video decoder test fixture class
 class VideoDecHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    public:
     virtual void SetUp() override {
@@ -134,7 +134,8 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver();
+        observer =
+            new CodecObserver([this](Message msg) { handleMessage(msg); });
         ASSERT_NE(observer, nullptr);
         ASSERT_EQ(strncmp(gEnv->getComponent().c_str(), "OMX.", 4), 0)
             << "Invalid Component Name";
@@ -191,6 +192,10 @@
             }
         }
         ASSERT_NE(i, kNumCompToCompression);
+        eosFlag = false;
+        framesReceived = 0;
+        timestampUs = 0;
+        timestampDevTest = false;
     }
 
     virtual void TearDown() override {
@@ -200,6 +205,51 @@
         }
     }
 
+    // callback function to process messages received by onMessages() from IL
+    // client.
+    void handleMessage(Message msg) {
+        if (msg.type == Message::Type::FILL_BUFFER_DONE) {
+            if (msg.data.extendedBufferData.flags & OMX_BUFFERFLAG_EOS) {
+                eosFlag = true;
+            }
+            if (msg.data.extendedBufferData.rangeLength != 0) {
+                framesReceived += 1;
+                // For decoder components current timestamp always exceeds
+                // previous timestamp
+                EXPECT_GE(msg.data.extendedBufferData.timestampUs, timestampUs);
+                timestampUs = msg.data.extendedBufferData.timestampUs;
+                // Test if current timestamp is among the list of queued
+                // timestamps
+                if (timestampDevTest) {
+                    bool tsHit = false;
+                    android::List<uint64_t>::iterator it =
+                        timestampUslist.begin();
+                    while (it != timestampUslist.end()) {
+                        if (*it == timestampUs) {
+                            timestampUslist.erase(it);
+                            tsHit = true;
+                            break;
+                        }
+                        it++;
+                    }
+                    if (tsHit == false) {
+                        if (timestampUslist.empty() == false) {
+                            EXPECT_EQ(tsHit, true)
+                                << "TimeStamp not recognized";
+                        } else {
+                            std::cerr
+                                << "[          ] Warning ! Received non-zero "
+                                   "output / TimeStamp not recognized \n";
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    void testEOS(android::Vector<BufferInfo>* iBuffer,
+                 android::Vector<BufferInfo>* oBuffer, bool signalEOS = false);
+
     enum standardComp {
         h263,
         avc,
@@ -216,6 +266,11 @@
     sp<IOmxNode> omxNode;
     standardComp compName;
     OMX_VIDEO_CODINGTYPE eCompressionFormat;
+    bool eosFlag;
+    uint32_t framesReceived;
+    uint64_t timestampUs;
+    ::android::List<uint64_t> timestampUslist;
+    bool timestampDevTest;
 
    protected:
     static void description(const std::string& description) {
@@ -223,6 +278,44 @@
     }
 };
 
+// end of stream test for video decoder components
+void VideoDecHidlTest::testEOS(android::Vector<BufferInfo>* iBuffer,
+                               android::Vector<BufferInfo>* oBuffer,
+                               bool signalEOS) {
+    android::hardware::media::omx::V1_0::Status status;
+    size_t i = 0;
+    if (signalEOS) {
+        if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
+            // signal an empty buffer with flag set to EOS
+            dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0);
+        } else {
+            ASSERT_TRUE(false);
+        }
+    }
+    // Dispatch all client owned output buffers to recover remaining frames
+    while (1) {
+        if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, i);
+        } else {
+            break;
+        }
+    }
+    while (1) {
+        Message msg;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        EXPECT_EQ(status,
+                  android::hardware::media::omx::V1_0::Status::TIMED_OUT);
+        for (; i < iBuffer->size(); i++) {
+            if ((*iBuffer)[i].owner != client) break;
+        }
+        if (i == iBuffer->size()) break;
+    }
+    // test for flag
+    EXPECT_EQ(eosFlag, true);
+    eosFlag = false;
+}
+
 // Set Default port param.
 void setDefaultPortParam(sp<IOmxNode> omxNode, OMX_U32 portIndex,
                          OMX_VIDEO_CODINGTYPE eCompressionFormat,
@@ -264,8 +357,8 @@
 }
 
 // LookUpTable of clips and metadata for component testing
-void GetURLForComponent(VideoDecHidlTest::standardComp comp, const char** mURL,
-                        const char** info) {
+void GetURLForComponent(VideoDecHidlTest::standardComp comp, char* mURL,
+                        char* info) {
     struct CompToURL {
         VideoDecHidlTest::standardComp comp;
         const char* mURL;
@@ -273,20 +366,37 @@
     };
     static const CompToURL kCompToURL[] = {
         {VideoDecHidlTest::standardComp::avc,
-         "/sdcard/media/bbb_avc_1920x1080_5000kbps_30fps.h264",
-         "/sdcard/media/bbb_avc_1920x1080_5000kbps_30fps.info"},
+         "bbb_avc_1920x1080_5000kbps_30fps.h264",
+         "bbb_avc_1920x1080_5000kbps_30fps.info"},
+        {VideoDecHidlTest::standardComp::hevc,
+         "bbb_hevc_640x360_1600kbps_30fps.hevc",
+         "bbb_hevc_640x360_1600kbps_30fps.info"},
+        {VideoDecHidlTest::standardComp::mpeg2,
+         "bbb_mpeg2_176x144_105kbps_25fps.m2v",
+         "bbb_mpeg2_176x144_105kbps_25fps.info"},
+        {VideoDecHidlTest::standardComp::h263,
+         "bbb_h263_352x288_300kbps_12fps.h263",
+         "bbb_h263_352x288_300kbps_12fps.info"},
+        {VideoDecHidlTest::standardComp::mpeg4,
+         "bbb_mpeg4_1280x720_1000kbps_25fps.m4v",
+         "bbb_mpeg4_1280x720_1000kbps_25fps.info"},
+        {VideoDecHidlTest::standardComp::vp8, "bbb_vp8_640x360_2mbps_30fps.vp8",
+         "bbb_vp8_640x360_2mbps_30fps.info"},
+        {VideoDecHidlTest::standardComp::vp9,
+         "bbb_vp9_640x360_1600kbps_30fps.vp9",
+         "bbb_vp9_640x360_1600kbps_30fps.info"},
     };
 
-    *mURL = *info = nullptr;
     for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
         if (kCompToURL[i].comp == comp) {
-            *mURL = kCompToURL[i].mURL;
-            *info = kCompToURL[i].info;
+            strcat(mURL, kCompToURL[i].mURL);
+            strcat(info, kCompToURL[i].info);
             return;
         }
     }
 }
 
+// port settings reconfiguration during runtime. reconfigures frame dimensions
 void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                          android::Vector<BufferInfo>* iBuffer,
                          android::Vector<BufferInfo>* oBuffer,
@@ -382,13 +492,46 @@
     }
 }
 
+// blocking call to ensures application to Wait till all the inputs are consumed
+void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
+                            android::Vector<BufferInfo>* iBuffer,
+                            android::Vector<BufferInfo>* oBuffer,
+                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput) {
+    android::hardware::media::omx::V1_0::Status status;
+    Message msg;
+
+    while (1) {
+        size_t i = 0;
+        status =
+            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+        if (status == android::hardware::media::omx::V1_0::Status::OK) {
+            EXPECT_EQ(msg.type, Message::Type::EVENT);
+            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
+                                kPortIndexInput, kPortIndexOutput, msg);
+        }
+        // status == TIMED_OUT, it could be due to process time being large
+        // than DEFAULT_TIMEOUT or component needs output buffers to start
+        // processing.
+        for (; i < iBuffer->size(); i++) {
+            if ((*iBuffer)[i].owner != client) break;
+        }
+        if (i == iBuffer->size()) break;
+
+        // Dispatch an output buffer assuming outQueue.empty() is true
+        size_t index;
+        if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
+            dispatchOutputBuffer(omxNode, oBuffer, index);
+        }
+    }
+}
+
 // Decode N Frames
 void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                    android::Vector<BufferInfo>* iBuffer,
                    android::Vector<BufferInfo>* oBuffer,
                    OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
-                   uint32_t nFrames, std::ifstream& eleStream,
-                   std::ifstream& eleInfo) {
+                   std::ifstream& eleStream, android::Vector<FrameData>* Info,
+                   int offset, int range, bool signalEOS = true) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
@@ -397,24 +540,24 @@
         dispatchOutputBuffer(omxNode, oBuffer, i);
     }
     // dispatch input buffers
-    int bytesCount = 0;
-    uint32_t sampleflags = 0, flags = 0;
-    uint64_t timestamp = 0;
-    for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
+    uint32_t flags = 0;
+    int frameID = offset;
+    for (size_t i = 0; (i < iBuffer->size()) && (frameID < (int)Info->size()) &&
+                       (frameID < (offset + range));
+         i++) {
         char* ipBuffer = static_cast<char*>(
             static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
-        if (!(eleInfo >> bytesCount)) break;
-        ASSERT_LE(bytesCount,
+        ASSERT_LE((*Info)[frameID].bytesCount,
                   static_cast<int>((*iBuffer)[i].mMemory->getSize()));
-        eleStream.read(ipBuffer, bytesCount);
-        ASSERT_EQ(eleStream.gcount(), bytesCount);
-        eleInfo >> sampleflags;
-        eleInfo >> timestamp;
-        flags = 0;
-        // Map MediaExtractor flags to OMX Buffer flags
-        if (sampleflags & 1) flags |= OMX_BUFFERFLAG_SYNCFRAME;
-        dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, flags, timestamp);
-        nFrames--;
+        eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
+        ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
+        flags = (*Info)[frameID].flags;
+        if (signalEOS && ((frameID == (int)Info->size() - 1) ||
+                          (frameID == (offset + range - 1))))
+            flags |= OMX_BUFFERFLAG_EOS;
+        dispatchInputBuffer(omxNode, iBuffer, i, (*Info)[frameID].bytesCount,
+                            flags, (*Info)[frameID].timestamp);
+        frameID++;
     }
 
     while (1) {
@@ -428,26 +571,25 @@
                                 kPortIndexInput, kPortIndexOutput, msg);
         }
 
-        if (nFrames == 0) break;
+        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
 
         // Dispatch input buffer
         size_t index = 0;
         if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
             char* ipBuffer = static_cast<char*>(
                 static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
-            if (!(eleInfo >> bytesCount)) break;
-            ASSERT_LE(bytesCount,
+            ASSERT_LE((*Info)[frameID].bytesCount,
                       static_cast<int>((*iBuffer)[index].mMemory->getSize()));
-            eleStream.read(ipBuffer, bytesCount);
-            ASSERT_EQ(eleStream.gcount(), bytesCount);
-            eleInfo >> sampleflags;
-            eleInfo >> timestamp;
-            flags = 0;
-            // Map MediaExtractor flags to OMX Buffer flags
-            if (sampleflags & 1) flags |= OMX_BUFFERFLAG_SYNCFRAME;
-            dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags,
-                                timestamp);
-            nFrames--;
+            eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
+            ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
+            flags = (*Info)[frameID].flags;
+            if (signalEOS && ((frameID == (int)Info->size() - 1) ||
+                              (frameID == (offset + range - 1))))
+                flags |= OMX_BUFFERFLAG_EOS;
+            dispatchInputBuffer(omxNode, iBuffer, index,
+                                (*Info)[frameID].bytesCount, flags,
+                                (*Info)[frameID].timestamp);
+            frameID++;
         }
         if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
             dispatchOutputBuffer(omxNode, oBuffer, index);
@@ -455,6 +597,7 @@
     }
 }
 
+// set component role
 TEST_F(VideoDecHidlTest, SetRole) {
     description("Test Set Component Role");
     android::hardware::media::omx::V1_0::Status status;
@@ -462,6 +605,7 @@
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port format enumeration
 TEST_F(VideoDecHidlTest, EnumeratePortFormat) {
     description("Test Component on Mandatory Port Parameters (Port Format)");
     android::hardware::media::omx::V1_0::Status status;
@@ -486,8 +630,10 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// test port settings reconfiguration, elementary stream decode and timestamp
+// deviation
 TEST_F(VideoDecHidlTest, DecodeTest) {
-    description("Tests Port Reconfiguration and Decode");
+    description("Tests Port Reconfiguration, Decode and timestamp deviation");
     android::hardware::media::omx::V1_0::Status status;
     uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
     status = setRole(omxNode, gEnv->getRole().c_str());
@@ -499,16 +645,29 @@
         kPortIndexInput = params.nStartPortNumber;
         kPortIndexOutput = kPortIndexInput + 1;
     }
-    const char *mURL = nullptr, *info = nullptr;
-    GetURLForComponent(compName, &mURL, &info);
-    EXPECT_NE(mURL, nullptr);
-    EXPECT_NE(info, nullptr);
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
 
     std::ifstream eleStream, eleInfo;
-    eleStream.open(mURL, std::ifstream::binary);
-    ASSERT_EQ(eleStream.is_open(), true);
+
     eleInfo.open(info);
     ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    timestampDevTest = true;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+        if (flags != OMX_BUFFERFLAG_CODECCONFIG)
+            timestampUslist.push_back(timestamp);
+    }
+    eleInfo.close();
 
     // set Port Params
     uint32_t nFrameWidth, nFrameHeight, xFramerate;
@@ -526,16 +685,225 @@
     // set state to executing
     changeStateIdletoExecute(omxNode, observer);
     // Port Reconfiguration
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
     decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
-                  kPortIndexOutput, 1024, eleStream, eleInfo);
+                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size());
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    EXPECT_EQ(timestampUslist.empty(), true);
     // set state to idle
     changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
     // set state to executing
     changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                             kPortIndexInput, kPortIndexOutput);
+}
 
+// end of sequence test
+TEST_F(VideoDecHidlTest, EOSTest) {
+    description("Test End of stream");
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamVideoInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
+
+    std::ifstream eleStream, eleInfo;
+
+    eleInfo.open(info);
+    ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+    }
     eleInfo.close();
+
+    // set Port Params
+    uint32_t nFrameWidth, nFrameHeight, xFramerate;
+    OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
+    getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+                        &xFramerate);
+    setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+                        eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    // request EOS at the start
+    testEOS(&iBuffer, &oBuffer, true);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 0U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // request EOS for thumbnail
+    size_t i = 0;
+    while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++;
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+                  kPortIndexOutput, eleStream, &Info, 0, i + 1);
     eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 1U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+                  kPortIndexOutput, eleStream, &Info, 0, i + 1, false);
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer, true);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    EXPECT_GE(framesReceived, 1U);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // request EOS at the end
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+                  kPortIndexOutput, eleStream, &Info, 0, (int)Info.size());
+    eleStream.close();
+    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
+                           kPortIndexInput, kPortIndexOutput);
+    testEOS(&iBuffer, &oBuffer);
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput);
+    framesReceived = 0;
+    timestampUs = 0;
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+}
+
+// test input/output port flush
+TEST_F(VideoDecHidlTest, FlushTest) {
+    description("Test Flush");
+    android::hardware::media::omx::V1_0::Status status;
+    uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+    status = setRole(omxNode, gEnv->getRole().c_str());
+    ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+    OMX_PORT_PARAM_TYPE params;
+    status = getParam(omxNode, OMX_IndexParamVideoInit, &params);
+    if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+        ASSERT_EQ(params.nPorts, 2U);
+        kPortIndexInput = params.nStartPortNumber;
+        kPortIndexOutput = kPortIndexInput + 1;
+    }
+    char mURL[512], info[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    strcpy(info, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL, info);
+
+    std::ifstream eleStream, eleInfo;
+
+    eleInfo.open(info);
+    ASSERT_EQ(eleInfo.is_open(), true);
+    android::Vector<FrameData> Info;
+    int bytesCount = 0;
+    uint32_t flags = 0;
+    uint32_t timestamp = 0;
+    while (1) {
+        if (!(eleInfo >> bytesCount)) break;
+        eleInfo >> flags;
+        eleInfo >> timestamp;
+        Info.push_back({bytesCount, flags, timestamp});
+    }
+    eleInfo.close();
+
+    // set Port Params
+    uint32_t nFrameWidth, nFrameHeight, xFramerate;
+    OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
+    getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+                        &xFramerate);
+    setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+                        eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
+    android::Vector<BufferInfo> iBuffer, oBuffer;
+
+    // set state to idle
+    changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
+    // set state to executing
+    changeStateIdletoExecute(omxNode, observer);
+
+    // Decode 128 frames and flush. here 128 is chosen to ensure there is a key
+    // frame after this so that the below section can be convered for all
+    // components
+    int nFrames = 128;
+    eleStream.open(mURL, std::ifstream::binary);
+    ASSERT_EQ(eleStream.is_open(), true);
+    decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+                  kPortIndexOutput, eleStream, &Info, 0, nFrames, false);
+    // Note: Assumes 200 ms is enough to end any decode call that started
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput, 200000);
+    framesReceived = 0;
+
+    // Seek to next key frame and start decoding till the end
+    int index = nFrames;
+    bool keyFrame = false;
+    while (index < (int)Info.size()) {
+        if ((Info[index].flags & OMX_BUFFERFLAG_SYNCFRAME) ==
+            OMX_BUFFERFLAG_SYNCFRAME) {
+            timestampUs = Info[index - 1].timestamp;
+            keyFrame = true;
+            break;
+        }
+        eleStream.ignore(Info[index].bytesCount);
+        index++;
+    }
+    if (keyFrame) {
+        decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+                      kPortIndexOutput, eleStream, &Info, index,
+                      Info.size() - index, false);
+    }
+    // Note: Assumes 200 ms is enough to end any decode call that started
+    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+               kPortIndexOutput, 200000);
+    framesReceived = 0;
+
+    // set state to idle
+    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+    // set state to executing
+    changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+                            kPortIndexInput, kPortIndexOutput);
 }
 
 int main(int argc, char** argv) {
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
index edd3d8c..72893b8 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
@@ -51,7 +51,7 @@
     virtual void SetUp() {}
     virtual void TearDown() {}
 
-    ComponentTestEnvironment() : instance("default") {}
+    ComponentTestEnvironment() : instance("default"), res("/sdcard/media/") {}
 
     void setInstance(const char* _instance) { instance = _instance; }
 
@@ -59,7 +59,7 @@
 
     void setRole(const char* _role) { role = _role; }
 
-    void setQuirks(int _quirks) { quirks = _quirks; }
+    void setRes(const char* _res) { res = _res; }
 
     const hidl_string getInstance() const { return instance; }
 
@@ -67,19 +67,19 @@
 
     const hidl_string getRole() const { return role; }
 
-    int getQuirks() const { return quirks; }
+    const hidl_string getRes() const { return res; }
 
     int initFromOptions(int argc, char** argv) {
         static struct option options[] = {
             {"instance", required_argument, 0, 'I'},
             {"component", required_argument, 0, 'C'},
             {"role", required_argument, 0, 'R'},
-            {"quirks", required_argument, 0, 'Q'},
+            {"res", required_argument, 0, 'P'},
             {0, 0, 0, 0}};
 
         while (true) {
             int index = 0;
-            int c = getopt_long(argc, argv, "I:C:Q:R:", options, &index);
+            int c = getopt_long(argc, argv, "I:C:R:P:", options, &index);
             if (c == -1) {
                 break;
             }
@@ -91,12 +91,12 @@
                 case 'C':
                     setComponent(optarg);
                     break;
-                case 'Q':
-                    setQuirks(atoi(optarg));
-                    break;
                 case 'R':
                     setRole(optarg);
                     break;
+                case 'P':
+                    setRes(optarg);
+                    break;
                 case '?':
                     break;
             }
@@ -109,8 +109,8 @@
                     "test options are:\n\n"
                     "-I, --instance: HAL instance to test\n"
                     "-C, --component: OMX component to test\n"
-                    "-R, --Role: OMX component Role\n"
-                    "-Q, --quirks: Component quirks\n",
+                    "-R, --role: OMX component Role\n"
+                    "-P, --res: Resource files directory location\n",
                     argv[optind ?: 1], argv[0]);
             return 2;
         }
@@ -121,12 +121,12 @@
     hidl_string instance;
     hidl_string component;
     hidl_string role;
-    // to be removed when IOmxNode::setQuirks is removed
-    int quirks;
+    hidl_string res;
 };
 
 static ComponentTestEnvironment* gEnv = nullptr;
 
+// video encoder test fixture class
 class VideoEncHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    public:
     virtual void SetUp() override {
@@ -134,7 +134,7 @@
         omx = ::testing::VtsHalHidlTargetTestBase::getService<IOmx>(
             gEnv->getInstance());
         ASSERT_NE(omx, nullptr);
-        observer = new CodecObserver();
+        observer = new CodecObserver([this](Message msg) { (void)msg; });
         ASSERT_NE(observer, nullptr);
         ASSERT_EQ(strncmp(gEnv->getComponent().c_str(), "OMX.", 4), 0)
             << "Invalid Component Name";
@@ -252,21 +252,19 @@
 }
 
 // LookUpTable of clips and metadata for component testing
-void GetURLForComponent(VideoEncHidlTest::standardComp comp,
-                        const char** mURL) {
+void GetURLForComponent(VideoEncHidlTest::standardComp comp, char* mURL) {
     struct CompToURL {
         VideoEncHidlTest::standardComp comp;
         const char* mURL;
     };
     static const CompToURL kCompToURL[] = {
         {VideoEncHidlTest::standardComp::avc,
-         "/sdcard/media/bbb_480x360_420p_30fps_32frames.yuv"},
+         "bbb_480x360_420p_30fps_32frames.yuv"},
     };
 
-    *mURL = nullptr;
     for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
         if (kCompToURL[i].comp == comp) {
-            *mURL = kCompToURL[i].mURL;
+            strcat(mURL, kCompToURL[i].mURL);
             return;
         }
     }
@@ -328,6 +326,7 @@
     }
 }
 
+// set component role
 TEST_F(VideoEncHidlTest, SetRole) {
     description("Test Set Component Role");
     android::hardware::media::omx::V1_0::Status status;
@@ -335,6 +334,7 @@
     ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// port format enumeration
 TEST_F(VideoEncHidlTest, EnumeratePortFormat) {
     description("Test Component on Mandatory Port Parameters (Port Format)");
     android::hardware::media::omx::V1_0::Status status;
@@ -360,6 +360,7 @@
     EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
 }
 
+// test raw stream encode
 TEST_F(VideoEncHidlTest, EncodeTest) {
     description("Test Encode");
     android::hardware::media::omx::V1_0::Status status;
@@ -373,9 +374,9 @@
         kPortIndexInput = params.nStartPortNumber;
         kPortIndexOutput = kPortIndexInput + 1;
     }
-    const char* mURL = nullptr;
-    GetURLForComponent(compName, &mURL);
-    EXPECT_NE(mURL, nullptr);
+    char mURL[512];
+    strcpy(mURL, gEnv->getRes().c_str());
+    GetURLForComponent(compName, mURL);
 
     std::ifstream eleStream;
     eleStream.open(mURL, std::ifstream::binary);
diff --git a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
index fa71080..d3c7f58 100644
--- a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
@@ -281,7 +281,7 @@
 void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                 android::Vector<BufferInfo>* iBuffer,
                 android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput) {
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs) {
     android::hardware::media::omx::V1_0::Status status;
     Message msg;
 
@@ -289,7 +289,7 @@
     status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
                                   kPortIndexInput);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
     ASSERT_EQ(msg.type, Message::Type::EVENT);
     ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
@@ -304,7 +304,7 @@
     status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
                                   kPortIndexOutput);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
-    status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
+    status = observer->dequeueMessage(&msg, timeoutUs, iBuffer, oBuffer);
     ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
     ASSERT_EQ(msg.type, Message::Type::EVENT);
     ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
diff --git a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
index 65b87c0..406ba73 100644
--- a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.h
@@ -59,7 +59,7 @@
 void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                 android::Vector<BufferInfo>* iBuffer,
                 android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
-                OMX_U32 kPortIndexOutput);
+                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
 
 Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
     sp<IOmxNode> omxNode, OMX_U32 portIndex,
diff --git a/media/res/bbb_avc_1920x1080_5000kbps_30fps.info b/media/res/bbb_avc_1920x1080_5000kbps_30fps.info
index 2f9faef..feaf974 100644
--- a/media/res/bbb_avc_1920x1080_5000kbps_30fps.info
+++ b/media/res/bbb_avc_1920x1080_5000kbps_30fps.info
@@ -1,6 +1,6 @@
-31 0 0
-8 0 0
-481702 1 0
+31 128 0
+8 128 0
+481702 32 0
 137895 0 33333
 81863 0 100000
 98914 0 133333
@@ -44,7 +44,7 @@
 4028 0 1700000
 2303 0 1766666
 845 0 1800000
-191414 1 1833333
+191414 32 1833333
 13266 0 1866666
 16120 0 1933333
 19751 0 1966666
@@ -137,7 +137,7 @@
 10305 0 5600000
 10120 0 5633333
 7706 0 5666666
-112698 1 5700000
+112698 32 5700000
 1544 0 5766666
 1285 0 5800000
 1576 0 5833333
diff --git a/media/res/bbb_h263_352x288_300kbps_12fps.h263 b/media/res/bbb_h263_352x288_300kbps_12fps.h263
new file mode 100644
index 0000000..652581f
--- /dev/null
+++ b/media/res/bbb_h263_352x288_300kbps_12fps.h263
Binary files differ
diff --git a/media/res/bbb_h263_352x288_300kbps_12fps.info b/media/res/bbb_h263_352x288_300kbps_12fps.info
new file mode 100644
index 0000000..66873d4
--- /dev/null
+++ b/media/res/bbb_h263_352x288_300kbps_12fps.info
@@ -0,0 +1,122 @@
+26362 32 0
+12023 0 83333
+10647 0 166666
+10269 0 250000
+11076 0 333333
+11104 0 416666
+5909 0 500000
+4291 0 583333
+5149 0 666666
+5353 0 750000
+5185 0 833333
+2736 0 916666
+21575 32 1000000
+2196 0 1083333
+4340 0 1166666
+3109 0 1250000
+4410 0 1333333
+1731 0 1416666
+4557 0 1500000
+3376 0 1583333
+1352 0 1666666
+2844 0 1750000
+1787 0 1833333
+1088 0 1916666
+36843 32 2000000
+2520 0 2083333
+3749 0 2166666
+3784 0 2250000
+3402 0 2333333
+3795 0 2416666
+2345 0 2500000
+3142 0 2583333
+2948 0 2666666
+2018 0 2750000
+5133 0 2833333
+2276 0 2916666
+23468 32 3000000
+1522 0 3083333
+2299 0 3166666
+3273 0 3250000
+2630 0 3333333
+2915 0 3416666
+3032 0 3500000
+1890 0 3583333
+3718 0 3666666
+1990 0 3750000
+3139 0 3833333
+1806 0 3916666
+23208 32 4000000
+1419 0 4083333
+2263 0 4166666
+3131 0 4250000
+2645 0 4333333
+1880 0 4416666
+2239 0 4500000
+3637 0 4583333
+1941 0 4666666
+1577 0 4750000
+3777 0 4833333
+1816 0 4916666
+19601 32 5000000
+1104 0 5083333
+2808 0 5166666
+2411 0 5250000
+2159 0 5333333
+2411 0 5416666
+2408 0 5500000
+2388 0 5583333
+2418 0 5666666
+1481 0 5750000
+1926 0 5833333
+9022 32 5916666
+292 0 6000000
+701 0 6083333
+747 0 6166666
+2059 0 6250000
+1693 0 6333333
+2078 0 6416666
+2975 0 6500000
+1317 0 6583333
+1742 0 6666666
+1019 0 6750000
+1053 0 6833333
+14183 32 6916666
+1467 0 7000000
+994 0 7083333
+1709 0 7166666
+838 0 7250000
+1328 0 7333333
+2292 0 7416666
+1829 0 7500000
+1728 0 7583333
+2436 0 7666666
+1852 0 7750000
+2190 0 7833333
+15167 32 7916666
+1188 0 8000000
+2070 0 8083333
+3316 0 8166666
+2636 0 8250000
+950 0 8333333
+1260 0 8416666
+906 0 8500000
+1294 0 8583333
+1298 0 8666666
+1897 0 8750000
+1348 0 8833333
+13194 32 8916666
+1042 0 9000000
+1258 0 9083333
+1457 0 9166666
+990 0 9250000
+900 0 9333333
+963 0 9416666
+3448 0 9500000
+774 0 9583333
+1075 0 9666666
+750 0 9750000
+1054 0 9833333
+13139 32 9916666
+3104 0 10000000
+3366 0 10083333
diff --git a/media/res/bbb_hevc_640x360_1600kbps_30fps.hevc b/media/res/bbb_hevc_640x360_1600kbps_30fps.hevc
new file mode 100644
index 0000000..651f7cf
--- /dev/null
+++ b/media/res/bbb_hevc_640x360_1600kbps_30fps.hevc
Binary files differ
diff --git a/media/res/bbb_hevc_640x360_1600kbps_30fps.info b/media/res/bbb_hevc_640x360_1600kbps_30fps.info
new file mode 100644
index 0000000..69e5554
--- /dev/null
+++ b/media/res/bbb_hevc_640x360_1600kbps_30fps.info
@@ -0,0 +1,302 @@
+1075 128 0
+1075 128 0
+68613 32 66687
+19025 0 199687
+2405 0 133687
+777 0 99687
+681 0 166687
+20254 0 333687
+2927 0 266687
+766 0 233687
+658 0 299687
+20786 0 466687
+4214 0 399687
+609 0 366687
+661 0 433687
+20838 0 599687
+4209 0 533687
+506 0 499687
+586 0 566687
+20415 0 733687
+4207 0 666687
+427 0 633687
+514 0 699687
+24457 0 899687
+1904 0 833687
+921 0 766687
+992 0 799687
+543 0 866687
+24342 0 1066687
+1822 0 999687
+840 0 933687
+892 0 966687
+715 0 1033687
+22893 0 1233687
+1618 0 1166687
+881 0 1099687
+890 0 1133687
+794 0 1199687
+24292 0 1399687
+1673 0 1333687
+755 0 1266687
+810 0 1299687
+588 0 1366687
+19828 0 1533687
+1538 0 1466687
+894 0 1433687
+933 0 1499687
+19853 0 1666687
+2011 0 1599687
+981 0 1566687
+900 0 1633687
+22869 0 1833687
+1562 0 1766687
+842 0 1699687
+765 0 1733687
+665 0 1799687
+22346 0 1966687
+2245 0 1899687
+516 0 1866687
+604 0 1933687
+24333 0 2099687
+1765 0 2033687
+318 0 1999687
+320 0 2066687
+18577 0 2199687
+1123 0 2166687
+337 0 2133687
+17509 0 2299687
+869 0 2266687
+901 0 2233687
+23366 0 2433687
+1217 0 2366687
+380 0 2333687
+347 0 2399687
+19542 0 2533687
+1887 0 2499687
+467 0 2466687
+18939 0 2666687
+2863 0 2599687
+317 0 2566687
+272 0 2633687
+19353 0 2799687
+2092 0 2733687
+203 0 2699687
+310 0 2766687
+18800 0 2933687
+2038 0 2866687
+242 0 2833687
+199 0 2899687
+17452 0 3099687
+1060 0 3033687
+301 0 2966687
+452 0 2999687
+256 0 3066687
+21352 0 3199687
+409 0 3166687
+173 0 3133687
+19142 0 3299687
+642 0 3266687
+468 0 3233687
+19066 0 3433687
+635 0 3366687
+197 0 3333687
+190 0 3399687
+18813 0 3566687
+969 0 3499687
+165 0 3466687
+203 0 3533687
+17362 0 3733687
+246 0 3666687
+236 0 3599687
+174 0 3633687
+164 0 3699687
+17081 0 3899687
+353 0 3833687
+222 0 3766687
+181 0 3799687
+148 0 3866687
+10835 0 3999687
+185 0 3966687
+139 0 3933687
+7510 0 4133687
+149 0 4066687
+129 0 4033687
+132 0 4099687
+1063 0 4166687
+805 0 4266687
+157 0 4233687
+394 0 4199687
+90840 0 4399687
+6159 0 4333687
+1752 0 4299687
+985 0 4366687
+31338 0 4533687
+3390 0 4466687
+772 0 4433687
+781 0 4499687
+31084 0 4666687
+3498 0 4599687
+818 0 4566687
+881 0 4633687
+30416 0 4799687
+3265 0 4733687
+815 0 4699687
+790 0 4766687
+31053 0 4933687
+3106 0 4866687
+708 0 4833687
+713 0 4899687
+30230 0 5066687
+3214 0 4999687
+639 0 4966687
+768 0 5033687
+29657 0 5199687
+3013 0 5133687
+622 0 5099687
+720 0 5166687
+29344 0 5333687
+3196 0 5266687
+713 0 5233687
+775 0 5299687
+30420 0 5466687
+3374 0 5399687
+803 0 5366687
+717 0 5433687
+29960 0 5599687
+3283 0 5533687
+793 0 5499687
+790 0 5566687
+31011 0 5733687
+3397 0 5666687
+809 0 5633687
+831 0 5699687
+31194 0 5866687
+3401 0 5799687
+807 0 5766687
+827 0 5833687
+30326 0 5999687
+3186 0 5933687
+818 0 5899687
+863 0 5966687
+31559 0 6133687
+3364 0 6066687
+840 0 6033687
+919 0 6099687
+32013 0 6266687
+3495 0 6199687
+871 0 6166687
+803 0 6233687
+30294 0 6399687
+3153 0 6333687
+716 0 6299687
+812 0 6366687
+29952 0 6533687
+3299 0 6466687
+801 0 6433687
+749 0 6499687
+30598 0 6666687
+3536 0 6599687
+887 0 6566687
+850 0 6633687
+17246 0 6699687
+31110 0 6833687
+3198 0 6766687
+809 0 6733687
+836 0 6799687
+29784 0 6966687
+3155 0 6899687
+859 0 6866687
+958 0 6933687
+30666 0 7099687
+3371 0 7033687
+886 0 6999687
+861 0 7066687
+30416 0 7233687
+3350 0 7166687
+917 0 7133687
+987 0 7199687
+29509 0 7366687
+3574 0 7299687
+972 0 7266687
+885 0 7333687
+30872 0 7499687
+3399 0 7433687
+898 0 7399687
+1027 0 7466687
+31155 0 7633687
+3454 0 7566687
+965 0 7533687
+841 0 7599687
+28487 0 7766687
+3616 0 7699687
+921 0 7666687
+991 0 7733687
+23208 0 7899687
+3551 0 7833687
+918 0 7799687
+894 0 7866687
+16982 0 8033687
+3458 0 7966687
+844 0 7933687
+943 0 7999687
+30396 0 8199687
+4963 0 8133687
+1416 0 8066687
+1639 0 8099687
+524 0 8166687
+1368 0 8299687
+565 0 8266687
+392 0 8233687
+41317 32 8399687
+185 0 8366687
+477 0 8333687
+5342 0 8533687
+1275 0 8466687
+121 0 8433687
+982 0 8499687
+6465 0 8699687
+2606 0 8633687
+1163 0 8566687
+943 0 8599687
+1186 0 8666687
+11593 0 8833687
+3122 0 8766687
+1278 0 8733687
+1593 0 8799687
+9099 0 8999687
+978 0 8933687
+748 0 8866687
+835 0 8899687
+364 0 8966687
+4799 0 9099687
+365 0 9066687
+215 0 9033687
+4367 0 9199687
+302 0 9166687
+480 0 9133687
+6180 0 9333687
+771 0 9266687
+246 0 9233687
+281 0 9299687
+4636 0 9399687
+211 0 9366687
+4037 0 9499687
+382 0 9466687
+486 0 9433687
+3975 0 9599687
+312 0 9566687
+474 0 9533687
+6880 0 9733687
+1116 0 9666687
+206 0 9633687
+698 0 9699687
+6254 0 9899687
+2581 0 9833687
+1303 0 9766687
+985 0 9799687
+967 0 9866687
+6486 0 10033687
+3555 0 9966687
+1430 0 9933687
+1605 0 9999687
diff --git a/media/res/bbb_mp3_stereo_192kbps_48000hz.info b/media/res/bbb_mp3_stereo_192kbps_48000hz.info
index 21fbfd4..00c4869 100644
--- a/media/res/bbb_mp3_stereo_192kbps_48000hz.info
+++ b/media/res/bbb_mp3_stereo_192kbps_48000hz.info
@@ -1,414 +1,414 @@
-576 1 0
-576 1 24000
-576 1 48000
-576 1 72000
-576 1 96000
-576 1 120000
-576 1 144000
-576 1 168000
-576 1 192000
-576 1 216000
-576 1 240000
-576 1 264000
-576 1 288000
-576 1 312000
-576 1 336000
-576 1 360000
-576 1 384000
-576 1 408000
-576 1 432000
-576 1 456000
-576 1 480000
-576 1 504000
-576 1 528000
-576 1 552000
-576 1 576000
-576 1 600000
-576 1 624000
-576 1 648000
-576 1 672000
-576 1 696000
-576 1 720000
-576 1 744000
-576 1 768000
-576 1 792000
-576 1 816000
-576 1 840000
-576 1 864000
-576 1 888000
-576 1 912000
-576 1 936000
-576 1 960000
-576 1 984000
-576 1 1008000
-576 1 1032000
-576 1 1056000
-576 1 1080000
-576 1 1104000
-576 1 1128000
-576 1 1152000
-576 1 1176000
-576 1 1200000
-576 1 1224000
-576 1 1248000
-576 1 1272000
-576 1 1296000
-576 1 1320000
-576 1 1344000
-576 1 1368000
-576 1 1392000
-576 1 1416000
-576 1 1440000
-576 1 1464000
-576 1 1488000
-576 1 1512000
-576 1 1536000
-576 1 1560000
-576 1 1584000
-576 1 1608000
-576 1 1632000
-576 1 1656000
-576 1 1680000
-576 1 1704000
-576 1 1728000
-576 1 1752000
-576 1 1776000
-576 1 1800000
-576 1 1824000
-576 1 1848000
-576 1 1872000
-576 1 1896000
-576 1 1920000
-576 1 1944000
-576 1 1968000
-576 1 1992000
-576 1 2016000
-576 1 2040000
-576 1 2064000
-576 1 2088000
-576 1 2112000
-576 1 2136000
-576 1 2160000
-576 1 2184000
-576 1 2208000
-576 1 2232000
-576 1 2256000
-576 1 2280000
-576 1 2304000
-576 1 2328000
-576 1 2352000
-576 1 2376000
-576 1 2400000
-576 1 2424000
-576 1 2448000
-576 1 2472000
-576 1 2496000
-576 1 2520000
-576 1 2544000
-576 1 2568000
-576 1 2592000
-576 1 2616000
-576 1 2640000
-576 1 2664000
-576 1 2688000
-576 1 2712000
-576 1 2736000
-576 1 2760000
-576 1 2784000
-576 1 2808000
-576 1 2832000
-576 1 2856000
-576 1 2880000
-576 1 2904000
-576 1 2928000
-576 1 2952000
-576 1 2976000
-576 1 3000000
-576 1 3024000
-576 1 3048000
-576 1 3072000
-576 1 3096000
-576 1 3120000
-576 1 3144000
-576 1 3168000
-576 1 3192000
-576 1 3216000
-576 1 3240000
-576 1 3264000
-576 1 3288000
-576 1 3312000
-576 1 3336000
-576 1 3360000
-576 1 3384000
-576 1 3408000
-576 1 3432000
-576 1 3456000
-576 1 3480000
-576 1 3504000
-576 1 3528000
-576 1 3552000
-576 1 3576000
-576 1 3600000
-576 1 3624000
-576 1 3648000
-576 1 3672000
-576 1 3696000
-576 1 3720000
-576 1 3744000
-576 1 3768000
-576 1 3792000
-576 1 3816000
-576 1 3840000
-576 1 3864000
-576 1 3888000
-576 1 3912000
-576 1 3936000
-576 1 3960000
-576 1 3984000
-576 1 4008000
-576 1 4032000
-576 1 4056000
-576 1 4080000
-576 1 4104000
-576 1 4128000
-576 1 4152000
-576 1 4176000
-576 1 4200000
-576 1 4224000
-576 1 4248000
-576 1 4272000
-576 1 4296000
-576 1 4320000
-576 1 4344000
-576 1 4368000
-576 1 4392000
-576 1 4416000
-576 1 4440000
-576 1 4464000
-576 1 4488000
-576 1 4512000
-576 1 4536000
-576 1 4560000
-576 1 4584000
-576 1 4608000
-576 1 4632000
-576 1 4656000
-576 1 4680000
-576 1 4704000
-576 1 4728000
-576 1 4752000
-576 1 4776000
-576 1 4800000
-576 1 4824000
-576 1 4848000
-576 1 4872000
-576 1 4896000
-576 1 4920000
-576 1 4944000
-576 1 4968000
-576 1 4992000
-576 1 5016000
-576 1 5040000
-576 1 5064000
-576 1 5088000
-576 1 5112000
-576 1 5136000
-576 1 5160000
-576 1 5184000
-576 1 5208000
-576 1 5232000
-576 1 5256000
-576 1 5280000
-576 1 5304000
-576 1 5328000
-576 1 5352000
-576 1 5376000
-576 1 5400000
-576 1 5424000
-576 1 5448000
-576 1 5472000
-576 1 5496000
-576 1 5520000
-576 1 5544000
-576 1 5568000
-576 1 5592000
-576 1 5616000
-576 1 5640000
-576 1 5664000
-576 1 5688000
-576 1 5712000
-576 1 5736000
-576 1 5760000
-576 1 5784000
-576 1 5808000
-576 1 5832000
-576 1 5856000
-576 1 5880000
-576 1 5904000
-576 1 5928000
-576 1 5952000
-576 1 5976000
-576 1 6000000
-576 1 6024000
-576 1 6048000
-576 1 6072000
-576 1 6096000
-576 1 6120000
-576 1 6144000
-576 1 6168000
-576 1 6192000
-576 1 6216000
-576 1 6240000
-576 1 6264000
-576 1 6288000
-576 1 6312000
-576 1 6336000
-576 1 6360000
-576 1 6384000
-576 1 6408000
-576 1 6432000
-576 1 6456000
-576 1 6480000
-576 1 6504000
-576 1 6528000
-576 1 6552000
-576 1 6576000
-576 1 6600000
-576 1 6624000
-576 1 6648000
-576 1 6672000
-576 1 6696000
-576 1 6720000
-576 1 6744000
-576 1 6768000
-576 1 6792000
-576 1 6816000
-576 1 6840000
-576 1 6864000
-576 1 6888000
-576 1 6912000
-576 1 6936000
-576 1 6960000
-576 1 6984000
-576 1 7008000
-576 1 7032000
-576 1 7056000
-576 1 7080000
-576 1 7104000
-576 1 7128000
-576 1 7152000
-576 1 7176000
-576 1 7200000
-576 1 7224000
-576 1 7248000
-576 1 7272000
-576 1 7296000
-576 1 7320000
-576 1 7344000
-576 1 7368000
-576 1 7392000
-576 1 7416000
-576 1 7440000
-576 1 7464000
-576 1 7488000
-576 1 7512000
-576 1 7536000
-576 1 7560000
-576 1 7584000
-576 1 7608000
-576 1 7632000
-576 1 7656000
-576 1 7680000
-576 1 7704000
-576 1 7728000
-576 1 7752000
-576 1 7776000
-576 1 7800000
-576 1 7824000
-576 1 7848000
-576 1 7872000
-576 1 7896000
-576 1 7920000
-576 1 7944000
-576 1 7968000
-576 1 7992000
-576 1 8016000
-576 1 8040000
-576 1 8064000
-576 1 8088000
-576 1 8112000
-576 1 8136000
-576 1 8160000
-576 1 8184000
-576 1 8208000
-576 1 8232000
-576 1 8256000
-576 1 8280000
-576 1 8304000
-576 1 8328000
-576 1 8352000
-576 1 8376000
-576 1 8400000
-576 1 8424000
-576 1 8448000
-576 1 8472000
-576 1 8496000
-576 1 8520000
-576 1 8544000
-576 1 8568000
-576 1 8592000
-576 1 8616000
-576 1 8640000
-576 1 8664000
-576 1 8688000
-576 1 8712000
-576 1 8736000
-576 1 8760000
-576 1 8784000
-576 1 8808000
-576 1 8832000
-576 1 8856000
-576 1 8880000
-576 1 8904000
-576 1 8928000
-576 1 8952000
-576 1 8976000
-576 1 9000000
-576 1 9024000
-576 1 9048000
-576 1 9072000
-576 1 9096000
-576 1 9120000
-576 1 9144000
-576 1 9168000
-576 1 9192000
-576 1 9216000
-576 1 9240000
-576 1 9264000
-576 1 9288000
-576 1 9312000
-576 1 9336000
-576 1 9360000
-576 1 9384000
-576 1 9408000
-576 1 9432000
-576 1 9456000
-576 1 9480000
-576 1 9504000
-576 1 9528000
-576 1 9552000
-576 1 9576000
-576 1 9600000
-576 1 9624000
-576 1 9648000
-576 1 9672000
-576 1 9696000
-576 1 9720000
-576 1 9744000
-576 1 9768000
-576 1 9792000
-576 1 9816000
-576 1 9840000
-576 1 9864000
-576 1 9888000
-576 1 9912000
+576 32 0
+576 32 24000
+576 32 48000
+576 32 72000
+576 32 96000
+576 32 120000
+576 32 144000
+576 32 168000
+576 32 192000
+576 32 216000
+576 32 240000
+576 32 264000
+576 32 288000
+576 32 312000
+576 32 336000
+576 32 360000
+576 32 384000
+576 32 408000
+576 32 432000
+576 32 456000
+576 32 480000
+576 32 504000
+576 32 528000
+576 32 552000
+576 32 576000
+576 32 600000
+576 32 624000
+576 32 648000
+576 32 672000
+576 32 696000
+576 32 720000
+576 32 744000
+576 32 768000
+576 32 792000
+576 32 816000
+576 32 840000
+576 32 864000
+576 32 888000
+576 32 912000
+576 32 936000
+576 32 960000
+576 32 984000
+576 32 1008000
+576 32 1032000
+576 32 1056000
+576 32 1080000
+576 32 1104000
+576 32 1128000
+576 32 1152000
+576 32 1176000
+576 32 1200000
+576 32 1224000
+576 32 1248000
+576 32 1272000
+576 32 1296000
+576 32 1320000
+576 32 1344000
+576 32 1368000
+576 32 1392000
+576 32 1416000
+576 32 1440000
+576 32 1464000
+576 32 1488000
+576 32 1512000
+576 32 1536000
+576 32 1560000
+576 32 1584000
+576 32 1608000
+576 32 1632000
+576 32 1656000
+576 32 1680000
+576 32 1704000
+576 32 1728000
+576 32 1752000
+576 32 1776000
+576 32 1800000
+576 32 1824000
+576 32 1848000
+576 32 1872000
+576 32 1896000
+576 32 1920000
+576 32 1944000
+576 32 1968000
+576 32 1992000
+576 32 2016000
+576 32 2040000
+576 32 2064000
+576 32 2088000
+576 32 2112000
+576 32 2136000
+576 32 2160000
+576 32 2184000
+576 32 2208000
+576 32 2232000
+576 32 2256000
+576 32 2280000
+576 32 2304000
+576 32 2328000
+576 32 2352000
+576 32 2376000
+576 32 2400000
+576 32 2424000
+576 32 2448000
+576 32 2472000
+576 32 2496000
+576 32 2520000
+576 32 2544000
+576 32 2568000
+576 32 2592000
+576 32 2616000
+576 32 2640000
+576 32 2664000
+576 32 2688000
+576 32 2712000
+576 32 2736000
+576 32 2760000
+576 32 2784000
+576 32 2808000
+576 32 2832000
+576 32 2856000
+576 32 2880000
+576 32 2904000
+576 32 2928000
+576 32 2952000
+576 32 2976000
+576 32 3000000
+576 32 3024000
+576 32 3048000
+576 32 3072000
+576 32 3096000
+576 32 3120000
+576 32 3144000
+576 32 3168000
+576 32 3192000
+576 32 3216000
+576 32 3240000
+576 32 3264000
+576 32 3288000
+576 32 3312000
+576 32 3336000
+576 32 3360000
+576 32 3384000
+576 32 3408000
+576 32 3432000
+576 32 3456000
+576 32 3480000
+576 32 3504000
+576 32 3528000
+576 32 3552000
+576 32 3576000
+576 32 3600000
+576 32 3624000
+576 32 3648000
+576 32 3672000
+576 32 3696000
+576 32 3720000
+576 32 3744000
+576 32 3768000
+576 32 3792000
+576 32 3816000
+576 32 3840000
+576 32 3864000
+576 32 3888000
+576 32 3912000
+576 32 3936000
+576 32 3960000
+576 32 3984000
+576 32 4008000
+576 32 4032000
+576 32 4056000
+576 32 4080000
+576 32 4104000
+576 32 4128000
+576 32 4152000
+576 32 4176000
+576 32 4200000
+576 32 4224000
+576 32 4248000
+576 32 4272000
+576 32 4296000
+576 32 4320000
+576 32 4344000
+576 32 4368000
+576 32 4392000
+576 32 4416000
+576 32 4440000
+576 32 4464000
+576 32 4488000
+576 32 4512000
+576 32 4536000
+576 32 4560000
+576 32 4584000
+576 32 4608000
+576 32 4632000
+576 32 4656000
+576 32 4680000
+576 32 4704000
+576 32 4728000
+576 32 4752000
+576 32 4776000
+576 32 4800000
+576 32 4824000
+576 32 4848000
+576 32 4872000
+576 32 4896000
+576 32 4920000
+576 32 4944000
+576 32 4968000
+576 32 4992000
+576 32 5016000
+576 32 5040000
+576 32 5064000
+576 32 5088000
+576 32 5112000
+576 32 5136000
+576 32 5160000
+576 32 5184000
+576 32 5208000
+576 32 5232000
+576 32 5256000
+576 32 5280000
+576 32 5304000
+576 32 5328000
+576 32 5352000
+576 32 5376000
+576 32 5400000
+576 32 5424000
+576 32 5448000
+576 32 5472000
+576 32 5496000
+576 32 5520000
+576 32 5544000
+576 32 5568000
+576 32 5592000
+576 32 5616000
+576 32 5640000
+576 32 5664000
+576 32 5688000
+576 32 5712000
+576 32 5736000
+576 32 5760000
+576 32 5784000
+576 32 5808000
+576 32 5832000
+576 32 5856000
+576 32 5880000
+576 32 5904000
+576 32 5928000
+576 32 5952000
+576 32 5976000
+576 32 6000000
+576 32 6024000
+576 32 6048000
+576 32 6072000
+576 32 6096000
+576 32 6120000
+576 32 6144000
+576 32 6168000
+576 32 6192000
+576 32 6216000
+576 32 6240000
+576 32 6264000
+576 32 6288000
+576 32 6312000
+576 32 6336000
+576 32 6360000
+576 32 6384000
+576 32 6408000
+576 32 6432000
+576 32 6456000
+576 32 6480000
+576 32 6504000
+576 32 6528000
+576 32 6552000
+576 32 6576000
+576 32 6600000
+576 32 6624000
+576 32 6648000
+576 32 6672000
+576 32 6696000
+576 32 6720000
+576 32 6744000
+576 32 6768000
+576 32 6792000
+576 32 6816000
+576 32 6840000
+576 32 6864000
+576 32 6888000
+576 32 6912000
+576 32 6936000
+576 32 6960000
+576 32 6984000
+576 32 7008000
+576 32 7032000
+576 32 7056000
+576 32 7080000
+576 32 7104000
+576 32 7128000
+576 32 7152000
+576 32 7176000
+576 32 7200000
+576 32 7224000
+576 32 7248000
+576 32 7272000
+576 32 7296000
+576 32 7320000
+576 32 7344000
+576 32 7368000
+576 32 7392000
+576 32 7416000
+576 32 7440000
+576 32 7464000
+576 32 7488000
+576 32 7512000
+576 32 7536000
+576 32 7560000
+576 32 7584000
+576 32 7608000
+576 32 7632000
+576 32 7656000
+576 32 7680000
+576 32 7704000
+576 32 7728000
+576 32 7752000
+576 32 7776000
+576 32 7800000
+576 32 7824000
+576 32 7848000
+576 32 7872000
+576 32 7896000
+576 32 7920000
+576 32 7944000
+576 32 7968000
+576 32 7992000
+576 32 8016000
+576 32 8040000
+576 32 8064000
+576 32 8088000
+576 32 8112000
+576 32 8136000
+576 32 8160000
+576 32 8184000
+576 32 8208000
+576 32 8232000
+576 32 8256000
+576 32 8280000
+576 32 8304000
+576 32 8328000
+576 32 8352000
+576 32 8376000
+576 32 8400000
+576 32 8424000
+576 32 8448000
+576 32 8472000
+576 32 8496000
+576 32 8520000
+576 32 8544000
+576 32 8568000
+576 32 8592000
+576 32 8616000
+576 32 8640000
+576 32 8664000
+576 32 8688000
+576 32 8712000
+576 32 8736000
+576 32 8760000
+576 32 8784000
+576 32 8808000
+576 32 8832000
+576 32 8856000
+576 32 8880000
+576 32 8904000
+576 32 8928000
+576 32 8952000
+576 32 8976000
+576 32 9000000
+576 32 9024000
+576 32 9048000
+576 32 9072000
+576 32 9096000
+576 32 9120000
+576 32 9144000
+576 32 9168000
+576 32 9192000
+576 32 9216000
+576 32 9240000
+576 32 9264000
+576 32 9288000
+576 32 9312000
+576 32 9336000
+576 32 9360000
+576 32 9384000
+576 32 9408000
+576 32 9432000
+576 32 9456000
+576 32 9480000
+576 32 9504000
+576 32 9528000
+576 32 9552000
+576 32 9576000
+576 32 9600000
+576 32 9624000
+576 32 9648000
+576 32 9672000
+576 32 9696000
+576 32 9720000
+576 32 9744000
+576 32 9768000
+576 32 9792000
+576 32 9816000
+576 32 9840000
+576 32 9864000
+576 32 9888000
+576 32 9912000
diff --git a/media/res/bbb_mpeg2_176x144_105kbps_25fps.info b/media/res/bbb_mpeg2_176x144_105kbps_25fps.info
new file mode 100644
index 0000000..3813cd4
--- /dev/null
+++ b/media/res/bbb_mpeg2_176x144_105kbps_25fps.info
@@ -0,0 +1,249 @@
+6458 32 40000
+4040 0 80000
+3255 0 120000
+3026 0 160000
+3293 0 200000
+3089 0 240000
+3305 0 280000
+1794 0 320000
+1848 0 360000
+1288 0 400000
+1511 0 440000
+1527 0 480000
+6146 32 520000
+1243 0 560000
+1099 0 600000
+1354 0 640000
+1366 0 680000
+1042 0 720000
+1600 0 760000
+875 0 800000
+1728 0 840000
+1254 0 880000
+994 0 920000
+1591 0 960000
+6265 32 1000000
+1018 0 1040000
+825 0 1080000
+869 0 1120000
+921 0 1160000
+975 0 1200000
+924 0 1240000
+834 0 1280000
+1066 0 1320000
+793 0 1360000
+889 0 1400000
+2050 0 1440000
+6276 32 1480000
+881 0 1520000
+260 0 1560000
+730 0 1600000
+431 0 1640000
+351 0 1680000
+321 0 1720000
+3802 0 1760000
+146 0 1800000
+6462 0 1840000
+3246 0 1880000
+533 0 1920000
+6231 32 1960000
+1378 0 2000000
+719 0 2040000
+818 0 2080000
+856 0 2120000
+937 0 2160000
+611 0 2200000
+3031 0 2240000
+1041 0 2280000
+604 0 2320000
+714 0 2360000
+1283 0 2400000
+7565 32 2440000
+602 0 2480000
+530 0 2520000
+2579 0 2560000
+115 0 2600000
+1058 0 2640000
+689 0 2680000
+1119 0 2720000
+698 0 2760000
+1006 0 2800000
+545 0 2840000
+1617 0 2880000
+9123 32 2920000
+527 0 2960000
+1576 0 3000000
+465 0 3040000
+741 0 3080000
+521 0 3120000
+1322 0 3160000
+775 0 3200000
+863 0 3240000
+910 0 3280000
+915 0 3320000
+926 0 3360000
+7556 32 3400000
+741 0 3440000
+527 0 3480000
+2516 0 3520000
+459 0 3560000
+404 0 3600000
+509 0 3640000
+1227 0 3680000
+1561 0 3720000
+490 0 3760000
+712 0 3800000
+803 0 3840000
+7524 32 3880000
+730 0 3920000
+461 0 3960000
+2526 0 4000000
+453 0 4040000
+632 0 4080000
+783 0 4120000
+843 0 4160000
+918 0 4200000
+961 0 4240000
+948 0 4280000
+959 0 4320000
+7598 32 4360000
+678 0 4400000
+569 0 4440000
+893 0 4480000
+624 0 4520000
+755 0 4560000
+2234 0 4600000
+556 0 4640000
+944 0 4680000
+739 0 4720000
+862 0 4760000
+938 0 4800000
+7574 32 4840000
+699 0 4880000
+701 0 4920000
+530 0 4960000
+689 0 5000000
+778 0 5040000
+856 0 5080000
+930 0 5120000
+975 0 5160000
+1021 0 5200000
+1074 0 5240000
+978 0 5280000
+8021 32 5320000
+704 0 5360000
+610 0 5400000
+697 0 5440000
+711 0 5480000
+820 0 5520000
+843 0 5560000
+251 0 5600000
+3367 0 5640000
+507 0 5680000
+3168 32 5720000
+779 0 5760000
+316 0 5800000
+635 0 5840000
+204 0 5880000
+978 0 5920000
+127 0 5960000
+589 0 6000000
+604 0 6040000
+666 0 6080000
+582 0 6120000
+729 0 6160000
+4152 32 6200000
+858 0 6240000
+739 0 6280000
+885 0 6320000
+749 0 6360000
+950 0 6400000
+593 0 6440000
+771 0 6480000
+678 0 6520000
+529 0 6560000
+835 0 6600000
+391 0 6640000
+4692 32 6680000
+473 0 6720000
+724 0 6760000
+381 0 6800000
+909 0 6840000
+394 0 6880000
+659 0 6920000
+367 0 6960000
+658 0 7000000
+523 0 7040000
+554 0 7080000
+553 0 7120000
+6080 32 7160000
+496 0 7200000
+763 0 7240000
+939 0 7280000
+715 0 7320000
+672 0 7360000
+614 0 7400000
+811 0 7440000
+916 0 7480000
+1153 0 7520000
+940 0 7560000
+322 0 7600000
+6613 32 7640000
+851 0 7680000
+1007 0 7720000
+520 0 7760000
+456 0 7800000
+639 0 7840000
+758 0 7880000
+879 0 7920000
+1152 0 7960000
+1061 0 8000000
+946 0 8040000
+859 0 8080000
+3610 32 8120000
+871 0 8160000
+746 0 8200000
+367 0 8240000
+397 0 8280000
+930 0 8320000
+337 0 8360000
+418 0 8400000
+740 0 8440000
+637 0 8480000
+666 0 8520000
+627 0 8560000
+4338 32 8600000
+745 0 8640000
+783 0 8680000
+465 0 8720000
+460 0 8760000
+455 0 8800000
+506 0 8840000
+492 0 8880000
+485 0 8920000
+517 0 8960000
+534 0 9000000
+395 0 9040000
+5626 32 9080000
+1169 0 9120000
+564 0 9160000
+261 0 9200000
+327 0 9240000
+303 0 9280000
+1145 0 9320000
+257 0 9360000
+498 0 9400000
+465 0 9440000
+414 0 9480000
+553 0 9520000
+5617 32 9560000
+1052 0 9600000
+592 0 9640000
+323 0 9680000
+497 0 9720000
+467 0 9760000
+705 0 9800000
+1086 0 9840000
+1253 0 9880000
+1252 0 9920000
+776 0 9960000
diff --git a/media/res/bbb_mpeg2_176x144_105kbps_25fps.m2v b/media/res/bbb_mpeg2_176x144_105kbps_25fps.m2v
new file mode 100644
index 0000000..cdf90c3
--- /dev/null
+++ b/media/res/bbb_mpeg2_176x144_105kbps_25fps.m2v
Binary files differ
diff --git a/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.info b/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.info
new file mode 100644
index 0000000..b05a44c
--- /dev/null
+++ b/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.info
@@ -0,0 +1,251 @@
+49 128 0
+49 128 0
+57542 32 0
+50961 0 40000
+29136 0 80000
+28146 0 120000
+25472 0 160000
+5752 0 200000
+4373 0 240000
+4261 0 280000
+5083 0 320000
+6504 0 360000
+5080 0 400000
+5688 0 440000
+50834 32 480000
+4559 0 520000
+4118 0 560000
+3937 0 600000
+4262 0 640000
+4649 0 680000
+3995 0 720000
+3899 0 760000
+3896 0 800000
+3998 0 840000
+4129 0 880000
+4064 0 920000
+42872 32 960000
+3265 0 1000000
+2506 0 1040000
+2178 0 1080000
+2445 0 1120000
+2461 0 1160000
+3267 0 1200000
+2700 0 1240000
+2924 0 1280000
+2405 0 1320000
+2656 0 1360000
+2494 0 1400000
+47454 32 1440000
+2956 0 1480000
+1434 0 1520000
+707 0 1560000
+1310 0 1600000
+1791 0 1640000
+2088 0 1680000
+1078 0 1720000
+738 0 1760000
+74837 32 1800000
+3304 0 1840000
+3656 0 1880000
+2822 0 1920000
+2566 0 1960000
+2816 0 2000000
+2590 0 2040000
+2471 0 2080000
+2553 0 2120000
+2547 0 2160000
+2628 0 2200000
+2664 0 2240000
+38161 32 2280000
+2995 0 2320000
+2205 0 2360000
+2055 0 2400000
+2122 0 2440000
+2236 0 2480000
+2407 0 2520000
+893 0 2560000
+2511 0 2600000
+2703 0 2640000
+2511 0 2680000
+2564 0 2720000
+35944 32 2760000
+3002 0 2800000
+2188 0 2840000
+2109 0 2880000
+2058 0 2920000
+2242 0 2960000
+2240 0 3000000
+2346 0 3040000
+2223 0 3080000
+2430 0 3120000
+2486 0 3160000
+2379 0 3200000
+34014 32 3240000
+3009 0 3280000
+2073 0 3320000
+2005 0 3360000
+2052 0 3400000
+2167 0 3440000
+2331 0 3480000
+2201 0 3520000
+896 0 3560000
+2594 0 3600000
+2589 0 3640000
+2542 0 3680000
+33973 32 3720000
+2913 0 3760000
+1978 0 3800000
+1943 0 3840000
+1983 0 3880000
+2234 0 3920000
+2142 0 3960000
+2106 0 4000000
+2253 0 4040000
+2327 0 4080000
+2186 0 4120000
+2366 0 4160000
+32094 32 4200000
+3050 0 4240000
+1913 0 4280000
+2016 0 4320000
+2097 0 4360000
+2112 0 4400000
+2163 0 4440000
+2258 0 4480000
+2231 0 4520000
+882 0 4560000
+2575 0 4600000
+2700 0 4640000
+33754 32 4680000
+3011 0 4720000
+2034 0 4760000
+1986 0 4800000
+1983 0 4840000
+2180 0 4880000
+2067 0 4920000
+2262 0 4960000
+2323 0 5000000
+2367 0 5040000
+2289 0 5080000
+2263 0 5120000
+31806 32 5160000
+3285 0 5200000
+1957 0 5240000
+2073 0 5280000
+2057 0 5320000
+2134 0 5360000
+2086 0 5400000
+2217 0 5440000
+2314 0 5480000
+2176 0 5520000
+852 0 5560000
+2421 0 5600000
+37236 32 5640000
+16140 32 5680000
+3491 0 5720000
+2891 0 5760000
+1499 0 5800000
+659 0 5840000
+652 0 5880000
+648 0 5920000
+1892 0 5960000
+3050 0 6000000
+2235 0 6040000
+1925 0 6080000
+1790 0 6120000
+16441 32 6160000
+5341 0 6200000
+2445 0 6240000
+2878 0 6280000
+2366 0 6320000
+1732 0 6360000
+1858 0 6400000
+1632 0 6440000
+1514 0 6480000
+1874 0 6520000
+1059 0 6560000
+1795 0 6600000
+20153 32 6640000
+3589 0 6680000
+2418 0 6720000
+1896 0 6760000
+1577 0 6800000
+1629 0 6840000
+1717 0 6880000
+1717 0 6920000
+1815 0 6960000
+1663 0 7000000
+1855 0 7040000
+1699 0 7080000
+21184 32 7120000
+3395 0 7160000
+3276 0 7200000
+3825 0 7240000
+2747 0 7280000
+1684 0 7320000
+2141 0 7360000
+2372 0 7400000
+2777 0 7440000
+2828 0 7480000
+2442 0 7520000
+1302 0 7560000
+20702 32 7600000
+4043 0 7640000
+2875 0 7680000
+2026 0 7720000
+1983 0 7760000
+2173 0 7800000
+2670 0 7840000
+3145 0 7880000
+5312 0 7920000
+5547 0 7960000
+4262 0 8000000
+2637 0 8040000
+15761 32 8080000
+2693 0 8120000
+1433 0 8160000
+2108 0 8200000
+2253 0 8240000
+1846 0 8280000
+1281 0 8320000
+2294 0 8360000
+2217 0 8400000
+2370 0 8440000
+1809 0 8480000
+1899 0 8520000
+21630 32 8560000
+3189 0 8600000
+1679 0 8640000
+1732 0 8680000
+1672 0 8720000
+1788 0 8760000
+1656 0 8800000
+1765 0 8840000
+1579 0 8880000
+2142 0 8920000
+1954 0 8960000
+1854 0 9000000
+24966 32 9040000
+2176 0 9080000
+1236 0 9120000
+1282 0 9160000
+1526 0 9200000
+1369 0 9240000
+1283 0 9280000
+1434 0 9320000
+1335 0 9360000
+2144 0 9400000
+1917 0 9440000
+1409 0 9480000
+27745 32 9520000
+1905 0 9560000
+1495 0 9600000
+1685 0 9640000
+1745 0 9680000
+1894 0 9720000
+3667 0 9760000
+5546 0 9800000
+5729 0 9840000
+4479 0 9880000
+3829 0 9920000
diff --git a/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.m4v b/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.m4v
new file mode 100644
index 0000000..ec32d5e
--- /dev/null
+++ b/media/res/bbb_mpeg4_1280x720_1000kbps_25fps.m4v
Binary files differ
diff --git a/media/res/bbb_vp8_640x360_2mbps_30fps.info b/media/res/bbb_vp8_640x360_2mbps_30fps.info
new file mode 100644
index 0000000..101f3bb
--- /dev/null
+++ b/media/res/bbb_vp8_640x360_2mbps_30fps.info
@@ -0,0 +1,300 @@
+86980 32 0
+6741 0 33000
+9433 0 67000
+9363 0 100000
+8671 0 133000
+9003 0 167000
+7751 0 200000
+13207 0 233000
+8542 0 267000
+9344 0 300000
+8069 0 333000
+8588 0 367000
+12087 0 400000
+7315 0 433000
+9654 0 467000
+13100 0 500000
+7832 0 533000
+10060 0 567000
+8540 0 600000
+8667 0 633000
+8532 0 667000
+6018 0 700000
+8520 0 733000
+15350 0 767000
+6110 0 800000
+7876 0 833000
+6133 0 867000
+9476 0 900000
+11002 0 933000
+7484 0 967000
+8760 0 1000000
+16515 0 1033000
+7482 0 1067000
+6983 0 1100000
+7561 0 1133000
+8263 0 1167000
+10682 0 1200000
+8108 0 1233000
+7924 0 1267000
+8693 0 1300000
+14190 0 1333000
+7393 0 1367000
+6864 0 1400000
+9431 0 1433000
+7674 0 1467000
+8458 0 1500000
+5899 0 1533000
+8259 0 1567000
+7963 0 1600000
+14779 0 1633000
+6877 0 1667000
+7268 0 1700000
+8526 0 1733000
+8467 0 1767000
+11200 0 1800000
+7261 0 1833000
+8280 0 1867000
+6718 0 1900000
+17742 0 1933000
+5206 0 1967000
+5700 0 2000000
+5872 0 2033000
+7915 0 2067000
+8493 0 2100000
+6545 0 2133000
+9072 0 2167000
+13200 0 2200000
+9632 0 2233000
+10016 0 2267000
+7824 0 2300000
+10628 0 2333000
+10401 0 2367000
+10892 0 2400000
+9023 0 2433000
+10734 0 2467000
+15045 0 2500000
+7940 0 2533000
+9657 0 2567000
+8743 0 2600000
+8074 0 2633000
+9445 0 2667000
+6494 0 2700000
+8601 0 2733000
+13478 0 2767000
+6942 0 2800000
+8002 0 2833000
+7940 0 2867000
+8320 0 2900000
+12215 0 2933000
+6668 0 2967000
+11384 0 3000000
+8378 0 3033000
+12908 0 3067000
+8420 0 3100000
+7502 0 3133000
+8482 0 3167000
+10968 0 3200000
+12338 0 3233000
+8657 0 3267000
+10468 0 3300000
+13878 0 3333000
+9374 0 3367000
+9857 0 3400000
+10381 0 3433000
+9984 0 3467000
+9956 0 3500000
+8905 0 3533000
+8672 0 3567000
+8122 0 3600000
+9677 0 3633000
+9812 0 3667000
+9622 0 3700000
+9023 0 3733000
+7147 0 3767000
+9146 0 3800000
+7488 0 3833000
+10812 0 3867000
+8340 0 3900000
+13280 0 3933000
+5167 0 3967000
+6991 0 4000000
+6543 0 4033000
+5952 0 4067000
+5164 0 4100000
+4011 0 4133000
+3794 0 4167000
+12959 0 4200000
+71020 32 4233000
+5351 0 4267000
+6283 0 4300000
+5080 0 4333000
+6707 0 4367000
+5857 0 4400000
+5221 0 4433000
+10972 0 4467000
+7023 0 4500000
+6907 0 4533000
+7851 0 4567000
+4843 0 4600000
+6085 0 4633000
+4868 0 4667000
+5093 0 4700000
+12807 0 4733000
+6330 0 4767000
+4209 0 4800000
+4596 0 4833000
+6316 0 4867000
+4954 0 4900000
+5533 0 4933000
+7749 0 4967000
+12486 0 5000000
+5468 0 5033000
+4353 0 5067000
+5786 0 5100000
+5551 0 5133000
+6711 0 5167000
+5688 0 5200000
+6258 0 5233000
+12975 0 5267000
+4873 0 5300000
+4552 0 5333000
+4844 0 5367000
+4774 0 5400000
+5025 0 5433000
+5204 0 5467000
+4814 0 5500000
+14835 0 5533000
+5343 0 5567000
+4808 0 5600000
+5071 0 5633000
+6324 0 5667000
+5243 0 5700000
+4995 0 5733000
+5134 0 5767000
+11054 0 5800000
+4807 0 5833000
+5118 0 5867000
+6424 0 5900000
+4984 0 5933000
+7187 0 5967000
+5505 0 6000000
+6941 0 6033000
+11517 0 6067000
+5646 0 6100000
+6832 0 6133000
+5294 0 6167000
+6200 0 6200000
+6328 0 6233000
+4348 0 6267000
+4607 0 6300000
+12958 0 6333000
+4308 0 6367000
+6084 0 6400000
+4494 0 6433000
+5338 0 6467000
+5742 0 6500000
+5472 0 6533000
+8459 0 6567000
+13075 0 6600000
+8986 0 6633000
+9583 0 6667000
+8792 0 6700000
+9004 0 6733000
+9632 0 6767000
+9393 0 6800000
+9259 0 6833000
+11927 0 6867000
+10323 0 6900000
+15248 0 6933000
+11244 0 6967000
+15558 0 7000000
+6197 0 7033000
+8044 0 7067000
+11432 0 7100000
+8737 0 7133000
+13885 0 7167000
+11158 0 7200000
+15152 0 7233000
+7025 0 7267000
+8025 0 7300000
+13362 0 7333000
+8090 0 7367000
+13637 0 7400000
+6148 0 7433000
+9270 0 7467000
+8633 0 7500000
+10673 0 7533000
+14208 0 7567000
+8084 0 7600000
+13783 0 7633000
+10660 0 7667000
+7466 0 7700000
+14433 0 7733000
+10934 0 7767000
+7239 0 7800000
+12548 0 7833000
+6564 0 7867000
+10761 0 7900000
+10992 0 7933000
+12924 0 7967000
+12348 0 8000000
+6770 0 8033000
+14288 0 8067000
+29345 32 8100000
+1822 0 8133000
+1087 0 8167000
+1109 0 8200000
+2007 0 8233000
+1798 0 8267000
+1635 0 8300000
+19607 0 8333000
+919 0 8367000
+2357 0 8400000
+3578 0 8433000
+4497 0 8467000
+4314 0 8500000
+3851 0 8533000
+3822 0 8567000
+4252 0 8600000
+4775 0 8633000
+12203 0 8667000
+5078 0 8700000
+5876 0 8733000
+6124 0 8767000
+4490 0 8800000
+3538 0 8833000
+3450 0 8867000
+3611 0 8900000
+2847 0 8933000
+2605 0 8967000
+12243 0 9000000
+1946 0 9033000
+1847 0 9067000
+2035 0 9100000
+2572 0 9133000
+2326 0 9167000
+2645 0 9200000
+2938 0 9233000
+2495 0 9267000
+2609 0 9300000
+9744 0 9333000
+1796 0 9367000
+1985 0 9400000
+1759 0 9433000
+2259 0 9467000
+2233 0 9500000
+2044 0 9533000
+2502 0 9567000
+2307 0 9600000
+2739 0 9633000
+11707 0 9667000
+5168 0 9700000
+4483 0 9733000
+3044 0 9767000
+4241 0 9800000
+4392 0 9833000
+4934 0 9867000
+5934 0 9900000
+5647 0 9933000
+5326 0 9967000
diff --git a/media/res/bbb_vp8_640x360_2mbps_30fps.vp8 b/media/res/bbb_vp8_640x360_2mbps_30fps.vp8
new file mode 100644
index 0000000..6ec460c
--- /dev/null
+++ b/media/res/bbb_vp8_640x360_2mbps_30fps.vp8
Binary files differ
diff --git a/media/res/bbb_vp9_640x360_1600kbps_30fps.info b/media/res/bbb_vp9_640x360_1600kbps_30fps.info
new file mode 100644
index 0000000..18be58e
--- /dev/null
+++ b/media/res/bbb_vp9_640x360_1600kbps_30fps.info
@@ -0,0 +1,300 @@
+54918 32 0
+46280 0 33000
+2006 0 67000
+2841 0 100000
+3044 0 133000
+3429 0 167000
+3196 0 200000
+2926 0 233000
+2821 0 267000
+1150 0 300000
+36 0 333000
+38084 0 367000
+3689 0 400000
+3473 0 433000
+3011 0 467000
+3090 0 500000
+2516 0 533000
+2771 0 567000
+3250 0 600000
+1159 0 633000
+34 0 667000
+39690 0 700000
+3615 0 733000
+2494 0 767000
+2893 0 800000
+3329 0 833000
+2939 0 867000
+2352 0 900000
+2732 0 933000
+1746 0 967000
+33 0 1000000
+41501 0 1033000
+2997 0 1067000
+2666 0 1100000
+3582 0 1133000
+2616 0 1167000
+2923 0 1200000
+2696 0 1233000
+1628 0 1267000
+1887 0 1300000
+33 0 1333000
+42876 0 1367000
+2588 0 1400000
+3316 0 1433000
+2287 0 1467000
+3375 0 1500000
+2108 0 1533000
+2961 0 1567000
+1730 0 1600000
+1800 0 1633000
+34 0 1667000
+43797 0 1700000
+2484 0 1733000
+2556 0 1767000
+2671 0 1800000
+2338 0 1833000
+3133 0 1867000
+2002 0 1900000
+1794 0 1933000
+1279 0 1967000
+32 0 2000000
+42642 0 2033000
+2686 0 2067000
+2202 0 2100000
+2145 0 2133000
+2566 0 2167000
+2190 0 2200000
+1580 0 2233000
+1711 0 2267000
+648 0 2300000
+32 0 2333000
+40409 0 2367000
+2628 0 2400000
+1973 0 2433000
+2360 0 2467000
+3043 0 2500000
+1730 0 2533000
+1456 0 2567000
+2312 0 2600000
+369 0 2633000
+32 0 2667000
+41391 0 2700000
+2967 0 2733000
+2454 0 2767000
+1825 0 2800000
+1853 0 2833000
+1746 0 2867000
+2347 0 2900000
+1362 0 2933000
+441 0 2967000
+34 0 3000000
+42503 0 3033000
+1877 0 3067000
+1690 0 3100000
+1367 0 3133000
+1520 0 3167000
+1240 0 3200000
+1094 0 3233000
+739 0 3267000
+392 0 3300000
+33 0 3333000
+35104 0 3367000
+1463 0 3400000
+2029 0 3433000
+1626 0 3467000
+1956 0 3500000
+799 0 3533000
+556 0 3567000
+584 0 3600000
+191 0 3633000
+36 0 3667000
+37652 0 3700000
+862 0 3733000
+524 0 3767000
+641 0 3800000
+584 0 3833000
+360 0 3867000
+365 0 3900000
+361 0 3933000
+154 0 3967000
+36 0 4000000
+125740 0 4033000
+332 0 4067000
+381 0 4100000
+420 0 4133000
+464 0 4167000
+288 0 4200000
+2660 0 4233000
+127564 32 4267000
+30696 0 4300000
+3423 0 4333000
+3310 0 4367000
+3513 0 4400000
+3735 0 4433000
+3358 0 4467000
+3108 0 4500000
+2800 0 4533000
+1751 0 4567000
+41 0 4600000
+39862 0 4633000
+3739 0 4667000
+3755 0 4700000
+3408 0 4733000
+3783 0 4767000
+3423 0 4800000
+2801 0 4833000
+2549 0 4867000
+1461 0 4900000
+40 0 4933000
+41667 0 4967000
+3623 0 5000000
+3356 0 5033000
+3424 0 5067000
+3548 0 5100000
+3119 0 5133000
+2905 0 5167000
+2772 0 5200000
+1623 0 5233000
+43 0 5267000
+46783 0 5300000
+3462 0 5333000
+3470 0 5367000
+3677 0 5400000
+3684 0 5433000
+3266 0 5467000
+3127 0 5500000
+2809 0 5533000
+1750 0 5567000
+40 0 5600000
+46215 0 5633000
+3599 0 5667000
+3558 0 5700000
+3544 0 5733000
+3632 0 5767000
+3548 0 5800000
+2968 0 5833000
+2715 0 5867000
+1729 0 5900000
+41 0 5933000
+45958 0 5967000
+3776 0 6000000
+3525 0 6033000
+3644 0 6067000
+3786 0 6100000
+3222 0 6133000
+2923 0 6167000
+2752 0 6200000
+1592 0 6233000
+41 0 6267000
+46031 0 6300000
+3520 0 6333000
+3380 0 6367000
+3371 0 6400000
+3427 0 6433000
+3135 0 6467000
+2988 0 6500000
+2730 0 6533000
+1671 0 6567000
+41 0 6600000
+45846 0 6633000
+3535 0 6667000
+3507 0 6700000
+3429 0 6733000
+3491 0 6767000
+3325 0 6800000
+2979 0 6833000
+2800 0 6867000
+1610 0 6900000
+40 0 6933000
+45958 0 6967000
+3762 0 7000000
+3254 0 7033000
+3408 0 7067000
+3860 0 7100000
+3198 0 7133000
+2966 0 7167000
+2882 0 7200000
+1763 0 7233000
+42 0 7267000
+46130 0 7300000
+3593 0 7333000
+3523 0 7367000
+3939 0 7400000
+3980 0 7433000
+3470 0 7467000
+3191 0 7500000
+2969 0 7533000
+1740 0 7567000
+41 0 7600000
+46300 0 7633000
+3739 0 7667000
+3781 0 7700000
+3964 0 7733000
+4023 0 7767000
+3480 0 7800000
+3065 0 7833000
+2934 0 7867000
+1805 0 7900000
+42 0 7933000
+38166 0 7967000
+4062 0 8000000
+3844 0 8033000
+4547 0 8067000
+934 0 8100000
+365 0 8133000
+181 0 8167000
+463 0 8200000
+419 0 8233000
+38 0 8267000
+9702 0 8300000
+344 0 8333000
+276 0 8367000
+1350 0 8400000
+1703 0 8433000
+1843 0 8467000
+1228 0 8500000
+35580 32 8533000
+27458 0 8567000
+2144 0 8600000
+2482 0 8633000
+2004 0 8667000
+2822 0 8700000
+2570 0 8733000
+1726 0 8767000
+1248 0 8800000
+844 0 8833000
+35 0 8867000
+14207 0 8900000
+1037 0 8933000
+749 0 8967000
+829 0 9000000
+915 0 9033000
+685 0 9067000
+767 0 9100000
+798 0 9133000
+342 0 9167000
+31 0 9200000
+12590 0 9233000
+923 0 9267000
+819 0 9300000
+776 0 9333000
+863 0 9367000
+729 0 9400000
+471 0 9433000
+638 0 9467000
+276 0 9500000
+38 0 9533000
+17272 0 9567000
+856 0 9600000
+1158 0 9633000
+2172 0 9667000
+2751 0 9700000
+2142 0 9733000
+1267 0 9767000
+1965 0 9800000
+1510 0 9833000
+34 0 9867000
+2692 0 9900000
+2778 0 9933000
+2585 0 9967000
diff --git a/media/res/bbb_vp9_640x360_1600kbps_30fps.vp9 b/media/res/bbb_vp9_640x360_1600kbps_30fps.vp9
new file mode 100644
index 0000000..c1e2001
--- /dev/null
+++ b/media/res/bbb_vp9_640x360_1600kbps_30fps.vp9
Binary files differ
diff --git a/media/res/sine_amrnb_1ch_12kbps_8000hz.info b/media/res/sine_amrnb_1ch_12kbps_8000hz.info
index b36e813..464e95f 100644
--- a/media/res/sine_amrnb_1ch_12kbps_8000hz.info
+++ b/media/res/sine_amrnb_1ch_12kbps_8000hz.info
@@ -1,833 +1,833 @@
-32 1 0
-32 1 20000
-32 1 40000
-32 1 60000
-32 1 80000
-32 1 100000
-32 1 120000
-32 1 140000
-32 1 160000
-32 1 180000
-32 1 200000
-32 1 220000
-32 1 240000
-32 1 260000
-32 1 280000
-32 1 300000
-32 1 320000
-32 1 340000
-32 1 360000
-32 1 380000
-32 1 400000
-32 1 420000
-32 1 440000
-32 1 460000
-32 1 480000
-32 1 500000
-32 1 520000
-32 1 540000
-32 1 560000
-32 1 580000
-32 1 600000
-32 1 620000
-32 1 640000
-32 1 660000
-32 1 680000
-32 1 700000
-32 1 720000
-32 1 740000
-32 1 760000
-32 1 780000
-32 1 800000
-32 1 820000
-32 1 840000
-32 1 860000
-32 1 880000
-32 1 900000
-32 1 920000
-32 1 940000
-32 1 960000
-32 1 980000
-32 1 1000000
-32 1 1020000
-32 1 1040000
-32 1 1060000
-32 1 1080000
-32 1 1100000
-32 1 1120000
-32 1 1140000
-32 1 1160000
-32 1 1180000
-32 1 1200000
-32 1 1220000
-32 1 1240000
-32 1 1260000
-32 1 1280000
-32 1 1300000
-32 1 1320000
-32 1 1340000
-32 1 1360000
-32 1 1380000
-32 1 1400000
-32 1 1420000
-32 1 1440000
-32 1 1460000
-32 1 1480000
-32 1 1500000
-32 1 1520000
-32 1 1540000
-32 1 1560000
-32 1 1580000
-32 1 1600000
-32 1 1620000
-32 1 1640000
-32 1 1660000
-32 1 1680000
-32 1 1700000
-32 1 1720000
-32 1 1740000
-32 1 1760000
-32 1 1780000
-32 1 1800000
-32 1 1820000
-32 1 1840000
-32 1 1860000
-32 1 1880000
-32 1 1900000
-32 1 1920000
-32 1 1940000
-32 1 1960000
-32 1 1980000
-32 1 2000000
-32 1 2020000
-32 1 2040000
-32 1 2060000
-32 1 2080000
-32 1 2100000
-32 1 2120000
-32 1 2140000
-32 1 2160000
-32 1 2180000
-32 1 2200000
-32 1 2220000
-32 1 2240000
-32 1 2260000
-32 1 2280000
-32 1 2300000
-32 1 2320000
-32 1 2340000
-32 1 2360000
-32 1 2380000
-32 1 2400000
-32 1 2420000
-32 1 2440000
-32 1 2460000
-32 1 2480000
-32 1 2500000
-32 1 2520000
-32 1 2540000
-32 1 2560000
-32 1 2580000
-32 1 2600000
-32 1 2620000
-32 1 2640000
-32 1 2660000
-32 1 2680000
-32 1 2700000
-32 1 2720000
-32 1 2740000
-32 1 2760000
-32 1 2780000
-32 1 2800000
-32 1 2820000
-32 1 2840000
-32 1 2860000
-32 1 2880000
-32 1 2900000
-32 1 2920000
-32 1 2940000
-32 1 2960000
-32 1 2980000
-32 1 3000000
-32 1 3020000
-32 1 3040000
-32 1 3060000
-32 1 3080000
-32 1 3100000
-32 1 3120000
-32 1 3140000
-32 1 3160000
-32 1 3180000
-32 1 3200000
-32 1 3220000
-32 1 3240000
-32 1 3260000
-32 1 3280000
-32 1 3300000
-32 1 3320000
-32 1 3340000
-32 1 3360000
-32 1 3380000
-32 1 3400000
-32 1 3420000
-32 1 3440000
-32 1 3460000
-32 1 3480000
-32 1 3500000
-32 1 3520000
-32 1 3540000
-32 1 3560000
-32 1 3580000
-32 1 3600000
-32 1 3620000
-32 1 3640000
-32 1 3660000
-32 1 3680000
-32 1 3700000
-32 1 3720000
-32 1 3740000
-32 1 3760000
-32 1 3780000
-32 1 3800000
-32 1 3820000
-32 1 3840000
-32 1 3860000
-32 1 3880000
-32 1 3900000
-32 1 3920000
-32 1 3940000
-32 1 3960000
-32 1 3980000
-32 1 4000000
-32 1 4020000
-32 1 4040000
-32 1 4060000
-32 1 4080000
-32 1 4100000
-32 1 4120000
-32 1 4140000
-32 1 4160000
-32 1 4180000
-32 1 4200000
-32 1 4220000
-32 1 4240000
-32 1 4260000
-32 1 4280000
-32 1 4300000
-32 1 4320000
-32 1 4340000
-32 1 4360000
-32 1 4380000
-32 1 4400000
-32 1 4420000
-32 1 4440000
-32 1 4460000
-32 1 4480000
-32 1 4500000
-32 1 4520000
-32 1 4540000
-32 1 4560000
-32 1 4580000
-32 1 4600000
-32 1 4620000
-32 1 4640000
-32 1 4660000
-32 1 4680000
-32 1 4700000
-32 1 4720000
-32 1 4740000
-32 1 4760000
-32 1 4780000
-32 1 4800000
-32 1 4820000
-32 1 4840000
-32 1 4860000
-32 1 4880000
-32 1 4900000
-32 1 4920000
-32 1 4940000
-32 1 4960000
-32 1 4980000
-32 1 5000000
-32 1 5020000
-32 1 5040000
-32 1 5060000
-32 1 5080000
-32 1 5100000
-32 1 5120000
-32 1 5140000
-32 1 5160000
-32 1 5180000
-32 1 5200000
-32 1 5220000
-32 1 5240000
-32 1 5260000
-32 1 5280000
-32 1 5300000
-32 1 5320000
-32 1 5340000
-32 1 5360000
-32 1 5380000
-32 1 5400000
-32 1 5420000
-32 1 5440000
-32 1 5460000
-32 1 5480000
-32 1 5500000
-32 1 5520000
-32 1 5540000
-32 1 5560000
-32 1 5580000
-32 1 5600000
-32 1 5620000
-32 1 5640000
-32 1 5660000
-32 1 5680000
-32 1 5700000
-32 1 5720000
-32 1 5740000
-32 1 5760000
-32 1 5780000
-32 1 5800000
-32 1 5820000
-32 1 5840000
-32 1 5860000
-32 1 5880000
-32 1 5900000
-32 1 5920000
-32 1 5940000
-32 1 5960000
-32 1 5980000
-32 1 6000000
-32 1 6020000
-32 1 6040000
-32 1 6060000
-32 1 6080000
-32 1 6100000
-32 1 6120000
-32 1 6140000
-32 1 6160000
-32 1 6180000
-32 1 6200000
-32 1 6220000
-32 1 6240000
-32 1 6260000
-32 1 6280000
-32 1 6300000
-32 1 6320000
-32 1 6340000
-32 1 6360000
-32 1 6380000
-32 1 6400000
-32 1 6420000
-32 1 6440000
-32 1 6460000
-32 1 6480000
-32 1 6500000
-32 1 6520000
-32 1 6540000
-32 1 6560000
-32 1 6580000
-32 1 6600000
-32 1 6620000
-32 1 6640000
-32 1 6660000
-32 1 6680000
-32 1 6700000
-32 1 6720000
-32 1 6740000
-32 1 6760000
-32 1 6780000
-32 1 6800000
-32 1 6820000
-32 1 6840000
-32 1 6860000
-32 1 6880000
-32 1 6900000
-32 1 6920000
-32 1 6940000
-32 1 6960000
-32 1 6980000
-32 1 7000000
-32 1 7020000
-32 1 7040000
-32 1 7060000
-32 1 7080000
-32 1 7100000
-32 1 7120000
-32 1 7140000
-32 1 7160000
-32 1 7180000
-32 1 7200000
-32 1 7220000
-32 1 7240000
-32 1 7260000
-32 1 7280000
-32 1 7300000
-32 1 7320000
-32 1 7340000
-32 1 7360000
-32 1 7380000
-32 1 7400000
-32 1 7420000
-32 1 7440000
-32 1 7460000
-32 1 7480000
-32 1 7500000
-32 1 7520000
-32 1 7540000
-32 1 7560000
-32 1 7580000
-32 1 7600000
-32 1 7620000
-32 1 7640000
-32 1 7660000
-32 1 7680000
-32 1 7700000
-32 1 7720000
-32 1 7740000
-32 1 7760000
-32 1 7780000
-32 1 7800000
-32 1 7820000
-32 1 7840000
-32 1 7860000
-32 1 7880000
-32 1 7900000
-32 1 7920000
-32 1 7940000
-32 1 7960000
-32 1 7980000
-32 1 8000000
-32 1 8020000
-32 1 8040000
-32 1 8060000
-32 1 8080000
-32 1 8100000
-32 1 8120000
-32 1 8140000
-32 1 8160000
-32 1 8180000
-32 1 8200000
-32 1 8220000
-32 1 8240000
-32 1 8260000
-32 1 8280000
-32 1 8300000
-32 1 8320000
-32 1 8340000
-32 1 8360000
-32 1 8380000
-32 1 8400000
-32 1 8420000
-32 1 8440000
-32 1 8460000
-32 1 8480000
-32 1 8500000
-32 1 8520000
-32 1 8540000
-32 1 8560000
-32 1 8580000
-32 1 8600000
-32 1 8620000
-32 1 8640000
-32 1 8660000
-32 1 8680000
-32 1 8700000
-32 1 8720000
-32 1 8740000
-32 1 8760000
-32 1 8780000
-32 1 8800000
-32 1 8820000
-32 1 8840000
-32 1 8860000
-32 1 8880000
-32 1 8900000
-32 1 8920000
-32 1 8940000
-32 1 8960000
-32 1 8980000
-32 1 9000000
-32 1 9020000
-32 1 9040000
-32 1 9060000
-32 1 9080000
-32 1 9100000
-32 1 9120000
-32 1 9140000
-32 1 9160000
-32 1 9180000
-32 1 9200000
-32 1 9220000
-32 1 9240000
-32 1 9260000
-32 1 9280000
-32 1 9300000
-32 1 9320000
-32 1 9340000
-32 1 9360000
-32 1 9380000
-32 1 9400000
-32 1 9420000
-32 1 9440000
-32 1 9460000
-32 1 9480000
-32 1 9500000
-32 1 9520000
-32 1 9540000
-32 1 9560000
-32 1 9580000
-32 1 9600000
-32 1 9620000
-32 1 9640000
-32 1 9660000
-32 1 9680000
-32 1 9700000
-32 1 9720000
-32 1 9740000
-32 1 9760000
-32 1 9780000
-32 1 9800000
-32 1 9820000
-32 1 9840000
-32 1 9860000
-32 1 9880000
-32 1 9900000
-32 1 9920000
-32 1 9940000
-32 1 9960000
-32 1 9980000
-32 1 10000000
-32 1 10020000
-32 1 10040000
-32 1 10060000
-32 1 10080000
-32 1 10100000
-32 1 10120000
-32 1 10140000
-32 1 10160000
-32 1 10180000
-32 1 10200000
-32 1 10220000
-32 1 10240000
-32 1 10260000
-32 1 10280000
-32 1 10300000
-32 1 10320000
-32 1 10340000
-32 1 10360000
-32 1 10380000
-32 1 10400000
-32 1 10420000
-32 1 10440000
-32 1 10460000
-32 1 10480000
-32 1 10500000
-32 1 10520000
-32 1 10540000
-32 1 10560000
-32 1 10580000
-32 1 10600000
-32 1 10620000
-32 1 10640000
-32 1 10660000
-32 1 10680000
-32 1 10700000
-32 1 10720000
-32 1 10740000
-32 1 10760000
-32 1 10780000
-32 1 10800000
-32 1 10820000
-32 1 10840000
-32 1 10860000
-32 1 10880000
-32 1 10900000
-32 1 10920000
-32 1 10940000
-32 1 10960000
-32 1 10980000
-32 1 11000000
-32 1 11020000
-32 1 11040000
-32 1 11060000
-32 1 11080000
-32 1 11100000
-32 1 11120000
-32 1 11140000
-32 1 11160000
-32 1 11180000
-32 1 11200000
-32 1 11220000
-32 1 11240000
-32 1 11260000
-32 1 11280000
-32 1 11300000
-32 1 11320000
-32 1 11340000
-32 1 11360000
-32 1 11380000
-32 1 11400000
-32 1 11420000
-32 1 11440000
-32 1 11460000
-32 1 11480000
-32 1 11500000
-32 1 11520000
-32 1 11540000
-32 1 11560000
-32 1 11580000
-32 1 11600000
-32 1 11620000
-32 1 11640000
-32 1 11660000
-32 1 11680000
-32 1 11700000
-32 1 11720000
-32 1 11740000
-32 1 11760000
-32 1 11780000
-32 1 11800000
-32 1 11820000
-32 1 11840000
-32 1 11860000
-32 1 11880000
-32 1 11900000
-32 1 11920000
-32 1 11940000
-32 1 11960000
-32 1 11980000
-32 1 12000000
-32 1 12020000
-32 1 12040000
-32 1 12060000
-32 1 12080000
-32 1 12100000
-32 1 12120000
-32 1 12140000
-32 1 12160000
-32 1 12180000
-32 1 12200000
-32 1 12220000
-32 1 12240000
-32 1 12260000
-32 1 12280000
-32 1 12300000
-32 1 12320000
-32 1 12340000
-32 1 12360000
-32 1 12380000
-32 1 12400000
-32 1 12420000
-32 1 12440000
-32 1 12460000
-32 1 12480000
-32 1 12500000
-32 1 12520000
-32 1 12540000
-32 1 12560000
-32 1 12580000
-32 1 12600000
-32 1 12620000
-32 1 12640000
-32 1 12660000
-32 1 12680000
-32 1 12700000
-32 1 12720000
-32 1 12740000
-32 1 12760000
-32 1 12780000
-32 1 12800000
-32 1 12820000
-32 1 12840000
-32 1 12860000
-32 1 12880000
-32 1 12900000
-32 1 12920000
-32 1 12940000
-32 1 12960000
-32 1 12980000
-32 1 13000000
-32 1 13020000
-32 1 13040000
-32 1 13060000
-32 1 13080000
-32 1 13100000
-32 1 13120000
-32 1 13140000
-32 1 13160000
-32 1 13180000
-32 1 13200000
-32 1 13220000
-32 1 13240000
-32 1 13260000
-32 1 13280000
-32 1 13300000
-32 1 13320000
-32 1 13340000
-32 1 13360000
-32 1 13380000
-32 1 13400000
-32 1 13420000
-32 1 13440000
-32 1 13460000
-32 1 13480000
-32 1 13500000
-32 1 13520000
-32 1 13540000
-32 1 13560000
-32 1 13580000
-32 1 13600000
-32 1 13620000
-32 1 13640000
-32 1 13660000
-32 1 13680000
-32 1 13700000
-32 1 13720000
-32 1 13740000
-32 1 13760000
-32 1 13780000
-32 1 13800000
-32 1 13820000
-32 1 13840000
-32 1 13860000
-32 1 13880000
-32 1 13900000
-32 1 13920000
-32 1 13940000
-32 1 13960000
-32 1 13980000
-32 1 14000000
-32 1 14020000
-32 1 14040000
-32 1 14060000
-32 1 14080000
-32 1 14100000
-32 1 14120000
-32 1 14140000
-32 1 14160000
-32 1 14180000
-32 1 14200000
-32 1 14220000
-32 1 14240000
-32 1 14260000
-32 1 14280000
-32 1 14300000
-32 1 14320000
-32 1 14340000
-32 1 14360000
-32 1 14380000
-32 1 14400000
-32 1 14420000
-32 1 14440000
-32 1 14460000
-32 1 14480000
-32 1 14500000
-32 1 14520000
-32 1 14540000
-32 1 14560000
-32 1 14580000
-32 1 14600000
-32 1 14620000
-32 1 14640000
-32 1 14660000
-32 1 14680000
-32 1 14700000
-32 1 14720000
-32 1 14740000
-32 1 14760000
-32 1 14780000
-32 1 14800000
-32 1 14820000
-32 1 14840000
-32 1 14860000
-32 1 14880000
-32 1 14900000
-32 1 14920000
-32 1 14940000
-32 1 14960000
-32 1 14980000
-32 1 15000000
-32 1 15020000
-32 1 15040000
-32 1 15060000
-32 1 15080000
-32 1 15100000
-32 1 15120000
-32 1 15140000
-32 1 15160000
-32 1 15180000
-32 1 15200000
-32 1 15220000
-32 1 15240000
-32 1 15260000
-32 1 15280000
-32 1 15300000
-32 1 15320000
-32 1 15340000
-32 1 15360000
-32 1 15380000
-32 1 15400000
-32 1 15420000
-32 1 15440000
-32 1 15460000
-32 1 15480000
-32 1 15500000
-32 1 15520000
-32 1 15540000
-32 1 15560000
-32 1 15580000
-32 1 15600000
-32 1 15620000
-32 1 15640000
-32 1 15660000
-32 1 15680000
-32 1 15700000
-32 1 15720000
-32 1 15740000
-32 1 15760000
-32 1 15780000
-32 1 15800000
-32 1 15820000
-32 1 15840000
-32 1 15860000
-32 1 15880000
-32 1 15900000
-32 1 15920000
-32 1 15940000
-32 1 15960000
-32 1 15980000
-32 1 16000000
-32 1 16020000
-32 1 16040000
-32 1 16060000
-32 1 16080000
-32 1 16100000
-32 1 16120000
-32 1 16140000
-32 1 16160000
-32 1 16180000
-32 1 16200000
-32 1 16220000
-32 1 16240000
-32 1 16260000
-32 1 16280000
-32 1 16300000
-32 1 16320000
-32 1 16340000
-32 1 16360000
-32 1 16380000
-32 1 16400000
-32 1 16420000
-32 1 16440000
-32 1 16460000
-32 1 16480000
-32 1 16500000
-32 1 16520000
-32 1 16540000
-32 1 16560000
-32 1 16580000
-32 1 16600000
-32 1 16620000
-32 1 16640000
+32 32 0
+32 32 20000
+32 32 40000
+32 32 60000
+32 32 80000
+32 32 100000
+32 32 120000
+32 32 140000
+32 32 160000
+32 32 180000
+32 32 200000
+32 32 220000
+32 32 240000
+32 32 260000
+32 32 280000
+32 32 300000
+32 32 320000
+32 32 340000
+32 32 360000
+32 32 380000
+32 32 400000
+32 32 420000
+32 32 440000
+32 32 460000
+32 32 480000
+32 32 500000
+32 32 520000
+32 32 540000
+32 32 560000
+32 32 580000
+32 32 600000
+32 32 620000
+32 32 640000
+32 32 660000
+32 32 680000
+32 32 700000
+32 32 720000
+32 32 740000
+32 32 760000
+32 32 780000
+32 32 800000
+32 32 820000
+32 32 840000
+32 32 860000
+32 32 880000
+32 32 900000
+32 32 920000
+32 32 940000
+32 32 960000
+32 32 980000
+32 32 1000000
+32 32 1020000
+32 32 1040000
+32 32 1060000
+32 32 1080000
+32 32 1100000
+32 32 1120000
+32 32 1140000
+32 32 1160000
+32 32 1180000
+32 32 1200000
+32 32 1220000
+32 32 1240000
+32 32 1260000
+32 32 1280000
+32 32 1300000
+32 32 1320000
+32 32 1340000
+32 32 1360000
+32 32 1380000
+32 32 1400000
+32 32 1420000
+32 32 1440000
+32 32 1460000
+32 32 1480000
+32 32 1500000
+32 32 1520000
+32 32 1540000
+32 32 1560000
+32 32 1580000
+32 32 1600000
+32 32 1620000
+32 32 1640000
+32 32 1660000
+32 32 1680000
+32 32 1700000
+32 32 1720000
+32 32 1740000
+32 32 1760000
+32 32 1780000
+32 32 1800000
+32 32 1820000
+32 32 1840000
+32 32 1860000
+32 32 1880000
+32 32 1900000
+32 32 1920000
+32 32 1940000
+32 32 1960000
+32 32 1980000
+32 32 2000000
+32 32 2020000
+32 32 2040000
+32 32 2060000
+32 32 2080000
+32 32 2100000
+32 32 2120000
+32 32 2140000
+32 32 2160000
+32 32 2180000
+32 32 2200000
+32 32 2220000
+32 32 2240000
+32 32 2260000
+32 32 2280000
+32 32 2300000
+32 32 2320000
+32 32 2340000
+32 32 2360000
+32 32 2380000
+32 32 2400000
+32 32 2420000
+32 32 2440000
+32 32 2460000
+32 32 2480000
+32 32 2500000
+32 32 2520000
+32 32 2540000
+32 32 2560000
+32 32 2580000
+32 32 2600000
+32 32 2620000
+32 32 2640000
+32 32 2660000
+32 32 2680000
+32 32 2700000
+32 32 2720000
+32 32 2740000
+32 32 2760000
+32 32 2780000
+32 32 2800000
+32 32 2820000
+32 32 2840000
+32 32 2860000
+32 32 2880000
+32 32 2900000
+32 32 2920000
+32 32 2940000
+32 32 2960000
+32 32 2980000
+32 32 3000000
+32 32 3020000
+32 32 3040000
+32 32 3060000
+32 32 3080000
+32 32 3100000
+32 32 3120000
+32 32 3140000
+32 32 3160000
+32 32 3180000
+32 32 3200000
+32 32 3220000
+32 32 3240000
+32 32 3260000
+32 32 3280000
+32 32 3300000
+32 32 3320000
+32 32 3340000
+32 32 3360000
+32 32 3380000
+32 32 3400000
+32 32 3420000
+32 32 3440000
+32 32 3460000
+32 32 3480000
+32 32 3500000
+32 32 3520000
+32 32 3540000
+32 32 3560000
+32 32 3580000
+32 32 3600000
+32 32 3620000
+32 32 3640000
+32 32 3660000
+32 32 3680000
+32 32 3700000
+32 32 3720000
+32 32 3740000
+32 32 3760000
+32 32 3780000
+32 32 3800000
+32 32 3820000
+32 32 3840000
+32 32 3860000
+32 32 3880000
+32 32 3900000
+32 32 3920000
+32 32 3940000
+32 32 3960000
+32 32 3980000
+32 32 4000000
+32 32 4020000
+32 32 4040000
+32 32 4060000
+32 32 4080000
+32 32 4100000
+32 32 4120000
+32 32 4140000
+32 32 4160000
+32 32 4180000
+32 32 4200000
+32 32 4220000
+32 32 4240000
+32 32 4260000
+32 32 4280000
+32 32 4300000
+32 32 4320000
+32 32 4340000
+32 32 4360000
+32 32 4380000
+32 32 4400000
+32 32 4420000
+32 32 4440000
+32 32 4460000
+32 32 4480000
+32 32 4500000
+32 32 4520000
+32 32 4540000
+32 32 4560000
+32 32 4580000
+32 32 4600000
+32 32 4620000
+32 32 4640000
+32 32 4660000
+32 32 4680000
+32 32 4700000
+32 32 4720000
+32 32 4740000
+32 32 4760000
+32 32 4780000
+32 32 4800000
+32 32 4820000
+32 32 4840000
+32 32 4860000
+32 32 4880000
+32 32 4900000
+32 32 4920000
+32 32 4940000
+32 32 4960000
+32 32 4980000
+32 32 5000000
+32 32 5020000
+32 32 5040000
+32 32 5060000
+32 32 5080000
+32 32 5100000
+32 32 5120000
+32 32 5140000
+32 32 5160000
+32 32 5180000
+32 32 5200000
+32 32 5220000
+32 32 5240000
+32 32 5260000
+32 32 5280000
+32 32 5300000
+32 32 5320000
+32 32 5340000
+32 32 5360000
+32 32 5380000
+32 32 5400000
+32 32 5420000
+32 32 5440000
+32 32 5460000
+32 32 5480000
+32 32 5500000
+32 32 5520000
+32 32 5540000
+32 32 5560000
+32 32 5580000
+32 32 5600000
+32 32 5620000
+32 32 5640000
+32 32 5660000
+32 32 5680000
+32 32 5700000
+32 32 5720000
+32 32 5740000
+32 32 5760000
+32 32 5780000
+32 32 5800000
+32 32 5820000
+32 32 5840000
+32 32 5860000
+32 32 5880000
+32 32 5900000
+32 32 5920000
+32 32 5940000
+32 32 5960000
+32 32 5980000
+32 32 6000000
+32 32 6020000
+32 32 6040000
+32 32 6060000
+32 32 6080000
+32 32 6100000
+32 32 6120000
+32 32 6140000
+32 32 6160000
+32 32 6180000
+32 32 6200000
+32 32 6220000
+32 32 6240000
+32 32 6260000
+32 32 6280000
+32 32 6300000
+32 32 6320000
+32 32 6340000
+32 32 6360000
+32 32 6380000
+32 32 6400000
+32 32 6420000
+32 32 6440000
+32 32 6460000
+32 32 6480000
+32 32 6500000
+32 32 6520000
+32 32 6540000
+32 32 6560000
+32 32 6580000
+32 32 6600000
+32 32 6620000
+32 32 6640000
+32 32 6660000
+32 32 6680000
+32 32 6700000
+32 32 6720000
+32 32 6740000
+32 32 6760000
+32 32 6780000
+32 32 6800000
+32 32 6820000
+32 32 6840000
+32 32 6860000
+32 32 6880000
+32 32 6900000
+32 32 6920000
+32 32 6940000
+32 32 6960000
+32 32 6980000
+32 32 7000000
+32 32 7020000
+32 32 7040000
+32 32 7060000
+32 32 7080000
+32 32 7100000
+32 32 7120000
+32 32 7140000
+32 32 7160000
+32 32 7180000
+32 32 7200000
+32 32 7220000
+32 32 7240000
+32 32 7260000
+32 32 7280000
+32 32 7300000
+32 32 7320000
+32 32 7340000
+32 32 7360000
+32 32 7380000
+32 32 7400000
+32 32 7420000
+32 32 7440000
+32 32 7460000
+32 32 7480000
+32 32 7500000
+32 32 7520000
+32 32 7540000
+32 32 7560000
+32 32 7580000
+32 32 7600000
+32 32 7620000
+32 32 7640000
+32 32 7660000
+32 32 7680000
+32 32 7700000
+32 32 7720000
+32 32 7740000
+32 32 7760000
+32 32 7780000
+32 32 7800000
+32 32 7820000
+32 32 7840000
+32 32 7860000
+32 32 7880000
+32 32 7900000
+32 32 7920000
+32 32 7940000
+32 32 7960000
+32 32 7980000
+32 32 8000000
+32 32 8020000
+32 32 8040000
+32 32 8060000
+32 32 8080000
+32 32 8100000
+32 32 8120000
+32 32 8140000
+32 32 8160000
+32 32 8180000
+32 32 8200000
+32 32 8220000
+32 32 8240000
+32 32 8260000
+32 32 8280000
+32 32 8300000
+32 32 8320000
+32 32 8340000
+32 32 8360000
+32 32 8380000
+32 32 8400000
+32 32 8420000
+32 32 8440000
+32 32 8460000
+32 32 8480000
+32 32 8500000
+32 32 8520000
+32 32 8540000
+32 32 8560000
+32 32 8580000
+32 32 8600000
+32 32 8620000
+32 32 8640000
+32 32 8660000
+32 32 8680000
+32 32 8700000
+32 32 8720000
+32 32 8740000
+32 32 8760000
+32 32 8780000
+32 32 8800000
+32 32 8820000
+32 32 8840000
+32 32 8860000
+32 32 8880000
+32 32 8900000
+32 32 8920000
+32 32 8940000
+32 32 8960000
+32 32 8980000
+32 32 9000000
+32 32 9020000
+32 32 9040000
+32 32 9060000
+32 32 9080000
+32 32 9100000
+32 32 9120000
+32 32 9140000
+32 32 9160000
+32 32 9180000
+32 32 9200000
+32 32 9220000
+32 32 9240000
+32 32 9260000
+32 32 9280000
+32 32 9300000
+32 32 9320000
+32 32 9340000
+32 32 9360000
+32 32 9380000
+32 32 9400000
+32 32 9420000
+32 32 9440000
+32 32 9460000
+32 32 9480000
+32 32 9500000
+32 32 9520000
+32 32 9540000
+32 32 9560000
+32 32 9580000
+32 32 9600000
+32 32 9620000
+32 32 9640000
+32 32 9660000
+32 32 9680000
+32 32 9700000
+32 32 9720000
+32 32 9740000
+32 32 9760000
+32 32 9780000
+32 32 9800000
+32 32 9820000
+32 32 9840000
+32 32 9860000
+32 32 9880000
+32 32 9900000
+32 32 9920000
+32 32 9940000
+32 32 9960000
+32 32 9980000
+32 32 10000000
+32 32 10020000
+32 32 10040000
+32 32 10060000
+32 32 10080000
+32 32 10100000
+32 32 10120000
+32 32 10140000
+32 32 10160000
+32 32 10180000
+32 32 10200000
+32 32 10220000
+32 32 10240000
+32 32 10260000
+32 32 10280000
+32 32 10300000
+32 32 10320000
+32 32 10340000
+32 32 10360000
+32 32 10380000
+32 32 10400000
+32 32 10420000
+32 32 10440000
+32 32 10460000
+32 32 10480000
+32 32 10500000
+32 32 10520000
+32 32 10540000
+32 32 10560000
+32 32 10580000
+32 32 10600000
+32 32 10620000
+32 32 10640000
+32 32 10660000
+32 32 10680000
+32 32 10700000
+32 32 10720000
+32 32 10740000
+32 32 10760000
+32 32 10780000
+32 32 10800000
+32 32 10820000
+32 32 10840000
+32 32 10860000
+32 32 10880000
+32 32 10900000
+32 32 10920000
+32 32 10940000
+32 32 10960000
+32 32 10980000
+32 32 11000000
+32 32 11020000
+32 32 11040000
+32 32 11060000
+32 32 11080000
+32 32 11100000
+32 32 11120000
+32 32 11140000
+32 32 11160000
+32 32 11180000
+32 32 11200000
+32 32 11220000
+32 32 11240000
+32 32 11260000
+32 32 11280000
+32 32 11300000
+32 32 11320000
+32 32 11340000
+32 32 11360000
+32 32 11380000
+32 32 11400000
+32 32 11420000
+32 32 11440000
+32 32 11460000
+32 32 11480000
+32 32 11500000
+32 32 11520000
+32 32 11540000
+32 32 11560000
+32 32 11580000
+32 32 11600000
+32 32 11620000
+32 32 11640000
+32 32 11660000
+32 32 11680000
+32 32 11700000
+32 32 11720000
+32 32 11740000
+32 32 11760000
+32 32 11780000
+32 32 11800000
+32 32 11820000
+32 32 11840000
+32 32 11860000
+32 32 11880000
+32 32 11900000
+32 32 11920000
+32 32 11940000
+32 32 11960000
+32 32 11980000
+32 32 12000000
+32 32 12020000
+32 32 12040000
+32 32 12060000
+32 32 12080000
+32 32 12100000
+32 32 12120000
+32 32 12140000
+32 32 12160000
+32 32 12180000
+32 32 12200000
+32 32 12220000
+32 32 12240000
+32 32 12260000
+32 32 12280000
+32 32 12300000
+32 32 12320000
+32 32 12340000
+32 32 12360000
+32 32 12380000
+32 32 12400000
+32 32 12420000
+32 32 12440000
+32 32 12460000
+32 32 12480000
+32 32 12500000
+32 32 12520000
+32 32 12540000
+32 32 12560000
+32 32 12580000
+32 32 12600000
+32 32 12620000
+32 32 12640000
+32 32 12660000
+32 32 12680000
+32 32 12700000
+32 32 12720000
+32 32 12740000
+32 32 12760000
+32 32 12780000
+32 32 12800000
+32 32 12820000
+32 32 12840000
+32 32 12860000
+32 32 12880000
+32 32 12900000
+32 32 12920000
+32 32 12940000
+32 32 12960000
+32 32 12980000
+32 32 13000000
+32 32 13020000
+32 32 13040000
+32 32 13060000
+32 32 13080000
+32 32 13100000
+32 32 13120000
+32 32 13140000
+32 32 13160000
+32 32 13180000
+32 32 13200000
+32 32 13220000
+32 32 13240000
+32 32 13260000
+32 32 13280000
+32 32 13300000
+32 32 13320000
+32 32 13340000
+32 32 13360000
+32 32 13380000
+32 32 13400000
+32 32 13420000
+32 32 13440000
+32 32 13460000
+32 32 13480000
+32 32 13500000
+32 32 13520000
+32 32 13540000
+32 32 13560000
+32 32 13580000
+32 32 13600000
+32 32 13620000
+32 32 13640000
+32 32 13660000
+32 32 13680000
+32 32 13700000
+32 32 13720000
+32 32 13740000
+32 32 13760000
+32 32 13780000
+32 32 13800000
+32 32 13820000
+32 32 13840000
+32 32 13860000
+32 32 13880000
+32 32 13900000
+32 32 13920000
+32 32 13940000
+32 32 13960000
+32 32 13980000
+32 32 14000000
+32 32 14020000
+32 32 14040000
+32 32 14060000
+32 32 14080000
+32 32 14100000
+32 32 14120000
+32 32 14140000
+32 32 14160000
+32 32 14180000
+32 32 14200000
+32 32 14220000
+32 32 14240000
+32 32 14260000
+32 32 14280000
+32 32 14300000
+32 32 14320000
+32 32 14340000
+32 32 14360000
+32 32 14380000
+32 32 14400000
+32 32 14420000
+32 32 14440000
+32 32 14460000
+32 32 14480000
+32 32 14500000
+32 32 14520000
+32 32 14540000
+32 32 14560000
+32 32 14580000
+32 32 14600000
+32 32 14620000
+32 32 14640000
+32 32 14660000
+32 32 14680000
+32 32 14700000
+32 32 14720000
+32 32 14740000
+32 32 14760000
+32 32 14780000
+32 32 14800000
+32 32 14820000
+32 32 14840000
+32 32 14860000
+32 32 14880000
+32 32 14900000
+32 32 14920000
+32 32 14940000
+32 32 14960000
+32 32 14980000
+32 32 15000000
+32 32 15020000
+32 32 15040000
+32 32 15060000
+32 32 15080000
+32 32 15100000
+32 32 15120000
+32 32 15140000
+32 32 15160000
+32 32 15180000
+32 32 15200000
+32 32 15220000
+32 32 15240000
+32 32 15260000
+32 32 15280000
+32 32 15300000
+32 32 15320000
+32 32 15340000
+32 32 15360000
+32 32 15380000
+32 32 15400000
+32 32 15420000
+32 32 15440000
+32 32 15460000
+32 32 15480000
+32 32 15500000
+32 32 15520000
+32 32 15540000
+32 32 15560000
+32 32 15580000
+32 32 15600000
+32 32 15620000
+32 32 15640000
+32 32 15660000
+32 32 15680000
+32 32 15700000
+32 32 15720000
+32 32 15740000
+32 32 15760000
+32 32 15780000
+32 32 15800000
+32 32 15820000
+32 32 15840000
+32 32 15860000
+32 32 15880000
+32 32 15900000
+32 32 15920000
+32 32 15940000
+32 32 15960000
+32 32 15980000
+32 32 16000000
+32 32 16020000
+32 32 16040000
+32 32 16060000
+32 32 16080000
+32 32 16100000
+32 32 16120000
+32 32 16140000
+32 32 16160000
+32 32 16180000
+32 32 16200000
+32 32 16220000
+32 32 16240000
+32 32 16260000
+32 32 16280000
+32 32 16300000
+32 32 16320000
+32 32 16340000
+32 32 16360000
+32 32 16380000
+32 32 16400000
+32 32 16420000
+32 32 16440000
+32 32 16460000
+32 32 16480000
+32 32 16500000
+32 32 16520000
+32 32 16540000
+32 32 16560000
+32 32 16580000
+32 32 16600000
+32 32 16620000
+32 32 16640000
diff --git a/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
index 83f83b6..30235cf 100644
--- a/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
@@ -158,8 +158,10 @@
 
 /*
  * RSSIMonitoring:
- * Ensures that calls to enable and disable RSSI monitoring will return
- * a success status code.
+ * Ensures that calls to enable RSSI monitoring will return an error status
+ * code if device is not connected to an AP.
+ * Ensures that calls to disable RSSI monitoring will return an error status
+ * code if RSSI monitoring is not enabled.
  */
 TEST_F(WifiStaIfaceHidlTest, RSSIMonitoring) {
     if (!isCapabilitySupported(
@@ -171,11 +173,13 @@
     const CommandId kCmd = 1;
     const Rssi kMaxRssi = -50;
     const Rssi kMinRssi = -90;
-    EXPECT_EQ(WifiStatusCode::SUCCESS,
+    // This is going to fail because device is not connected to an AP.
+    EXPECT_NE(WifiStatusCode::SUCCESS,
               HIDL_INVOKE(wifi_sta_iface_, startRssiMonitoring, kCmd, kMaxRssi,
                           kMinRssi)
                   .code);
-    EXPECT_EQ(WifiStatusCode::SUCCESS,
+    // This is going to fail because RSSI monitoring is not enabled.
+    EXPECT_NE(WifiStatusCode::SUCCESS,
               HIDL_INVOKE(wifi_sta_iface_, stopRssiMonitoring, kCmd).code);
 }
 
