Reland: Register C2 HAL Service v1.0 for Q and v1.1 for R.

Test: TARGET_BUILD_APPS=com.android.media.swcodec m dist && adb install
--staged out/dist/com.android.media.swcodec.apex && adb reboot userspace
Test: atest CtsMediaTestCases -- --module-arg
CtsMediaTestCases:exclude-annotation:android.media.cts.NonMediaMainlineTest

Bug: 144271235
Change-Id: I92611b7204e7b16fd8da652d5fc1521e3025a4cd
gugelfrei
Dongwon Kang 5 years ago committed by Pawin Vongmasa
parent 1261c29e1e
commit 2d91d3fa1f

@ -17,11 +17,13 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "CodecServiceRegistrant"
#include <android-base/properties.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <C2Component.h>
#include <C2PlatformSupport.h>
#include <codec2/hidl/1.0/ComponentStore.h>
#include <codec2/hidl/1.1/ComponentStore.h>
#include <codec2/hidl/1.1/Configurable.h>
#include <codec2/hidl/1.1/types.h>
@ -43,6 +45,10 @@ constexpr c2_status_t C2_TRANSACTION_FAILED = C2_CORRUPTED;
// Converter from IComponentStore to C2ComponentStore.
class H2C2ComponentStore : public C2ComponentStore {
protected:
using IComponentStore =
::android::hardware::media::c2::V1_0::IComponentStore;
using IConfigurable =
::android::hardware::media::c2::V1_0::IConfigurable;
sp<IComponentStore> mStore;
sp<IConfigurable> mConfigurable;
public:
@ -399,36 +405,67 @@ bool ionPropertiesDefined() {
} // unnamed namespace
extern "C" void RegisterCodecServices() {
using namespace ::android::hardware::media::c2::V1_1;
LOG(INFO) << "Creating software Codec2 service...";
sp<ComponentStore> store =
new ComponentStore(::android::GetCodec2PlatformComponentStore());
if (store == nullptr) {
LOG(ERROR) <<
"Cannot create software Codec2 service.";
} else {
if (!ionPropertiesDefined()) {
std::string preferredStoreName = "default";
sp<IComponentStore> preferredStore =
IComponentStore::getService(preferredStoreName.c_str());
if (preferredStore) {
::android::SetPreferredCodec2ComponentStore(
std::make_shared<H2C2ComponentStore>(preferredStore));
LOG(INFO) <<
"Preferred Codec2 store is set to \"" <<
preferredStoreName << "\".";
} else {
LOG(INFO) <<
"Preferred Codec2 store is defaulted to \"software\".";
std::shared_ptr<C2ComponentStore> store =
android::GetCodec2PlatformComponentStore();
if (!store) {
LOG(ERROR) << "Failed to create Codec2 service.";
return;
}
using namespace ::android::hardware::media::c2;
int platformVersion =
android::base::GetIntProperty("ro.build.version.sdk", int32_t(29));
// STOPSHIP: Remove code name checking once platform version bumps up to 30.
std::string codeName =
android::base::GetProperty("ro.build.version.codename", "");
if (codeName == "R") {
platformVersion = 30;
}
switch (platformVersion) {
case 30: {
android::sp<V1_1::IComponentStore> storeV1_1 =
new V1_1::utils::ComponentStore(store);
if (storeV1_1->registerAsService("software") != android::OK) {
LOG(ERROR) << "Cannot register software Codec2 v1.1 service.";
return;
}
break;
}
if (store->registerAsService("software") != android::OK) {
LOG(ERROR) <<
"Cannot register software Codec2 service.";
case 29: {
android::sp<V1_0::IComponentStore> storeV1_0 =
new V1_0::utils::ComponentStore(store);
if (storeV1_0->registerAsService("software") != android::OK) {
LOG(ERROR) << "Cannot register software Codec2 v1.0 service.";
return;
}
break;
}
default: {
LOG(ERROR) << "The platform version " << platformVersion <<
" is not supported.";
return;
}
}
if (!ionPropertiesDefined()) {
using IComponentStore =
::android::hardware::media::c2::V1_0::IComponentStore;
std::string const preferredStoreName = "default";
sp<IComponentStore> preferredStore =
IComponentStore::getService(preferredStoreName.c_str());
if (preferredStore) {
::android::SetPreferredCodec2ComponentStore(
std::make_shared<H2C2ComponentStore>(preferredStore));
LOG(INFO) <<
"Preferred Codec2 store is set to \"" <<
preferredStoreName << "\".";
} else {
LOG(INFO) <<
"Software Codec2 service created.";
"Preferred Codec2 store is defaulted to \"software\".";
}
}
LOG(INFO) << "Software Codec2 service created and registered.";
}

Loading…
Cancel
Save