codec2 hal: add sysprop for HAL selection
Bug: 251850069
Test: run the example service and confirm the selection works
Change-Id: I0875989ab46c937b6749096d0b5f1805ea5eb02e
diff --git a/media/codec2/hal/aidl/Android.bp b/media/codec2/hal/aidl/Android.bp
index a6a6b77..a313250 100644
--- a/media/codec2/hal/aidl/Android.bp
+++ b/media/codec2/hal/aidl/Android.bp
@@ -36,6 +36,7 @@
],
static_libs: [
+ "libPlatformProperties",
"libaidlcommonsupport",
],
@@ -97,6 +98,7 @@
],
static_libs: [
+ "libPlatformProperties",
"libaidlcommonsupport",
],
diff --git a/media/codec2/hal/aidl/ParamTypes.cpp b/media/codec2/hal/aidl/ParamTypes.cpp
index 7026f4c..41e6f50 100644
--- a/media/codec2/hal/aidl/ParamTypes.cpp
+++ b/media/codec2/hal/aidl/ParamTypes.cpp
@@ -18,6 +18,8 @@
#define LOG_TAG "Codec2-AIDL-ParamTypes"
#include <android-base/logging.h>
+#include <android/binder_manager.h>
+#include <android/sysprop/MediaProperties.sysprop.h>
#include <codec2/aidl/ParamTypes.h>
#include <codec2/common/ParamTypes.h>
@@ -157,8 +159,30 @@
namespace c2 {
namespace utils {
-// TODO: read it from aconfig flags
-bool IsEnabled() { return false; }
+bool IsSelected() {
+ // TODO: read from aconfig flags
+ const bool enabled = false;
+
+ if (!enabled) {
+ // Cannot select AIDL if not enabled
+ return false;
+ }
+ 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;
+ }
+
+ return false;
+}
const char* asString(Status status, const char* def) {
return asString(static_cast<c2_status_t>(status.status), def);
diff --git a/media/codec2/hal/aidl/include/codec2/aidl/ParamTypes.h b/media/codec2/hal/aidl/include/codec2/aidl/ParamTypes.h
index 3f82ee3..7c31a06 100644
--- a/media/codec2/hal/aidl/include/codec2/aidl/ParamTypes.h
+++ b/media/codec2/hal/aidl/include/codec2/aidl/ParamTypes.h
@@ -37,8 +37,8 @@
namespace c2 {
namespace utils {
-// Returns true iff AIDL c2 HAL is enabled
-bool IsEnabled();
+// Returns true iff AIDL c2 HAL is selected for the system
+bool IsSelected();
// Make asString() and operator<< work with Status as well as c2_status_t.
C2_DECLARE_AS_STRING_AND_DEFINE_STREAM_OUT(Status);