Add an aconfig flag for media.c2 AIDL impl
Bug: 251850069
Test: adb shell dumpsys android.hardware.media.c2.IComponentStore/software
Change-Id: I4f0e5a969a34ef0d76e4d4ce91b3de577334fb7e
diff --git a/media/aconfig/Android.bp b/media/aconfig/Android.bp
index 4b489e2..96bf4f5 100644
--- a/media/aconfig/Android.bp
+++ b/media/aconfig/Android.bp
@@ -12,5 +12,11 @@
cc_aconfig_library {
name: "aconfig_mediacodec_flags_c_lib",
+ min_sdk_version: "30",
+ vendor_available: true,
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.media.swcodec",
+ ],
aconfig_declarations: "aconfig_mediacodec_flags",
}
diff --git a/media/aconfig/mediacodec_flags.aconfig b/media/aconfig/mediacodec_flags.aconfig
index 90ddf27..c82ad4d 100644
--- a/media/aconfig/mediacodec_flags.aconfig
+++ b/media/aconfig/mediacodec_flags.aconfig
@@ -13,3 +13,10 @@
description: "Feature flags for media codec importance"
bug: "297929011"
}
+
+flag {
+ name: "aidl_hal"
+ namespace: "codec_fwk"
+ description: "Feature flags for enabling AIDL HAL handling"
+ bug: "251850069"
+}
diff --git a/media/codec2/hal/aidl/Android.bp b/media/codec2/hal/aidl/Android.bp
index ac0a077..7a9af18 100644
--- a/media/codec2/hal/aidl/Android.bp
+++ b/media/codec2/hal/aidl/Android.bp
@@ -7,6 +7,10 @@
cc_library {
name: "libcodec2_aidl_client",
+ defaults: [
+ "libcodec2_hal_selection",
+ ],
+
srcs: [
"BufferTypes.cpp",
"ParamTypes.cpp",
@@ -58,7 +62,10 @@
apex_available: [
"//apex_available:platform",
"com.android.media.swcodec",
- "test_com.android.media.swcodec",
+ ],
+
+ defaults: [
+ "libcodec2_hal_selection",
],
srcs: [
diff --git a/media/codec2/hal/aidl/ParamTypes.cpp b/media/codec2/hal/aidl/ParamTypes.cpp
index 495e748..5ad0810 100644
--- a/media/codec2/hal/aidl/ParamTypes.cpp
+++ b/media/codec2/hal/aidl/ParamTypes.cpp
@@ -23,6 +23,7 @@
// #include <android/sysprop/MediaProperties.sysprop.h>
#include <android-base/properties.h>
#include <codec2/aidl/ParamTypes.h>
+#include <codec2/common/HalSelection.h>
#include <codec2/common/ParamTypes.h>
#include "ParamTypes-specialization.h"
@@ -162,40 +163,7 @@
namespace utils {
bool IsSelected() {
- // TODO: read from aconfig flags
- const bool enabled = false;
-
- if (!enabled) {
- // Cannot select AIDL if not enabled
- return false;
- }
-#if 0
- // NOTE: due to dependency from mainline modules cannot use libsysprop
- using ::android::sysprop::MediaProperties::codec2_hal_selection;
- using ::android::sysprop::MediaProperties::codec2_hal_selection_values;
- constexpr codec2_hal_selection_values AIDL = codec2_hal_selection_values::AIDL;
- constexpr codec2_hal_selection_values HIDL = codec2_hal_selection_values::HIDL;
- codec2_hal_selection_values selection = codec2_hal_selection().value_or(HIDL);
- switch (selection) {
- case AIDL:
- return true;
- case HIDL:
- return false;
- default:
- LOG(FATAL) << "Unexpected codec2 HAL selection value: " << (int)selection;
- }
-#else
- std::string selection = ::android::base::GetProperty("media.c2.hal.selection", "hidl");
- if (selection == "aidl") {
- return true;
- } else if (selection == "hidl") {
- return false;
- } else {
- LOG(FATAL) << "Unexpected codec2 HAL selection value: " << selection;
- }
-#endif
-
- return false;
+ return ::android::IsCodec2AidlHalSelected();
}
const char* asString(Status status, const char* def) {
diff --git a/media/codec2/hal/common/Android.bp b/media/codec2/hal/common/Android.bp
index f0193d7..2aedd8b 100644
--- a/media/codec2/hal/common/Android.bp
+++ b/media/codec2/hal/common/Android.bp
@@ -28,3 +28,40 @@
"libstagefright_foundation",
],
}
+
+cc_library_static {
+ name: "libcodec2_hal_selection_static",
+ double_loadable: true,
+ vendor_available: true,
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.media",
+ "com.android.media.swcodec",
+ ],
+ min_sdk_version: "29",
+
+ srcs: [
+ "HalSelection.cpp",
+ ],
+
+ export_include_dirs: ["include/"],
+
+ shared_libs: [
+ "libbase",
+ "server_configurable_flags",
+ ],
+
+ static_libs: ["aconfig_mediacodec_flags_c_lib"],
+}
+
+cc_defaults {
+ name: "libcodec2_hal_selection",
+ static_libs: [
+ "aconfig_mediacodec_flags_c_lib",
+ "libcodec2_hal_selection_static",
+ ],
+ shared_libs: [
+ "libbase",
+ "server_configurable_flags",
+ ],
+}
diff --git a/media/codec2/hal/common/HalSelection.cpp b/media/codec2/hal/common/HalSelection.cpp
new file mode 100644
index 0000000..761a409
--- /dev/null
+++ b/media/codec2/hal/common/HalSelection.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2023 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 "Codec2-HalSelection"
+#include <android-base/logging.h>
+
+// NOTE: due to dependency from mainline modules cannot use libsysprop
+// #include <android/sysprop/MediaProperties.sysprop.h>
+#include <android-base/properties.h>
+#include <com_android_media_codec_flags.h>
+
+#include <codec2/common/HalSelection.h>
+
+namespace android {
+
+bool IsCodec2AidlHalSelected() {
+ if (!com::android::media::codec::flags::provider_->aidl_hal()) {
+ // Cannot select AIDL if not enabled
+ return false;
+ }
+#if 0
+ // NOTE: due to dependency from mainline modules cannot use libsysprop
+ using ::android::sysprop::MediaProperties::codec2_hal_selection;
+ using ::android::sysprop::MediaProperties::codec2_hal_selection_values;
+ constexpr codec2_hal_selection_values AIDL = codec2_hal_selection_values::AIDL;
+ constexpr codec2_hal_selection_values HIDL = codec2_hal_selection_values::HIDL;
+ codec2_hal_selection_values selection = codec2_hal_selection().value_or(HIDL);
+ switch (selection) {
+ case AIDL:
+ return true;
+ case HIDL:
+ return false;
+ default:
+ LOG(FATAL) << "Unexpected codec2 HAL selection value: " << (int)selection;
+ }
+#else
+ std::string selection = ::android::base::GetProperty("media.c2.hal.selection", "hidl");
+ if (selection == "aidl") {
+ return true;
+ } else if (selection == "hidl") {
+ return false;
+ } else {
+ LOG(FATAL) << "Unexpected codec2 HAL selection value: " << selection;
+ }
+#endif
+
+ return false;
+}
+
+} // namespace android
diff --git a/media/codec2/hal/common/include/codec2/common/HalSelection.h b/media/codec2/hal/common/include/codec2/common/HalSelection.h
new file mode 100644
index 0000000..7c77515
--- /dev/null
+++ b/media/codec2/hal/common/include/codec2/common/HalSelection.h
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+#ifndef CODEC2_HAL_SELECTION_H
+#define CODEC2_HAL_SELECTION_H
+
+namespace android {
+
+// Returns true iff AIDL c2 HAL is selected for the system
+bool IsCodec2AidlHalSelected();
+
+} // namespace android
+
+#endif // CODEC2_HAL_SELECTION_H