Merge "Omx vts tests" into oc-dev
am: 2e2e255125
Change-Id: Ifcf78ffd3c042e3eeab90016dc822b747a9cadc1
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 abd044d..7240964 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
@@ -87,13 +87,6 @@
return status;
}
-Return<android::hardware::media::omx::V1_0::Status> setRole(
- sp<IOmxNode> omxNode, const char* role) {
- OMX_PARAM_COMPONENTROLETYPE params;
- strcpy((char*)params.cRole, role);
- return setParam(omxNode, OMX_IndexParamStandardComponentRole, ¶ms);
-}
-
void enumerateProfile(sp<IOmxNode> omxNode, OMX_U32 portIndex,
std::vector<int32_t>* arrProfile) {
android::hardware::media::omx::V1_0::Status status;
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 a762436..70142f2 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
@@ -30,9 +30,6 @@
Return<android::hardware::media::omx::V1_0::Status> setAudioPortFormat(
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);
-
void enumerateProfile(sp<IOmxNode> omxNode, OMX_U32 portIndex,
std::vector<int32_t>* arrProfile);
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
index 01d7751..e81e6dd 100755
--- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
@@ -36,6 +36,7 @@
using ::android::hardware::media::omx::V1_0::Message;
using ::android::hardware::media::omx::V1_0::CodecBuffer;
using ::android::hardware::media::omx::V1_0::PortMode;
+using ::android::hardware::media::omx::V1_0::Status;
using ::android::hidl::allocator::V1_0::IAllocator;
using ::android::hidl::memory::V1_0::IMemory;
using ::android::hidl::memory::V1_0::IMapper;
@@ -51,6 +52,14 @@
#include <media_hidl_test_common.h>
#include <memory>
+// set component role
+Return<android::hardware::media::omx::V1_0::Status> setRole(
+ sp<IOmxNode> omxNode, const char* role) {
+ OMX_PARAM_COMPONENTROLETYPE params;
+ strcpy((char*)params.cRole, role);
+ return setParam(omxNode, OMX_IndexParamStandardComponentRole, ¶ms);
+}
+
// allocate buffers needed on a component port
void allocatePortBuffers(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
@@ -293,51 +302,59 @@
void dispatchOutputBuffer(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
size_t bufferIndex, PortMode portMode) {
- if (portMode == PortMode::DYNAMIC_ANW_BUFFER) {
- android::hardware::media::omx::V1_0::Status status;
- CodecBuffer t = (*buffArray)[bufferIndex].omxBuffer;
- t.type = CodecBuffer::Type::ANW_BUFFER;
- 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;
- } else {
- 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;
+ android::hardware::media::omx::V1_0::Status status;
+ CodecBuffer t;
+ native_handle_t* fenceNh = native_handle_create(0, 0);
+ ASSERT_NE(fenceNh, nullptr);
+ switch (portMode) {
+ case PortMode::DYNAMIC_ANW_BUFFER:
+ t = (*buffArray)[bufferIndex].omxBuffer;
+ t.type = CodecBuffer::Type::ANW_BUFFER;
+ status =
+ omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
+ break;
+ case PortMode::PRESET_SECURE_BUFFER:
+ case PortMode::PRESET_BYTE_BUFFER:
+ 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;
+ status =
+ omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
+ break;
+ default:
+ status = Status::NAME_NOT_FOUND;
}
+ 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,
size_t bufferIndex, int bytesCount, uint32_t flags,
- uint64_t timestamp) {
+ uint64_t timestamp, PortMode portMode) {
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 = bytesCount;
native_handle_t* fenceNh = native_handle_create(0, 0);
ASSERT_NE(fenceNh, nullptr);
- status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t, flags,
- timestamp, fenceNh);
+ switch (portMode) {
+ case PortMode::PRESET_SECURE_BUFFER:
+ case PortMode::PRESET_BYTE_BUFFER:
+ 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 = bytesCount;
+ status = omxNode->emptyBuffer((*buffArray)[bufferIndex].id, t,
+ flags, timestamp, fenceNh);
+ break;
+ default:
+ status = Status::NAME_NOT_FOUND;
+ }
native_handle_close(fenceNh);
native_handle_delete(fenceNh);
ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
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 a402532..53bbe60 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
@@ -256,6 +256,9 @@
/*
* common functions declarations
*/
+Return<android::hardware::media::omx::V1_0::Status> setRole(
+ sp<IOmxNode> omxNode, const char* role);
+
void allocatePortBuffers(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
OMX_U32 portIndex,
@@ -288,7 +291,8 @@
void dispatchInputBuffer(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
size_t bufferIndex, int bytesCount, uint32_t flags,
- uint64_t timestamp);
+ uint64_t timestamp,
+ PortMode portMode = PortMode::PRESET_BYTE_BUFFER);
void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
android::Vector<BufferInfo>* iBuffer,
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 39e8864..e6f51de 100644
--- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
+++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
@@ -164,6 +164,14 @@
}
}
if (compClass == unknown_class) disableTest = true;
+ isSecure = false;
+ size_t suffixLen = strlen(".secure");
+ if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
+ isSecure =
+ !strcmp(gEnv->getComponent().c_str() +
+ strlen(gEnv->getComponent().c_str()) - suffixLen,
+ ".secure");
+ }
if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
}
@@ -186,6 +194,7 @@
sp<CodecObserver> observer;
sp<IOmxNode> omxNode;
standardCompClass compClass;
+ bool isSecure;
bool disableTest;
protected:
@@ -197,6 +206,25 @@
// Random Index used for monkey testing while get/set parameters
#define RANDOM_INDEX 1729
+void initPortMode(PortMode* pm, bool isSecure,
+ ComponentHidlTest::standardCompClass compClass) {
+ pm[0] = PortMode::PRESET_BYTE_BUFFER;
+ pm[1] = PortMode::PRESET_BYTE_BUFFER;
+ if (isSecure) {
+ switch (compClass) {
+ case ComponentHidlTest::video_decoder:
+ pm[0] = PortMode::PRESET_SECURE_BUFFER;
+ break;
+ case ComponentHidlTest::video_encoder:
+ pm[1] = PortMode::PRESET_SECURE_BUFFER;
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+}
+
// get/set video component port format
Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
sp<IOmxNode> omxNode, OMX_U32 portIndex,
@@ -304,14 +332,6 @@
return status;
}
-// set component role
-Return<android::hardware::media::omx::V1_0::Status> setRole(
- sp<IOmxNode> omxNode, const char* role) {
- OMX_PARAM_COMPONENTROLETYPE params;
- strcpy((char*)params.cRole, role);
- return setParam(omxNode, OMX_IndexParamStandardComponentRole, ¶ms);
-}
-
// test dispatch message API call
TEST_F(ComponentHidlTest, dispatchMsg) {
description("test dispatch message API call");
@@ -320,34 +340,21 @@
Message msgin, msgout;
msgin.type = Message::Type::EVENT;
-
- // dispatch EOS event, normally this is by component when it receives a
- // EOS flag
- msgin.data.eventData.event = OMX_EventBufferFlag;
- msgin.data.eventData.data1 = 0U;
- msgin.data.eventData.data2 = (uint32_t)OMX_BUFFERFLAG_EOS;
+ msgin.data.eventData.event = OMX_EventError;
+ msgin.data.eventData.data1 = 0xdeaf;
+ msgin.data.eventData.data2 = 0xd00d;
+ msgin.data.eventData.data3 = 0x01ce;
+ msgin.data.eventData.data4 = 0xfa11;
status = omxNode->dispatchMessage(msgin);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = observer->dequeueMessage(&msgout, DEFAULT_TIMEOUT);
- ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
- ASSERT_EQ(msgout.type, msgin.type);
- ASSERT_EQ(msgout.data.eventData.event, msgin.data.eventData.event);
- ASSERT_EQ(msgout.data.eventData.data1, msgin.data.eventData.data1);
- ASSERT_EQ(msgout.data.eventData.data2, msgin.data.eventData.data2);
-
- // dispatch dataspace changed event
- msgin.data.eventData.event = OMX_EventDataSpaceChanged;
- msgin.data.eventData.data1 = 281149440U; // V0_BT601_625;
- msgin.data.eventData.data2 = 0x1111;
- msgin.data.eventData.data3 = 0x24; // RAW_OPAQUE
- status = omxNode->dispatchMessage(msgin);
- ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- status = observer->dequeueMessage(&msgout, DEFAULT_TIMEOUT);
- ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
- ASSERT_EQ(msgout.type, msgin.type);
- ASSERT_EQ(msgout.data.eventData.event, msgin.data.eventData.event);
- ASSERT_EQ(msgout.data.eventData.data1, msgin.data.eventData.data1);
- ASSERT_EQ(msgout.data.eventData.data2, msgin.data.eventData.data2);
+ EXPECT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+ EXPECT_EQ(msgout.type, msgin.type);
+ EXPECT_EQ(msgout.data.eventData.event, msgin.data.eventData.event);
+ EXPECT_EQ(msgout.data.eventData.data1, msgin.data.eventData.data1);
+ EXPECT_EQ(msgout.data.eventData.data2, msgin.data.eventData.data2);
+ EXPECT_EQ(msgout.data.eventData.data3, msgin.data.eventData.data3);
+ EXPECT_EQ(msgout.data.eventData.data4, msgin.data.eventData.data4);
}
// set component role
@@ -464,116 +471,86 @@
kPortIndexOutput = kPortIndexInput + 1;
}
- // r/w default i/o port parameters
- OMX_PARAM_PORTDEFINITIONTYPE iPortDef;
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexInput, &iPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- if (status == android::hardware::media::omx::V1_0::Status::OK) {
- EXPECT_EQ(iPortDef.eDir, OMX_DirInput);
- EXPECT_EQ(iPortDef.bEnabled, OMX_TRUE);
- EXPECT_EQ(iPortDef.bPopulated, OMX_FALSE);
- EXPECT_GE(iPortDef.nBufferCountMin, 1U);
- EXPECT_GE(iPortDef.nBufferCountActual, iPortDef.nBufferCountMin);
- if (compClass == audio_encoder || compClass == audio_decoder) {
- EXPECT_EQ(iPortDef.eDomain, OMX_PortDomainAudio);
- if (compClass == audio_decoder) {
- iPortDef.format.audio.bFlagErrorConcealment = OMX_TRUE;
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexInput, &iPortDef);
+ for (size_t i = kPortIndexInput; i < kPortIndexOutput; i++) {
+ OMX_PARAM_PORTDEFINITIONTYPE portDef;
+ status =
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ if (status == android::hardware::media::omx::V1_0::Status::OK) {
+ EXPECT_EQ(portDef.eDir, i - kPortIndexInput); // OMX_DirInput
+ EXPECT_EQ(portDef.bEnabled, OMX_TRUE);
+ EXPECT_EQ(portDef.bPopulated, OMX_FALSE);
+ EXPECT_GE(portDef.nBufferCountMin, 1U);
+ EXPECT_GE(portDef.nBufferCountActual, portDef.nBufferCountMin);
+ if (compClass == audio_encoder || compClass == audio_decoder) {
+ EXPECT_EQ(portDef.eDomain, OMX_PortDomainAudio);
+ } else if (compClass == video_encoder ||
+ compClass == video_decoder) {
+ EXPECT_EQ(portDef.eDomain, OMX_PortDomainVideo);
}
- } 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,
- kPortIndexInput, &iPortDef);
- EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK);
- // Edit Read-Only fields.
- iPortDef.eDir = OMX_DirOutput; // Read Only field
- iPortDef.nBufferCountActual = dummy.nBufferCountActual << 1;
- iPortDef.nBufferCountMin = dummy.nBufferCountMin
- << 1; // Read Only field
- iPortDef.nBufferSize = dummy.nBufferSize << 1; // Read Only field
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexInput, &iPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexInput, &iPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- EXPECT_EQ(iPortDef.nBufferCountActual, dummy.nBufferCountActual << 1);
- if ((iPortDef.eDir != OMX_DirInput) ||
- (iPortDef.nBufferCountMin != dummy.nBufferCountMin) ||
- (iPortDef.nBufferSize != dummy.nBufferSize)) {
- std::cerr << "[ ] Warning ! Component input port does not "
- "preserve Read-Only fields \n";
- }
- }
+ OMX_PARAM_PORTDEFINITIONTYPE mirror = portDef;
- OMX_PARAM_PORTDEFINITIONTYPE oPortDef;
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &oPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
- EXPECT_EQ(oPortDef.eDir, OMX_DirOutput);
- EXPECT_EQ(oPortDef.bEnabled, OMX_TRUE);
- EXPECT_EQ(oPortDef.bPopulated, OMX_FALSE);
- EXPECT_GE(oPortDef.nBufferCountMin, 1U);
- EXPECT_GE(oPortDef.nBufferCountActual, oPortDef.nBufferCountMin);
- if (compClass == audio_encoder || compClass == audio_decoder) {
- EXPECT_EQ(oPortDef.eDomain, OMX_PortDomainAudio);
- if (compClass == audio_encoder) {
- oPortDef.format.audio.bFlagErrorConcealment = OMX_TRUE;
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &oPortDef);
+ // nBufferCountActual >= nBufferCountMin
+ portDef.nBufferCountActual = portDef.nBufferCountMin - 1;
+ status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ EXPECT_NE(status,
+ ::android::hardware::media::omx::V1_0::Status::OK);
+
+ // Edit Read-Only fields.
+ portDef = mirror;
+ portDef.eDir = static_cast<OMX_DIRTYPE>(RANDOM_INDEX);
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ EXPECT_EQ(portDef.eDir, mirror.eDir);
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
+
+ portDef = mirror;
+ portDef.nBufferSize >>= 1;
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ EXPECT_EQ(portDef.nBufferSize, mirror.nBufferSize);
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
+
+ portDef = mirror;
+ portDef.nBufferCountMin += 1;
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ EXPECT_EQ(portDef.nBufferCountMin, mirror.nBufferCountMin);
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
+
+ portDef = mirror;
+ portDef.nBufferCountActual += 1;
+ status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ EXPECT_EQ(portDef.nBufferCountActual,
+ mirror.nBufferCountActual + 1);
}
- } 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);
+
+ portDef = mirror;
+ portDef.nBufferSize = mirror.nBufferSize << 1;
+ status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ if (portDef.nBufferSize != mirror.nBufferSize) {
+ std::cout
+ << "[ ] Warning ! Component input port does "
+ "not preserve Read-Only fields \n";
+ }
}
}
- 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,
- kPortIndexOutput, &oPortDef);
- EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK);
- // Edit Read-Only fields.
- oPortDef.eDir = OMX_DirInput; // Read Only field
- oPortDef.nBufferCountActual = dummy.nBufferCountActual << 1;
- oPortDef.nBufferCountMin = dummy.nBufferCountMin
- << 1; // Read Only field
- oPortDef.nBufferSize = dummy.nBufferSize << 1; // Read Only field
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &oPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &oPortDef);
- EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- EXPECT_EQ(oPortDef.nBufferCountActual, dummy.nBufferCountActual << 1);
- if ((oPortDef.eDir != OMX_DirOutput) ||
- (oPortDef.nBufferCountMin != dummy.nBufferCountMin) ||
- (oPortDef.nBufferSize != dummy.nBufferSize)) {
- std::cerr << "[ ] Warning ! Component output port does "
- "not preserve Read-Only fields \n";
- }
}
}
// populate port test
TEST_F(ComponentHidlTest, PopulatePort) {
description("Verify bPopulated field of a component port");
- if (disableTest) return;
+ if (disableTest || isSecure) return;
android::hardware::media::omx::V1_0::Status status;
OMX_U32 portBase = 0;
@@ -664,21 +641,29 @@
android::Vector<BufferInfo> iBuffer, oBuffer;
+ // set port mode
+ PortMode portMode[2];
+ initPortMode(portMode, isSecure, compClass);
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput);
+ kPortIndexInput, kPortIndexOutput, portMode);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
// dispatch buffers
for (size_t i = 0; i < oBuffer.size(); i++) {
- dispatchOutputBuffer(omxNode, &oBuffer, i);
+ dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1]);
}
// flush port
flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
kPortIndexOutput);
// dispatch buffers
for (size_t i = 0; i < iBuffer.size(); i++) {
- dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0);
+ dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0, portMode[0]);
}
// flush ports
flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
@@ -714,14 +699,22 @@
android::Vector<BufferInfo> iBuffer, oBuffer;
+ // set port mode
+ PortMode portMode[2];
+ initPortMode(portMode, isSecure, compClass);
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput);
+ kPortIndexInput, kPortIndexOutput, portMode);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
// dispatch buffers
for (size_t i = 0; i < oBuffer.size(); i++) {
- dispatchOutputBuffer(omxNode, &oBuffer, i);
+ dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1]);
}
// set state to idle
changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -729,7 +722,7 @@
changeStateIdletoExecute(omxNode, observer);
// dispatch buffers
for (size_t i = 0; i < iBuffer.size(); i++) {
- dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0);
+ dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0, portMode[0]);
}
// set state to idle
changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -741,7 +734,7 @@
// state transitions test - monkeying
TEST_F(ComponentHidlTest, StateTransitions_M) {
description("Test State Transitions monkeying");
- if (disableTest) return;
+ if (disableTest || isSecure) return;
android::hardware::media::omx::V1_0::Status status;
uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
Message msg;
@@ -878,9 +871,17 @@
// Component State :: Idle
android::Vector<BufferInfo> pBuffer[2];
+ // set port mode
+ PortMode portMode[2];
+ initPortMode(portMode, isSecure, compClass);
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1],
- kPortIndexInput, kPortIndexOutput);
+ kPortIndexInput, kPortIndexOutput, portMode);
for (size_t i = portBase; i < portBase + 2; i++) {
status =
@@ -929,7 +930,8 @@
ASSERT_EQ(status,
android::hardware::media::omx::V1_0::Status::TIMED_OUT);
- allocatePortBuffers(omxNode, &pBuffer[i - portBase], i);
+ allocatePortBuffers(omxNode, &pBuffer[i - portBase], i,
+ portMode[i - portBase]);
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
&pBuffer[0], &pBuffer[1]);
ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
@@ -973,16 +975,24 @@
// Component State :: Idle
android::Vector<BufferInfo> pBuffer[2];
+ // set port mode
+ PortMode portMode[2];
+ initPortMode(portMode, isSecure, compClass);
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1],
- kPortIndexInput, kPortIndexOutput);
+ kPortIndexInput, kPortIndexOutput, portMode);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
// dispatch buffers
for (size_t i = 0; i < pBuffer[1].size(); i++) {
- dispatchOutputBuffer(omxNode, &pBuffer[1], i);
+ dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1]);
}
for (size_t i = portBase; i < portBase + 2; i++) {
@@ -1035,7 +1045,8 @@
ASSERT_EQ(status,
android::hardware::media::omx::V1_0::Status::TIMED_OUT);
- allocatePortBuffers(omxNode, &pBuffer[i - portBase], i);
+ allocatePortBuffers(omxNode, &pBuffer[i - portBase], i,
+ portMode[i - portBase]);
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
&pBuffer[0], &pBuffer[1]);
ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
@@ -1060,7 +1071,7 @@
TEST_F(ComponentHidlTest, PortEnableDisable_M) {
description(
"Test Port Enable and Disable Monkeying (Component State :: Loaded)");
- if (disableTest) return;
+ if (disableTest || isSecure) return;
android::hardware::media::omx::V1_0::Status status;
OMX_U32 portBase = 0;
Message msg;
diff --git a/media/omx/1.0/vts/functional/master/Android.bp b/media/omx/1.0/vts/functional/master/Android.bp
index 6edbf4a..e24b79b 100644
--- a/media/omx/1.0/vts/functional/master/Android.bp
+++ b/media/omx/1.0/vts/functional/master/Android.bp
@@ -27,6 +27,8 @@
"libhwbinder",
"libnativehelper",
"libutils",
+ "android.hidl.allocator@1.0",
+ "android.hidl.memory@1.0",
"android.hardware.media.omx@1.0",
],
static_libs: ["VtsHalHidlTargetTestBase"],
@@ -34,5 +36,9 @@
"-O0",
"-g",
],
+ include_dirs: [
+ "frameworks/native/include/media/openmax/",
+ "hardware/interfaces/media/omx/1.0/vts/functional/common",
+ ],
}
diff --git a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
index 9c66c25..9958869 100644
--- a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
+++ b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
@@ -17,21 +17,35 @@
#define LOG_TAG "media_omx_hidl_master_test"
#include <android-base/logging.h>
-#include <VtsHalHidlTargetTestBase.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
+#include <android/hardware/media/omx/1.0/IOmxNode.h>
+#include <android/hardware/media/omx/1.0/IOmxObserver.h>
#include <android/hardware/media/omx/1.0/IOmxStore.h>
#include <android/hardware/media/omx/1.0/types.h>
-#include <getopt.h>
-#include <log/log.h>
+#include <android/hidl/allocator/1.0/IAllocator.h>
+#include <android/hidl/memory/1.0/IMapper.h>
+#include <android/hidl/memory/1.0/IMemory.h>
-using ::android::hardware::media::omx::V1_0::IOmxStore;
using ::android::hardware::media::omx::V1_0::IOmx;
+using ::android::hardware::media::omx::V1_0::IOmxObserver;
+using ::android::hardware::media::omx::V1_0::IOmxNode;
+using ::android::hardware::media::omx::V1_0::IOmxStore;
+using ::android::hardware::media::omx::V1_0::Message;
+using ::android::hardware::media::omx::V1_0::CodecBuffer;
+using ::android::hardware::media::omx::V1_0::PortMode;
+using ::android::hidl::allocator::V1_0::IAllocator;
+using ::android::hidl::memory::V1_0::IMemory;
+using ::android::hidl::memory::V1_0::IMapper;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::sp;
+#include <VtsHalHidlTargetTestBase.h>
+#include <getopt.h>
+#include <media_hidl_test_common.h>
+
// A class for test environment setup
class ComponentTestEnvironment : public ::testing::Environment {
public:
@@ -127,8 +141,7 @@
attributes = _nl;
})
.isOk());
- if (attributes.size() == 0)
- std::cerr << "[ ] Warning ! Attribute list empty \n";
+ if (attributes.size() == 0) ALOGV("Warning, Attribute list empty");
}
// get node prefix
@@ -137,8 +150,7 @@
hidl_string prefix;
omxStore->getNodePrefix(
[&prefix](hidl_string const& _nl) { prefix = _nl; });
- if (prefix.empty())
- std::cerr << "[ ] Warning ! Node Prefix empty \n";
+ if (prefix.empty()) ALOGV("Warning, Node Prefix empty");
}
// list roles
@@ -148,15 +160,15 @@
omxStore->listRoles([&roleList](hidl_vec<IOmxStore::RoleInfo> const& _nl) {
roleList = _nl;
});
- if (roleList.size() == 0)
- std::cerr << "[ ] Warning ! RoleInfo list empty \n";
+ if (roleList.size() == 0) ALOGV("Warning, RoleInfo list empty");
}
-// list components and roles
+// list components and roles.
TEST_F(MasterHidlTest, ListNodes) {
description("enumerate component and roles");
android::hardware::media::omx::V1_0::Status status;
hidl_vec<IOmx::ComponentInfo> nodeList;
+ bool isPass = true;
EXPECT_TRUE(
omx->listNodes([&status, &nodeList](
android::hardware::media::omx::V1_0::Status _s,
@@ -166,9 +178,36 @@
})
.isOk());
if (nodeList.size() == 0)
- std::cerr << "[ ] Warning ! ComponentInfo list empty \n";
- else
- displayComponentInfo(nodeList);
+ ALOGV("Warning, ComponentInfo list empty");
+ else {
+ // displayComponentInfo(nodeList);
+ for (size_t i = 0; i < nodeList.size(); i++) {
+ sp<CodecObserver> observer = nullptr;
+ sp<IOmxNode> omxNode = nullptr;
+ observer = new CodecObserver(nullptr);
+ ASSERT_NE(observer, nullptr);
+ EXPECT_TRUE(
+ omx->allocateNode(
+ nodeList[i].mName, observer,
+ [&](android::hardware::media::omx::V1_0::Status _s,
+ sp<IOmxNode> const& _nl) {
+ status = _s;
+ omxNode = _nl;
+ })
+ .isOk());
+ if (omxNode == nullptr) {
+ isPass = false;
+ std::cerr << "[ !OK ] " << nodeList[i].mName.c_str()
+ << "\n";
+ } else {
+ EXPECT_TRUE((omxNode->freeNode()).isOk());
+ omxNode = nullptr;
+ // std::cout << "[ OK ] " << nodeList[i].mName.c_str() <<
+ // "\n";
+ }
+ }
+ }
+ EXPECT_TRUE(isPass);
}
int main(int argc, char** argv) {
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 8ab01b5..9b0be51 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
@@ -209,10 +209,11 @@
isSecure = false;
size_t suffixLen = strlen(".secure");
if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
+ isSecure =
+ !strcmp(gEnv->getComponent().c_str() +
+ strlen(gEnv->getComponent().c_str()) - suffixLen,
+ ".secure");
}
- isSecure = !strcmp(gEnv->getComponent().c_str() +
- strlen(gEnv->getComponent().c_str()) - suffixLen,
- ".secure");
if (isSecure) disableTest = true;
if (disableTest) std::cout << "[ ] Warning ! Test Disabled\n";
}
@@ -784,25 +785,15 @@
eleInfo.close();
// set port mode
- if (isSecure) {
- portMode[0] = PortMode::PRESET_SECURE_BUFFER;
- portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
- status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
- ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ portMode[0] = PortMode::PRESET_BYTE_BUFFER;
+ portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK) {
+ portMode[1] = PortMode::PRESET_BYTE_BUFFER;
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- } else {
- portMode[0] = PortMode::PRESET_BYTE_BUFFER;
- portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
- status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
- ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
- if (status != ::android::hardware::media::omx::V1_0::Status::OK) {
- portMode[1] = PortMode::PRESET_BYTE_BUFFER;
- status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
- ASSERT_EQ(status,
- ::android::hardware::media::omx::V1_0::Status::OK);
- }
}
// set Port Params
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 7a57430..45d0856 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
@@ -221,10 +221,11 @@
isSecure = false;
size_t suffixLen = strlen(".secure");
if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
+ isSecure =
+ !strcmp(gEnv->getComponent().c_str() +
+ strlen(gEnv->getComponent().c_str()) - suffixLen,
+ ".secure");
}
- isSecure = !strcmp(gEnv->getComponent().c_str() +
- strlen(gEnv->getComponent().c_str()) - suffixLen,
- ".secure");
if (isSecure) disableTest = true;
if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
}
@@ -1213,7 +1214,6 @@
// set port mode
PortMode portMode[2];
portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
- if (isSecure && prependSPSPPS) portMode[1] = PortMode::PRESET_SECURE_BUFFER;
status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
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 271b4d4..2c81805 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
@@ -114,13 +114,6 @@
return status;
}
-Return<android::hardware::media::omx::V1_0::Status> setRole(
- sp<IOmxNode> omxNode, const char* role) {
- OMX_PARAM_COMPONENTROLETYPE params;
- strcpy((char*)params.cRole, role);
- return setParam(omxNode, OMX_IndexParamStandardComponentRole, ¶ms);
-}
-
void enumerateProfileAndLevel(sp<IOmxNode> omxNode, OMX_U32 portIndex,
std::vector<int32_t>* arrProfile,
std::vector<int32_t>* arrLevel) {
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 ce4272c..e492779 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
@@ -31,9 +31,6 @@
OMX_VIDEO_CODINGTYPE eCompressionFormat, OMX_COLOR_FORMATTYPE eColorFormat,
OMX_U32 xFramerate);
-Return<android::hardware::media::omx::V1_0::Status> setRole(
- sp<IOmxNode> omxNode, const char* role);
-
void enumerateProfileAndLevel(sp<IOmxNode> omxNode, OMX_U32 portIndex,
std::vector<int32_t>* arrProfile,
std::vector<int32_t>* arrLevel);
diff --git a/media/res/bbb_opus_stereo_128kbps_48000hz.info b/media/res/bbb_opus_stereo_128kbps_48000hz.info
index 9160c5c..12a6b99 100755
--- a/media/res/bbb_opus_stereo_128kbps_48000hz.info
+++ b/media/res/bbb_opus_stereo_128kbps_48000hz.info
@@ -1,500 +1,504 @@
19 128 0
8 128 0
-615 32 0
-557 32 13500
-311 32 33500
-329 32 53500
-341 32 73500
-370 32 93500
-359 32 113500
-344 32 133500
-335 32 153500
-334 32 173500
-327 32 193500
-330 32 213500
-328 32 233500
-328 32 253500
-343 32 273500
-358 32 293500
-341 32 313500
-326 32 333500
-333 32 353500
-333 32 373500
-402 32 393500
-338 32 413500
-327 32 433500
-334 32 453500
-329 32 473500
-318 32 493500
-322 32 513500
-323 32 533500
-320 32 553500
-325 32 573500
-328 32 593500
-325 32 613500
-304 32 633500
-304 32 653500
-303 32 673500
-299 32 693500
-296 32 713500
-305 32 733500
-307 32 753500
-308 32 773500
-310 32 793500
-331 32 813500
-332 32 833500
-323 32 853500
-310 32 873500
-311 32 893500
-316 32 913500
-308 32 933500
-321 32 953500
-320 32 973500
-310 32 993500
-304 32 1013500
-303 32 1033500
-301 32 1053500
-295 32 1073500
-302 32 1093500
-311 32 1113500
-322 32 1133500
-313 32 1153500
-315 32 1173500
-315 32 1193500
-315 32 1213500
-339 32 1233500
-336 32 1253500
-316 32 1273500
-321 32 1293500
-297 32 1313500
-295 32 1333500
-294 32 1353500
-297 32 1373500
-296 32 1393500
-295 32 1413500
-295 32 1433500
-294 32 1453500
-306 32 1473500
-303 32 1493500
-308 32 1513500
-302 32 1533500
-306 32 1553500
-302 32 1573500
-295 32 1593500
-293 32 1613500
-307 32 1633500
-313 32 1653500
-305 32 1673500
-308 32 1693500
-325 32 1713500
-312 32 1733500
-305 32 1753500
-301 32 1773500
-322 32 1793500
-319 32 1813500
-317 32 1833500
-317 32 1853500
-322 32 1873500
-302 32 1893500
-308 32 1913500
-305 32 1933500
-305 32 1953500
-300 32 1973500
-293 32 1993500
-300 32 2013500
-300 32 2033500
-294 32 2053500
-293 32 2073500
-295 32 2093500
-290 32 2113500
-303 32 2133500
-311 32 2153500
-431 32 2173500
-293 32 2193500
-302 32 2213500
-306 32 2233500
-297 32 2253500
-297 32 2273500
-301 32 2293500
-404 32 2313500
-299 32 2333500
-443 32 2353500
-296 32 2373500
-296 32 2393500
-306 32 2413500
-313 32 2433500
-314 32 2453500
-303 32 2473500
-306 32 2493500
-320 32 2513500
-311 32 2533500
-303 32 2553500
-316 32 2573500
-317 32 2593500
-300 32 2613500
-297 32 2633500
-306 32 2653500
-312 32 2673500
-319 32 2693500
-307 32 2713500
-309 32 2733500
-302 32 2753500
-306 32 2773500
-316 32 2793500
-300 32 2813500
-320 32 2833500
-312 32 2853500
-324 32 2873500
-319 32 2893500
-313 32 2913500
-314 32 2933500
-316 32 2953500
-310 32 2973500
-301 32 2993500
-313 32 3013500
-303 32 3033500
-298 32 3053500
-292 32 3073500
-288 32 3093500
-294 32 3113500
-296 32 3133500
-296 32 3153500
-294 32 3173500
-299 32 3193500
-303 32 3213500
-294 32 3233500
-301 32 3253500
-321 32 3273500
-310 32 3293500
-314 32 3313500
-298 32 3333500
-300 32 3353500
-302 32 3373500
-297 32 3393500
-298 32 3413500
-293 32 3433500
-304 32 3453500
-304 32 3473500
-311 32 3493500
-310 32 3513500
-322 32 3533500
-340 32 3553500
-330 32 3573500
-329 32 3593500
-318 32 3613500
-309 32 3633500
-306 32 3653500
-313 32 3673500
-314 32 3693500
-303 32 3713500
-297 32 3733500
-296 32 3753500
-292 32 3773500
-291 32 3793500
-291 32 3813500
-291 32 3833500
-299 32 3853500
-295 32 3873500
-302 32 3893500
-305 32 3913500
-301 32 3933500
-311 32 3953500
-317 32 3973500
-314 32 3993500
-310 32 4013500
-378 32 4033500
-310 32 4053500
-301 32 4073500
-353 32 4093500
-289 32 4113500
-294 32 4133500
-297 32 4153500
-294 32 4173500
-296 32 4193500
-305 32 4213500
-303 32 4233500
-317 32 4253500
-359 32 4273500
-314 32 4293500
-323 32 4313500
-319 32 4333500
-330 32 4353500
-326 32 4373500
-305 32 4393500
-300 32 4413500
-298 32 4433500
-297 32 4453500
-293 32 4473500
-296 32 4493500
-303 32 4513500
-318 32 4533500
-306 32 4553500
-295 32 4573500
-294 32 4593500
-468 32 4613500
-291 32 4633500
-295 32 4653500
-292 32 4673500
-296 32 4693500
-291 32 4713500
-290 32 4733500
-299 32 4753500
-291 32 4773500
-297 32 4793500
-304 32 4813500
-306 32 4833500
-296 32 4853500
-286 32 4873500
-299 32 4893500
-294 32 4913500
-318 32 4933500
-328 32 4953500
-318 32 4973500
-319 32 4993500
-312 32 5013500
-298 32 5033500
-301 32 5053500
-296 32 5073500
-293 32 5093500
-293 32 5113500
-297 32 5133500
-296 32 5153500
-294 32 5173500
-294 32 5193500
-292 32 5213500
-296 32 5233500
-291 32 5253500
-294 32 5273500
-297 32 5293500
-304 32 5313500
-295 32 5333500
-290 32 5353500
-294 32 5373500
-293 32 5393500
-294 32 5413500
-294 32 5433500
-293 32 5453500
-289 32 5473500
-293 32 5493500
-295 32 5513500
-295 32 5533500
-286 32 5553500
-292 32 5573500
-288 32 5593500
-292 32 5613500
-296 32 5633500
-288 32 5653500
-294 32 5673500
-294 32 5693500
-293 32 5713500
-291 32 5733500
-293 32 5753500
-303 32 5773500
-306 32 5793500
-307 32 5813500
-302 32 5833500
-294 32 5853500
-297 32 5873500
-297 32 5893500
-302 32 5913500
-299 32 5933500
-302 32 5953500
-297 32 5973500
-299 32 5993500
-305 32 6013500
-307 32 6033500
-310 32 6053500
-310 32 6073500
-315 32 6093500
-306 32 6113500
-305 32 6133500
-304 32 6153500
-307 32 6173500
-306 32 6193500
-297 32 6213500
-298 32 6233500
-293 32 6253500
-293 32 6273500
-296 32 6293500
-305 32 6313500
-299 32 6333500
-298 32 6353500
-305 32 6373500
-291 32 6393500
-296 32 6413500
-296 32 6433500
-303 32 6453500
-298 32 6473500
-328 32 6493500
-322 32 6513500
-323 32 6533500
-319 32 6553500
-331 32 6573500
-332 32 6593500
-333 32 6613500
-325 32 6633500
-334 32 6653500
-333 32 6673500
-329 32 6693500
-325 32 6713500
-321 32 6733500
-460 32 6753500
-322 32 6773500
-313 32 6793500
-303 32 6813500
-307 32 6833500
-302 32 6853500
-298 32 6873500
-294 32 6893500
-296 32 6913500
-288 32 6933500
-286 32 6953500
-404 32 6973500
-408 32 6993500
-316 32 7013500
-336 32 7033500
-326 32 7053500
-333 32 7073500
-324 32 7093500
-330 32 7113500
-315 32 7133500
-318 32 7153500
-323 32 7173500
-304 32 7193500
-302 32 7213500
-310 32 7233500
-329 32 7253500
-324 32 7273500
-332 32 7293500
-474 32 7313500
-347 32 7333500
-351 32 7353500
-412 32 7373500
-326 32 7393500
-300 32 7413500
-308 32 7433500
-307 32 7453500
-299 32 7473500
-306 32 7493500
-450 32 7513500
-294 32 7533500
-348 32 7553500
-294 32 7573500
-289 32 7593500
-281 32 7613500
-293 32 7633500
-291 32 7653500
-341 32 7673500
-291 32 7693500
-298 32 7713500
-295 32 7733500
-298 32 7753500
-299 32 7773500
-332 32 7793500
-297 32 7813500
-302 32 7833500
-302 32 7853500
-316 32 7873500
-322 32 7893500
-327 32 7913500
-321 32 7933500
-315 32 7953500
-308 32 7973500
-323 32 7993500
-306 32 8013500
-319 32 8033500
-318 32 8053500
-319 32 8073500
-319 32 8093500
-323 32 8113500
-320 32 8133500
-311 32 8153500
-312 32 8173500
-307 32 8193500
-311 32 8213500
-318 32 8233500
-346 32 8253500
-348 32 8273500
-336 32 8293500
-334 32 8313500
-331 32 8333500
-340 32 8353500
-335 32 8373500
-319 32 8393500
-307 32 8413500
-304 32 8433500
-301 32 8453500
-311 32 8473500
-317 32 8493500
-325 32 8513500
-327 32 8533500
-335 32 8553500
-340 32 8573500
-320 32 8593500
-333 32 8613500
-328 32 8633500
-312 32 8653500
-304 32 8673500
-337 32 8693500
-334 32 8713500
-333 32 8733500
-327 32 8753500
-328 32 8773500
-340 32 8793500
-478 32 8813500
-331 32 8833500
-328 32 8853500
-320 32 8873500
-315 32 8893500
-321 32 8913500
-324 32 8933500
-325 32 8953500
-323 32 8973500
-324 32 8993500
-336 32 9013500
-340 32 9033500
-333 32 9053500
-339 32 9073500
-490 32 9093500
-480 32 9113500
-329 32 9133500
-327 32 9153500
-341 32 9173500
-338 32 9193500
-337 32 9213500
-337 32 9233500
-328 32 9253500
-322 32 9273500
-324 32 9293500
-349 32 9313500
-350 32 9333500
-337 32 9353500
-342 32 9373500
-334 32 9393500
-324 32 9413500
-320 32 9433500
-329 32 9453500
-333 32 9473500
-328 32 9493500
-335 32 9513500
-322 32 9533500
-323 32 9553500
-330 32 9573500
-320 32 9593500
-313 32 9613500
-526 32 9633500
-306 32 9653500
-300 32 9673500
-299 32 9693500
-300 32 9713500
-299 32 9733500
-299 32 9753500
-295 32 9773500
-293 32 9793500
-297 32 9813500
-306 32 9833500
-300 32 9853500
-438 32 9873500
-291 32 9893500
-448 32 9913500
-504 32 9933500
+8 128 0
+618 32 0
+398 32 21000
+582 32 41000
+466 32 61000
+434 32 81000
+419 32 101000
+578 32 121000
+591 32 141000
+293 32 161000
+323 32 181000
+303 32 201000
+319 32 221000
+318 32 241000
+307 32 261000
+539 32 281000
+358 32 301000
+334 32 321000
+308 32 341000
+331 32 361000
+327 32 381000
+357 32 401000
+365 32 421000
+375 32 441000
+370 32 461000
+636 32 481000
+497 32 501000
+360 32 521000
+327 32 541000
+438 32 561000
+323 32 581000
+323 32 601000
+308 32 621000
+313 32 641000
+326 32 661000
+329 32 681000
+324 32 701000
+326 32 721000
+332 32 741000
+336 32 761000
+345 32 781000
+352 32 801000
+380 32 821000
+341 32 841000
+341 32 861000
+347 32 881000
+352 32 901000
+339 32 921000
+366 32 941000
+369 32 961000
+367 32 981000
+342 32 1001000
+344 32 1021000
+339 32 1041000
+312 32 1061000
+306 32 1081000
+307 32 1101000
+308 32 1121000
+319 32 1141000
+297 32 1161000
+294 32 1181000
+298 32 1201000
+474 32 1221000
+424 32 1241000
+278 32 1261000
+290 32 1281000
+281 32 1301000
+295 32 1321000
+277 32 1341000
+305 32 1361000
+293 32 1381000
+284 32 1401000
+296 32 1421000
+298 32 1441000
+316 32 1461000
+302 32 1481000
+300 32 1501000
+283 32 1521000
+604 32 1541000
+474 32 1561000
+277 32 1581000
+285 32 1601000
+278 32 1621000
+295 32 1641000
+301 32 1661000
+317 32 1681000
+301 32 1701000
+594 32 1721000
+296 32 1741000
+374 32 1761000
+301 32 1781000
+296 32 1801000
+300 32 1821000
+285 32 1841000
+308 32 1861000
+304 32 1881000
+286 32 1901000
+294 32 1921000
+300 32 1941000
+324 32 1961000
+315 32 1981000
+326 32 2001000
+311 32 2021000
+300 32 2041000
+304 32 2061000
+307 32 2081000
+304 32 2101000
+301 32 2121000
+296 32 2141000
+299 32 2161000
+298 32 2181000
+300 32 2201000
+300 32 2221000
+303 32 2241000
+303 32 2261000
+303 32 2281000
+308 32 2301000
+304 32 2321000
+295 32 2341000
+300 32 2361000
+300 32 2381000
+293 32 2401000
+302 32 2421000
+548 32 2441000
+338 32 2461000
+311 32 2481000
+304 32 2501000
+304 32 2521000
+299 32 2541000
+298 32 2561000
+294 32 2581000
+298 32 2601000
+300 32 2621000
+301 32 2641000
+305 32 2661000
+309 32 2681000
+303 32 2701000
+313 32 2721000
+302 32 2741000
+304 32 2761000
+304 32 2781000
+304 32 2801000
+300 32 2821000
+434 32 2841000
+571 32 2861000
+386 32 2881000
+323 32 2901000
+415 32 2921000
+277 32 2941000
+401 32 2961000
+388 32 2981000
+337 32 3001000
+540 32 3021000
+516 32 3041000
+316 32 3061000
+301 32 3081000
+298 32 3101000
+302 32 3121000
+301 32 3141000
+299 32 3161000
+295 32 3181000
+281 32 3201000
+296 32 3221000
+300 32 3241000
+295 32 3261000
+308 32 3281000
+296 32 3301000
+297 32 3321000
+276 32 3341000
+281 32 3361000
+291 32 3381000
+294 32 3401000
+281 32 3421000
+277 32 3441000
+274 32 3461000
+298 32 3481000
+293 32 3501000
+279 32 3521000
+275 32 3541000
+282 32 3561000
+289 32 3581000
+300 32 3601000
+289 32 3621000
+295 32 3641000
+301 32 3661000
+306 32 3681000
+301 32 3701000
+305 32 3721000
+296 32 3741000
+296 32 3761000
+377 32 3781000
+297 32 3801000
+293 32 3821000
+290 32 3841000
+298 32 3861000
+303 32 3881000
+304 32 3901000
+316 32 3921000
+298 32 3941000
+319 32 3961000
+330 32 3981000
+316 32 4001000
+316 32 4021000
+286 32 4041000
+272 32 4061000
+257 32 4081000
+240 32 4101000
+229 32 4121000
+223 32 4141000
+225 32 4161000
+223 32 4181000
+232 32 4201000
+234 32 4221000
+224 32 4241000
+351 32 4261000
+309 32 4281000
+350 32 4301000
+437 32 4321000
+277 32 4341000
+291 32 4361000
+271 32 4381000
+266 32 4401000
+264 32 4421000
+285 32 4441000
+280 32 4461000
+276 32 4481000
+278 32 4501000
+262 32 4521000
+262 32 4541000
+246 32 4561000
+253 32 4581000
+289 32 4601000
+264 32 4621000
+285 32 4641000
+278 32 4661000
+266 32 4681000
+275 32 4701000
+264 32 4721000
+264 32 4741000
+275 32 4761000
+268 32 4781000
+262 32 4801000
+266 32 4821000
+262 32 4841000
+246 32 4861000
+284 32 4881000
+291 32 4901000
+294 32 4921000
+294 32 4941000
+294 32 4961000
+296 32 4981000
+294 32 5001000
+300 32 5021000
+293 32 5041000
+298 32 5061000
+295 32 5081000
+301 32 5101000
+301 32 5121000
+302 32 5141000
+303 32 5161000
+300 32 5181000
+301 32 5201000
+302 32 5221000
+296 32 5241000
+297 32 5261000
+300 32 5281000
+295 32 5301000
+349 32 5321000
+351 32 5341000
+333 32 5361000
+267 32 5381000
+291 32 5401000
+270 32 5421000
+258 32 5441000
+266 32 5461000
+252 32 5481000
+251 32 5501000
+323 32 5521000
+398 32 5541000
+383 32 5561000
+295 32 5581000
+260 32 5601000
+413 32 5621000
+288 32 5641000
+299 32 5661000
+277 32 5681000
+295 32 5701000
+296 32 5721000
+305 32 5741000
+300 32 5761000
+305 32 5781000
+293 32 5801000
+305 32 5821000
+455 32 5841000
+302 32 5861000
+293 32 5881000
+289 32 5901000
+283 32 5921000
+289 32 5941000
+275 32 5961000
+279 32 5981000
+626 32 6001000
+335 32 6021000
+324 32 6041000
+331 32 6061000
+334 32 6081000
+322 32 6101000
+339 32 6121000
+339 32 6141000
+329 32 6161000
+339 32 6181000
+328 32 6201000
+330 32 6221000
+312 32 6241000
+527 32 6261000
+324 32 6281000
+322 32 6301000
+313 32 6321000
+306 32 6341000
+303 32 6361000
+304 32 6381000
+311 32 6401000
+302 32 6421000
+294 32 6441000
+296 32 6461000
+293 32 6481000
+297 32 6501000
+287 32 6521000
+300 32 6541000
+324 32 6561000
+304 32 6581000
+303 32 6601000
+303 32 6621000
+324 32 6641000
+340 32 6661000
+357 32 6681000
+355 32 6701000
+349 32 6721000
+358 32 6741000
+378 32 6761000
+591 32 6781000
+525 32 6801000
+378 32 6821000
+356 32 6841000
+353 32 6861000
+347 32 6881000
+334 32 6901000
+330 32 6921000
+334 32 6941000
+352 32 6961000
+344 32 6981000
+356 32 7001000
+356 32 7021000
+351 32 7041000
+346 32 7061000
+350 32 7081000
+366 32 7101000
+504 32 7121000
+360 32 7141000
+366 32 7161000
+369 32 7181000
+363 32 7201000
+345 32 7221000
+347 32 7241000
+338 32 7261000
+332 32 7281000
+318 32 7301000
+307 32 7321000
+302 32 7341000
+308 32 7361000
+317 32 7381000
+304 32 7401000
+313 32 7421000
+314 32 7441000
+302 32 7461000
+299 32 7481000
+300 32 7501000
+295 32 7521000
+296 32 7541000
+298 32 7561000
+601 32 7581000
+489 32 7601000
+303 32 7621000
+323 32 7641000
+304 32 7661000
+328 32 7681000
+332 32 7701000
+356 32 7721000
+356 32 7741000
+340 32 7761000
+333 32 7781000
+332 32 7801000
+321 32 7821000
+455 32 7841000
+328 32 7861000
+314 32 7881000
+310 32 7901000
+300 32 7921000
+327 32 7941000
+317 32 7961000
+309 32 7981000
+305 32 8001000
+299 32 8021000
+312 32 8041000
+309 32 8061000
+300 32 8081000
+319 32 8101000
+329 32 8121000
+323 32 8141000
+332 32 8161000
+340 32 8181000
+339 32 8201000
+319 32 8221000
+323 32 8241000
+320 32 8261000
+322 32 8281000
+314 32 8301000
+310 32 8321000
+300 32 8341000
+294 32 8361000
+324 32 8381000
+325 32 8401000
+305 32 8421000
+306 32 8441000
+298 32 8461000
+302 32 8481000
+298 32 8501000
+295 32 8521000
+294 32 8541000
+295 32 8561000
+288 32 8581000
+310 32 8601000
+301 32 8621000
+401 32 8641000
+324 32 8661000
+309 32 8681000
+294 32 8701000
+306 32 8721000
+318 32 8741000
+312 32 8761000
+325 32 8781000
+352 32 8801000
+351 32 8821000
+343 32 8841000
+377 32 8861000
+409 32 8881000
+424 32 8901000
+366 32 8921000
+341 32 8941000
+330 32 8961000
+342 32 8981000
+328 32 9001000
+333 32 9021000
+334 32 9041000
+340 32 9061000
+347 32 9081000
+354 32 9101000
+342 32 9121000
+323 32 9141000
+311 32 9161000
+297 32 9181000
+286 32 9201000
+290 32 9221000
+288 32 9241000
+291 32 9261000
+439 32 9281000
+278 32 9301000
+506 32 9321000
+441 32 9341000
+333 32 9361000
+416 32 9381000
+446 32 9401000
+219 32 9421000
+353 32 9441000
+307 32 9461000
+222 32 9481000
+221 32 9501000
+235 32 9521000
+294 32 9541000
+239 32 9561000
+251 32 9581000
+259 32 9601000
+263 32 9621000
+283 32 9641000
+423 32 9661000
+296 32 9681000
+299 32 9701000
+322 32 9721000
+296 32 9741000
+489 32 9761000
+481 32 9781000
+505 32 9801000
+292 32 9821000
+390 32 9841000
+279 32 9861000
+442 32 9881000
+426 32 9901000
+408 32 9921000
+272 32 9941000
+484 32 9961000
+443 32 9981000
+440 32 10001000
diff --git a/media/res/bbb_opus_stereo_128kbps_48000hz.opus b/media/res/bbb_opus_stereo_128kbps_48000hz.opus
index c9001ac..7b763b2 100755
--- a/media/res/bbb_opus_stereo_128kbps_48000hz.opus
+++ b/media/res/bbb_opus_stereo_128kbps_48000hz.opus
Binary files differ
diff --git a/media/res/bbb_raw_1ch_8khz_s32le.raw b/media/res/bbb_raw_1ch_8khz_s32le.raw
index 3149eb2..fd91b46 100755
--- a/media/res/bbb_raw_1ch_8khz_s32le.raw
+++ b/media/res/bbb_raw_1ch_8khz_s32le.raw
Binary files differ