Revert "Revert "Allow empty IOmxStore implementation""
This reverts commit 77a5b891eb2c64246c82d695aac40c5312f0ff3e, which was
made originally for b/69110957.
Test: make vts -j123 && vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--skip-preconditions -m VtsHalMediaOmxStoreV1_0Host \
-l INFO
Bug: 68491141
Change-Id: I4e0bd3c343811142995665672fe89ad3e9da6dde
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 7ba4b7d..0c71487 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -100,8 +100,10 @@
"libui",
"libutils",
"libmedia_helper",
- "libstagefright_omx_utils",
"libstagefright_foundation",
+ "libstagefright_omx",
+ "libstagefright_omx_utils",
+ "libstagefright_xmlparser",
"libdl",
"libRScpp",
"libhidlbase",
diff --git a/media/libstagefright/OmxInfoBuilder.cpp b/media/libstagefright/OmxInfoBuilder.cpp
index c174371..a6ebadd 100644
--- a/media/libstagefright/OmxInfoBuilder.cpp
+++ b/media/libstagefright/OmxInfoBuilder.cpp
@@ -35,6 +35,7 @@
#include <media/IOMX.h>
#include <media/omx/1.0/WOmx.h>
+#include <media/stagefright/omx/1.0/OmxStore.h>
#include <media/openmax/OMX_Index.h>
#include <media/openmax/OMX_IndexExt.h>
@@ -89,8 +90,6 @@
}
status_t OmxInfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) {
- hidl_vec<IOmxStore::RoleInfo> roles;
-
// Obtain IOmxStore
sp<IOmxStore> omxStore = IOmxStore::getService();
if (omxStore == nullptr) {
@@ -100,8 +99,37 @@
// List service attributes (global settings)
Status status;
+ hidl_vec<IOmxStore::RoleInfo> roles;
+ auto transStatus = omxStore->listRoles(
+ [&roles] (
+ const hidl_vec<IOmxStore::RoleInfo>& inRoleList) {
+ roles = inRoleList;
+ });
+ if (!transStatus.isOk()) {
+ ALOGE("Fail to obtain codec roles from IOmxStore.");
+ return NO_INIT;
+ } else if (roles.size() == 0) {
+ ALOGW("IOmxStore has empty implementation. "
+ "Creating a local default instance...");
+ omxStore = new implementation::OmxStore();
+ if (omxStore == nullptr) {
+ ALOGE("Cannot create a local default instance.");
+ return NO_INIT;
+ }
+ ALOGI("IOmxStore local default instance created.");
+ transStatus = omxStore->listRoles(
+ [&roles] (
+ const hidl_vec<IOmxStore::RoleInfo>& inRoleList) {
+ roles = inRoleList;
+ });
+ if (!transStatus.isOk()) {
+ ALOGE("Fail to obtain codec roles from local IOmxStore.");
+ return NO_INIT;
+ }
+ }
+
hidl_vec<IOmxStore::ServiceAttribute> serviceAttributes;
- auto transStatus = omxStore->listServiceAttributes(
+ transStatus = omxStore->listServiceAttributes(
[&status, &serviceAttributes] (
Status inStatus,
const hidl_vec<IOmxStore::ServiceAttribute>& inAttributes) {
@@ -121,16 +149,6 @@
p.key.c_str(), p.value.c_str());
}
- transStatus = omxStore->listRoles(
- [&roles] (
- const hidl_vec<IOmxStore::RoleInfo>& inRoleList) {
- roles = inRoleList;
- });
- if (!transStatus.isOk()) {
- ALOGE("Fail to obtain codec roles from IOmxStore.");
- return NO_INIT;
- }
-
// Convert roles to lists of codecs
// codec name -> index into swCodecs/hwCodecs