Add additional APIs and aidl for ambient backlight feature
Bug: 375472716
Test: atest VtsHalMediaQualityTargetTest
Flag: android.media.tv.flags.media_quality_fw
Change-Id: I2b67c6d6a13889331b5d053e2c118d5ce7f14bd2
diff --git a/tv/mediaquality/aidl/vts/functional/VtsHalMediaQualityTest.cpp b/tv/mediaquality/aidl/vts/functional/VtsHalMediaQualityTest.cpp
index 5934e14..c11ebcb 100644
--- a/tv/mediaquality/aidl/vts/functional/VtsHalMediaQualityTest.cpp
+++ b/tv/mediaquality/aidl/vts/functional/VtsHalMediaQualityTest.cpp
@@ -13,51 +13,96 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-#define LOG_TAG "ambient_intelligence_light_aidl_hal_test"
+#define LOG_TAG "ambient_backlight_aidl_hal_test"
#include <aidl/Gtest.h>
#include <aidl/Vintf.h>
-#include <android/hardware/tv/mediaquality/IMediaQuality.h>
+#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightEvent.h>
+#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightSettings.h>
+#include <aidl/android/hardware/tv/mediaquality/BnMediaQualityCallback.h>
+#include <aidl/android/hardware/tv/mediaquality/IMediaQuality.h>
+#include <android/binder_auto_utils.h>
+#include <android/binder_manager.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
-#include <gtest/gtest.h>
-#include <hidl/GtestPrinter.h>
-#include <hidl/ServiceManagement.h>
+#include <future>
+using aidl::android::hardware::graphics::common::PixelFormat;
+using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
+using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
+using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
+using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
+using aidl::android::hardware::tv::mediaquality::IMediaQuality;
using android::ProcessState;
-using android::sp;
using android::String16;
-using android::binder::Status;
-using android::hardware::hidl_vec;
-using android::hardware::Return;
-using android::hardware::Void;
-using android::hardware::tv::mediaquality::IMediaQuality;
+using ndk::ScopedAStatus;
+using ndk::SpAIBinder;
#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
-class MediaQualityAidl : public testing::TestWithParam<std::string> {
+class MediaQualityCallback : public BnMediaQualityCallback {
public:
- void SetUp() override {
- mediaquality = android::waitForDeclaredService<IMediaQuality>(String16(GetParam().c_str()));
- ASSERT_NE(mediaquality, nullptr);
+ explicit MediaQualityCallback(
+ const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
+ : on_hal_event_cb_(on_hal_event_cb) {}
+ ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
+ on_hal_event_cb_(event);
+ return ScopedAStatus::ok();
}
- sp<IMediaQuality> mediaquality;
-
- void TearDown() override {}
+ private:
+ std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
};
-TEST_P(MediaQualityAidl, TestSetAmbientLightDetectionEnabled) {
- ASSERT_OK(mediaquality->setAmbientLightDetectionEnabled(true));
+class MediaQualityAidl : public testing::TestWithParam<std::string> {
+ public:
+ virtual void SetUp() override {
+ mediaquality = IMediaQuality::fromBinder(
+ SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
+ ASSERT_NE(mediaquality, nullptr);
+ }
+ std::shared_ptr<IMediaQuality> mediaquality;
+};
+
+TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
+ std::promise<void> open_cb_promise;
+ std::future<void> open_cb_future{open_cb_promise.get_future()};
+ std::shared_ptr<MediaQualityCallback> callback =
+ ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
+ EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
+ EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
+ open_cb_promise.set_value();
+ return ScopedAStatus::ok();
+ });
+ ASSERT_OK(mediaquality->setCallback(callback));
+ ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
+ std::chrono::milliseconds timeout{10000};
+ EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
}
-TEST_P(MediaQualityAidl, TestGetAmbientLightDetectionEnabled) {
+TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
bool enabled;
- Status status = mediaquality->getAmbientLightDetectionEnabled(&enabled);
- ASSERT_TRUE(status.isOk());
- ASSERT_TRUE(enabled);
+ ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
+}
+
+TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
+ std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
+ [](auto /* event */) { return ScopedAStatus::ok(); });
+ ASSERT_OK(mediaquality->setCallback(callback));
+}
+
+TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
+ AmbientBacklightSettings in_settings = {
+ .packageName = "com.android.mediaquality",
+ .source = AmbientBacklightSource::VIDEO,
+ .colorFormat = PixelFormat::RGB_888,
+ .hZonesNumber = 32,
+ .vZonesNumber = 20,
+ .hasLetterbox = true,
+ .threshold = 0,
+ };
+ ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
}
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);