Make Codec2 software service public
This CL makes the software Codec2 service present the public Codec2 HAL
interface, and makes the framework use it.
Test: make cts -j123 && cts-tradefed run cts-dev -m \
CtsMediaTestCases --compatibility:module-arg \
CtsMediaTestCases:include-annotation:\
android.platform.test.annotations.RequiresDevice
Bug: 112362730
Bug: 119853704
Change-Id: I047c6948a883a6e085d988a3fa542129ebb9571f
diff --git a/media/codec2/hidl/client/client.cpp b/media/codec2/hidl/client/client.cpp
index ddeb4ff..26bd96c 100644
--- a/media/codec2/hidl/client/client.cpp
+++ b/media/codec2/hidl/client/client.cpp
@@ -76,7 +76,11 @@
// Convenience methods to obtain known clients.
std::shared_ptr<Codec2Client> getClient(size_t index) {
- return Codec2Client::CreateFromService(kClientNames[index]);
+ uint32_t serviceMask = ::android::base::GetUintProperty(
+ "debug.media.codec2", uint32_t(0));
+ return Codec2Client::CreateFromService(
+ kClientNames[index],
+ (serviceMask & (1 << index)) != 0);
}
ClientList getClientList() {
@@ -633,9 +637,13 @@
Base::tryGetService(instanceName);
if (!baseStore) {
if (waitForService) {
- ALOGE("Codec2.0 service inaccessible. Check the device manifest.");
+ ALOGW("Codec2.0 service \"%s\" inaccessible. "
+ "Check the device manifest.",
+ instanceName);
} else {
- ALOGW("Codec2.0 service not available right now. Try again later.");
+ ALOGD("Codec2.0 service \"%s\" unavailable right now. "
+ "Try again later.",
+ instanceName);
}
return nullptr;
}
diff --git a/media/codec2/hidl/services/Android.bp b/media/codec2/hidl/services/Android.bp
index 965971e..216525e 100644
--- a/media/codec2/hidl/services/Android.bp
+++ b/media/codec2/hidl/services/Android.bp
@@ -37,58 +37,3 @@
compile_multilib: "32",
}
-cc_library_shared {
- name: "libcodec2_serviceregistrant",
- // need vendor version for update packaging, system version may have more dependencies
- vendor_available: true,
- srcs: [
- "C2SoftwareCodecServiceRegistrant.cpp",
- ],
-
- header_libs: [
- "libmedia_headers",
- ],
-
- shared_libs: [
- "android.hardware.media.c2@1.0",
- "libcodec2_hidl@1.0",
- "libcodec2_vndk",
- "liblog",
- "libutils",
- ],
-
- // Codecs
- runtime_libs: [
- "libcodec2_soft_avcdec",
- "libcodec2_soft_avcenc",
- "libcodec2_soft_aacdec",
- "libcodec2_soft_aacenc",
- "libcodec2_soft_amrnbdec",
- "libcodec2_soft_amrnbenc",
- "libcodec2_soft_amrwbdec",
- "libcodec2_soft_amrwbenc",
- "libcodec2_soft_hevcdec",
- "libcodec2_soft_g711alawdec",
- "libcodec2_soft_g711mlawdec",
- "libcodec2_soft_mpeg2dec",
- "libcodec2_soft_h263dec",
- "libcodec2_soft_h263enc",
- "libcodec2_soft_mpeg4dec",
- "libcodec2_soft_mpeg4enc",
- "libcodec2_soft_mp3dec",
- "libcodec2_soft_vorbisdec",
- "libcodec2_soft_opusdec",
- "libcodec2_soft_vp8dec",
- "libcodec2_soft_vp9dec",
- "libcodec2_soft_vp8enc",
- "libcodec2_soft_vp9enc",
- "libcodec2_soft_rawdec",
- "libcodec2_soft_flacdec",
- "libcodec2_soft_flacenc",
- "libcodec2_soft_gsmdec",
- "libcodec2_soft_xaacdec",
- ],
-
- compile_multilib: "32",
-}
-
diff --git a/media/codec2/hidl/services/C2SoftwareCodecServiceRegistrant.cpp b/media/codec2/hidl/services/C2SoftwareCodecServiceRegistrant.cpp
deleted file mode 100644
index e10ae6e..0000000
--- a/media/codec2/hidl/services/C2SoftwareCodecServiceRegistrant.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2018 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_NDEBUG 0
-#define LOG_TAG "C2SoftwareCodecServiceRegistrant"
-
-#include <C2PlatformSupport.h>
-#include <codec2/hidl/1.0/ComponentStore.h>
-#include <media/CodecServiceRegistrant.h>
-#include <log/log.h>
-
-extern "C" void RegisterCodecServices() {
- using namespace ::android::hardware::media::c2::V1_0;
- android::sp<IComponentStore> store =
- new utils::ComponentStore(
- android::GetCodec2PlatformComponentStore());
- if (store == nullptr) {
- ALOGE("Cannot create Codec2's IComponentStore software service.");
- } else {
- if (store->registerAsService("software") != android::OK) {
- ALOGE("Cannot register Codec2's "
- "IComponentStore software service.");
- } else {
- ALOGI("Codec2's IComponentStore software service created.");
- }
- }
-}
-
diff --git a/media/codec2/vndk/C2PlatformStorePluginLoader.cpp b/media/codec2/vndk/C2PlatformStorePluginLoader.cpp
index 7a460f4..4c330e5 100644
--- a/media/codec2/vndk/C2PlatformStorePluginLoader.cpp
+++ b/media/codec2/vndk/C2PlatformStorePluginLoader.cpp
@@ -26,6 +26,12 @@
/* static */ android::Mutex C2PlatformStorePluginLoader::sMutex;
/* static */ std::unique_ptr<C2PlatformStorePluginLoader> C2PlatformStorePluginLoader::sInstance;
+namespace /* unnamed */ {
+
+constexpr const char kStorePluginPath[] = "libc2plugin_store.so";
+
+} // unnamed
+
C2PlatformStorePluginLoader::C2PlatformStorePluginLoader(const char *libPath)
: mCreateBlockPool(nullptr) {
mLibHandle = dlopen(libPath, RTLD_NOW | RTLD_NODELETE);
@@ -89,7 +95,7 @@
android::Mutex::Autolock _l(sMutex);
if (!sInstance) {
ALOGV("Loading library");
- sInstance.reset(new C2PlatformStorePluginLoader("libstagefright_ccodec_ext.so"));
+ sInstance.reset(new C2PlatformStorePluginLoader(kStorePluginPath));
}
return sInstance;
}
diff --git a/media/codec2/vndk/C2Store.cpp b/media/codec2/vndk/C2Store.cpp
index 33019ed..2d4e19e 100644
--- a/media/codec2/vndk/C2Store.cpp
+++ b/media/codec2/vndk/C2Store.cpp
@@ -798,65 +798,65 @@
mComponentsList.emplace_back(alias);
};
// TODO: move this also into a .so so it can be updated
- emplace("c2.android.avc.decoder", "libstagefright_soft_c2avcdec.so");
- emplace("c2.android.avc.encoder", "libstagefright_soft_c2avcenc.so");
- emplace("c2.android.aac.decoder", "libstagefright_soft_c2aacdec.so");
- emplace("c2.android.aac.encoder", "libstagefright_soft_c2aacenc.so");
- emplace("c2.android.amrnb.decoder", "libstagefright_soft_c2amrnbdec.so");
- emplace("c2.android.amrnb.encoder", "libstagefright_soft_c2amrnbenc.so");
- emplace("c2.android.amrwb.decoder", "libstagefright_soft_c2amrwbdec.so");
- emplace("c2.android.amrwb.encoder", "libstagefright_soft_c2amrwbenc.so");
- emplace("c2.android.hevc.decoder", "libstagefright_soft_c2hevcdec.so");
- emplace("c2.android.g711.alaw.decoder", "libstagefright_soft_c2g711alawdec.so");
- emplace("c2.android.g711.mlaw.decoder", "libstagefright_soft_c2g711mlawdec.so");
- emplace("c2.android.mpeg2.decoder", "libstagefright_soft_c2mpeg2dec.so");
- emplace("c2.android.h263.decoder", "libstagefright_soft_c2h263dec.so");
- emplace("c2.android.h263.encoder", "libstagefright_soft_c2h263enc.so");
- emplace("c2.android.mpeg4.decoder", "libstagefright_soft_c2mpeg4dec.so");
- emplace("c2.android.mpeg4.encoder", "libstagefright_soft_c2mpeg4enc.so");
- emplace("c2.android.mp3.decoder", "libstagefright_soft_c2mp3dec.so");
- emplace("c2.android.vorbis.decoder", "libstagefright_soft_c2vorbisdec.so");
- emplace("c2.android.opus.decoder", "libstagefright_soft_c2opusdec.so");
- emplace("c2.android.vp8.decoder", "libstagefright_soft_c2vp8dec.so");
- emplace("c2.android.vp9.decoder", "libstagefright_soft_c2vp9dec.so");
- emplace("c2.android.vp8.encoder", "libstagefright_soft_c2vp8enc.so");
- emplace("c2.android.vp9.encoder", "libstagefright_soft_c2vp9enc.so");
- emplace("c2.android.raw.decoder", "libstagefright_soft_c2rawdec.so");
- emplace("c2.android.flac.decoder", "libstagefright_soft_c2flacdec.so");
- emplace("c2.android.flac.encoder", "libstagefright_soft_c2flacenc.so");
- emplace("c2.android.gsm.decoder", "libstagefright_soft_c2gsmdec.so");
- emplace("c2.android.xaac.decoder", "libstagefright_soft_c2xaacdec.so");
+ emplace("c2.android.avc.decoder", "libcodec2_soft_avcdec.so");
+ emplace("c2.android.avc.encoder", "libcodec2_soft_avcenc.so");
+ emplace("c2.android.aac.decoder", "libcodec2_soft_aacdec.so");
+ emplace("c2.android.aac.encoder", "libcodec2_soft_aacenc.so");
+ emplace("c2.android.amrnb.decoder", "libcodec2_soft_amrnbdec.so");
+ emplace("c2.android.amrnb.encoder", "libcodec2_soft_amrnbenc.so");
+ emplace("c2.android.amrwb.decoder", "libcodec2_soft_amrwbdec.so");
+ emplace("c2.android.amrwb.encoder", "libcodec2_soft_amrwbenc.so");
+ emplace("c2.android.hevc.decoder", "libcodec2_soft_hevcdec.so");
+ emplace("c2.android.g711.alaw.decoder", "libcodec2_soft_g711alawdec.so");
+ emplace("c2.android.g711.mlaw.decoder", "libcodec2_soft_g711mlawdec.so");
+ emplace("c2.android.mpeg2.decoder", "libcodec2_soft_mpeg2dec.so");
+ emplace("c2.android.h263.decoder", "libcodec2_soft_h263dec.so");
+ emplace("c2.android.h263.encoder", "libcodec2_soft_h263enc.so");
+ emplace("c2.android.mpeg4.decoder", "libcodec2_soft_mpeg4dec.so");
+ emplace("c2.android.mpeg4.encoder", "libcodec2_soft_mpeg4enc.so");
+ emplace("c2.android.mp3.decoder", "libcodec2_soft_mp3dec.so");
+ emplace("c2.android.vorbis.decoder", "libcodec2_soft_vorbisdec.so");
+ emplace("c2.android.opus.decoder", "libcodec2_soft_opusdec.so");
+ emplace("c2.android.vp8.decoder", "libcodec2_soft_vp8dec.so");
+ emplace("c2.android.vp9.decoder", "libcodec2_soft_vp9dec.so");
+ emplace("c2.android.vp8.encoder", "libcodec2_soft_vp8enc.so");
+ emplace("c2.android.vp9.encoder", "libcodec2_soft_vp9enc.so");
+ emplace("c2.android.raw.decoder", "libcodec2_soft_rawdec.so");
+ emplace("c2.android.flac.decoder", "libcodec2_soft_flacdec.so");
+ emplace("c2.android.flac.encoder", "libcodec2_soft_flacenc.so");
+ emplace("c2.android.gsm.decoder", "libcodec2_soft_gsmdec.so");
+ emplace("c2.android.xaac.decoder", "libcodec2_soft_xaacdec.so");
// "Aliases"
// TODO: use aliases proper from C2Component::Traits
- emplace("OMX.google.h264.decoder", "libstagefright_soft_c2avcdec.so");
- emplace("OMX.google.h264.encoder", "libstagefright_soft_c2avcenc.so");
- emplace("OMX.google.aac.decoder", "libstagefright_soft_c2aacdec.so");
- emplace("OMX.google.aac.encoder", "libstagefright_soft_c2aacenc.so");
- emplace("OMX.google.amrnb.decoder", "libstagefright_soft_c2amrnbdec.so");
- emplace("OMX.google.amrnb.encoder", "libstagefright_soft_c2amrnbenc.so");
- emplace("OMX.google.amrwb.decoder", "libstagefright_soft_c2amrwbdec.so");
- emplace("OMX.google.amrwb.encoder", "libstagefright_soft_c2amrwbenc.so");
- emplace("OMX.google.hevc.decoder", "libstagefright_soft_c2hevcdec.so");
- emplace("OMX.google.g711.alaw.decoder", "libstagefright_soft_c2g711alawdec.so");
- emplace("OMX.google.g711.mlaw.decoder", "libstagefright_soft_c2g711mlawdec.so");
- emplace("OMX.google.mpeg2.decoder", "libstagefright_soft_c2mpeg2dec.so");
- emplace("OMX.google.h263.decoder", "libstagefright_soft_c2h263dec.so");
- emplace("OMX.google.h263.encoder", "libstagefright_soft_c2h263enc.so");
- emplace("OMX.google.mpeg4.decoder", "libstagefright_soft_c2mpeg4dec.so");
- emplace("OMX.google.mpeg4.encoder", "libstagefright_soft_c2mpeg4enc.so");
- emplace("OMX.google.mp3.decoder", "libstagefright_soft_c2mp3dec.so");
- emplace("OMX.google.vorbis.decoder", "libstagefright_soft_c2vorbisdec.so");
- emplace("OMX.google.opus.decoder", "libstagefright_soft_c2opusdec.so");
- emplace("OMX.google.vp8.decoder", "libstagefright_soft_c2vp8dec.so");
- emplace("OMX.google.vp9.decoder", "libstagefright_soft_c2vp9dec.so");
- emplace("OMX.google.vp8.encoder", "libstagefright_soft_c2vp8enc.so");
- emplace("OMX.google.vp9.encoder", "libstagefright_soft_c2vp9enc.so");
- emplace("OMX.google.raw.decoder", "libstagefright_soft_c2rawdec.so");
- emplace("OMX.google.flac.decoder", "libstagefright_soft_c2flacdec.so");
- emplace("OMX.google.flac.encoder", "libstagefright_soft_c2flacenc.so");
- emplace("OMX.google.gsm.decoder", "libstagefright_soft_c2gsmdec.so");
- emplace("OMX.google.xaac.decoder", "libstagefright_soft_c2xaacdec.so");
+ emplace("OMX.google.h264.decoder", "libcodec2_soft_avcdec.so");
+ emplace("OMX.google.h264.encoder", "libcodec2_soft_avcenc.so");
+ emplace("OMX.google.aac.decoder", "libcodec2_soft_aacdec.so");
+ emplace("OMX.google.aac.encoder", "libcodec2_soft_aacenc.so");
+ emplace("OMX.google.amrnb.decoder", "libcodec2_soft_amrnbdec.so");
+ emplace("OMX.google.amrnb.encoder", "libcodec2_soft_amrnbenc.so");
+ emplace("OMX.google.amrwb.decoder", "libcodec2_soft_amrwbdec.so");
+ emplace("OMX.google.amrwb.encoder", "libcodec2_soft_amrwbenc.so");
+ emplace("OMX.google.hevc.decoder", "libcodec2_soft_hevcdec.so");
+ emplace("OMX.google.g711.alaw.decoder", "libcodec2_soft_g711alawdec.so");
+ emplace("OMX.google.g711.mlaw.decoder", "libcodec2_soft_g711mlawdec.so");
+ emplace("OMX.google.mpeg2.decoder", "libcodec2_soft_mpeg2dec.so");
+ emplace("OMX.google.h263.decoder", "libcodec2_soft_h263dec.so");
+ emplace("OMX.google.h263.encoder", "libcodec2_soft_h263enc.so");
+ emplace("OMX.google.mpeg4.decoder", "libcodec2_soft_mpeg4dec.so");
+ emplace("OMX.google.mpeg4.encoder", "libcodec2_soft_mpeg4enc.so");
+ emplace("OMX.google.mp3.decoder", "libcodec2_soft_mp3dec.so");
+ emplace("OMX.google.vorbis.decoder", "libcodec2_soft_vorbisdec.so");
+ emplace("OMX.google.opus.decoder", "libcodec2_soft_opusdec.so");
+ emplace("OMX.google.vp8.decoder", "libcodec2_soft_vp8dec.so");
+ emplace("OMX.google.vp9.decoder", "libcodec2_soft_vp9dec.so");
+ emplace("OMX.google.vp8.encoder", "libcodec2_soft_vp8enc.so");
+ emplace("OMX.google.vp9.encoder", "libcodec2_soft_vp9enc.so");
+ emplace("OMX.google.raw.decoder", "libcodec2_soft_rawdec.so");
+ emplace("OMX.google.flac.decoder", "libcodec2_soft_flacdec.so");
+ emplace("OMX.google.flac.encoder", "libcodec2_soft_flacenc.so");
+ emplace("OMX.google.gsm.decoder", "libcodec2_soft_gsmdec.so");
+ emplace("OMX.google.xaac.decoder", "libcodec2_soft_xaacdec.so");
}
c2_status_t C2PlatformComponentStore::copyBuffer(