blob: b508ed630ff4c325f4b80f0dbd236b9142bbb424 [file] [log] [blame]
Haofan Wange02b8092024-10-28 21:47:27 +00001/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Haofan Wangb97b3f32024-10-31 15:33:17 -070016#define LOG_TAG "ambient_backlight_aidl_hal_test"
Haofan Wange02b8092024-10-28 21:47:27 +000017
18#include <aidl/Gtest.h>
19#include <aidl/Vintf.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070020#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightEvent.h>
21#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightSettings.h>
22#include <aidl/android/hardware/tv/mediaquality/BnMediaQualityCallback.h>
Haofan Wang58d25d22024-11-18 17:47:57 -080023#include <aidl/android/hardware/tv/mediaquality/BnPictureProfileAdjustmentListener.h>
24#include <aidl/android/hardware/tv/mediaquality/BnSoundProfileAdjustmentListener.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070025#include <aidl/android/hardware/tv/mediaquality/IMediaQuality.h>
Haofan Wang58d25d22024-11-18 17:47:57 -080026#include <aidl/android/hardware/tv/mediaquality/PictureParameters.h>
27#include <aidl/android/hardware/tv/mediaquality/PictureProfile.h>
28#include <aidl/android/hardware/tv/mediaquality/SoundParameters.h>
29#include <aidl/android/hardware/tv/mediaquality/SoundProfile.h>
30
Haofan Wangb97b3f32024-10-31 15:33:17 -070031#include <android/binder_auto_utils.h>
32#include <android/binder_manager.h>
Haofan Wange02b8092024-10-28 21:47:27 +000033#include <binder/IServiceManager.h>
34#include <binder/ProcessState.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070035#include <future>
Haofan Wange02b8092024-10-28 21:47:27 +000036
Haofan Wangb97b3f32024-10-31 15:33:17 -070037using aidl::android::hardware::graphics::common::PixelFormat;
38using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
39using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
40using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
41using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
Haofan Wang58d25d22024-11-18 17:47:57 -080042using aidl::android::hardware::tv::mediaquality::BnPictureProfileAdjustmentListener;
43using aidl::android::hardware::tv::mediaquality::BnSoundProfileAdjustmentListener;
Haofan Wangb97b3f32024-10-31 15:33:17 -070044using aidl::android::hardware::tv::mediaquality::IMediaQuality;
Haofan Wang19796062024-12-02 12:15:20 -080045using aidl::android::hardware::tv::mediaquality::ParamCapability;
Haofan Wang58d25d22024-11-18 17:47:57 -080046using aidl::android::hardware::tv::mediaquality::PictureParameters;
47using aidl::android::hardware::tv::mediaquality::PictureProfile;
48using aidl::android::hardware::tv::mediaquality::SoundParameters;
49using aidl::android::hardware::tv::mediaquality::SoundProfile;
Haofan Wang19796062024-12-02 12:15:20 -080050using aidl::android::hardware::tv::mediaquality::VendorParamCapability;
Haofan Wange02b8092024-10-28 21:47:27 +000051using android::ProcessState;
Haofan Wange02b8092024-10-28 21:47:27 +000052using android::String16;
Haofan Wangb97b3f32024-10-31 15:33:17 -070053using ndk::ScopedAStatus;
54using ndk::SpAIBinder;
Haofan Wange02b8092024-10-28 21:47:27 +000055
56#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
57#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
58
Haofan Wangb97b3f32024-10-31 15:33:17 -070059class MediaQualityCallback : public BnMediaQualityCallback {
Haofan Wange02b8092024-10-28 21:47:27 +000060 public:
Haofan Wangb97b3f32024-10-31 15:33:17 -070061 explicit MediaQualityCallback(
62 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
63 : on_hal_event_cb_(on_hal_event_cb) {}
64 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
65 on_hal_event_cb_(event);
66 return ScopedAStatus::ok();
Haofan Wange02b8092024-10-28 21:47:27 +000067 }
68
Haofan Wangb97b3f32024-10-31 15:33:17 -070069 private:
70 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
Haofan Wange02b8092024-10-28 21:47:27 +000071};
72
Haofan Wang58d25d22024-11-18 17:47:57 -080073class PictureProfileAdjustmentListener : public BnPictureProfileAdjustmentListener {
74 public:
75 explicit PictureProfileAdjustmentListener(
76 const std::function<void(const PictureProfile& pictureProfile)>&
77 on_hal_picture_profile_adjust)
78 : on_hal_picture_profile_adjust_(on_hal_picture_profile_adjust) {}
79 ScopedAStatus onPictureProfileAdjusted(const PictureProfile& pictureProfile) override {
80 on_hal_picture_profile_adjust_(pictureProfile);
81 return ScopedAStatus::ok();
82 }
83
Haofan Wang19796062024-12-02 12:15:20 -080084 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
85 return ScopedAStatus::ok();
86 }
87
88 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
89 const std::vector<VendorParamCapability>&) {
90 return ScopedAStatus::ok();
91 }
92
Haofan Wang58d25d22024-11-18 17:47:57 -080093 private:
94 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
95};
96
97class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
98 public:
99 explicit SoundProfileAdjustmentListener(
100 const std::function<void(const SoundProfile& soundProfile)>&
101 on_hal_sound_profile_adjust)
102 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
103 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
104 on_hal_sound_profile_adjust_(soundProfile);
105 return ScopedAStatus::ok();
106 }
107
Haofan Wang19796062024-12-02 12:15:20 -0800108 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
109 return ScopedAStatus::ok();
110 }
111
112 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
113 const std::vector<VendorParamCapability>&) {
114 return ScopedAStatus::ok();
115 }
116
Haofan Wang58d25d22024-11-18 17:47:57 -0800117 private:
118 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
119};
120
Haofan Wangb97b3f32024-10-31 15:33:17 -0700121class MediaQualityAidl : public testing::TestWithParam<std::string> {
122 public:
123 virtual void SetUp() override {
124 mediaquality = IMediaQuality::fromBinder(
125 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
126 ASSERT_NE(mediaquality, nullptr);
127 }
128 std::shared_ptr<IMediaQuality> mediaquality;
129};
130
131TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
132 std::promise<void> open_cb_promise;
133 std::future<void> open_cb_future{open_cb_promise.get_future()};
134 std::shared_ptr<MediaQualityCallback> callback =
135 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
136 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
137 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
138 open_cb_promise.set_value();
139 return ScopedAStatus::ok();
140 });
141 ASSERT_OK(mediaquality->setCallback(callback));
142 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
143 std::chrono::milliseconds timeout{10000};
144 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +0000145}
146
Haofan Wangb97b3f32024-10-31 15:33:17 -0700147TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +0000148 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -0700149 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
150}
151
152TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
153 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
154 [](auto /* event */) { return ScopedAStatus::ok(); });
155 ASSERT_OK(mediaquality->setCallback(callback));
156}
157
Haofan Wang58d25d22024-11-18 17:47:57 -0800158TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
159 std::shared_ptr<PictureProfileAdjustmentListener> listener =
160 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
161 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
162 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
163}
164
165TEST_P(MediaQualityAidl, TestGetPictureParameters) {
166 PictureParameters pictureParams;
167 auto result = mediaquality->getPictureParameters(1, &pictureParams);
168 ASSERT_TRUE(result.isOk());
169 ASSERT_EQ(pictureParams.pictureParameters.size(), 2);
170}
171
Haofan Wang778dcf22024-12-02 13:18:11 -0800172TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
173 PictureParameters pictureParams;
174 auto result = mediaquality->getPictureParameters(1, &pictureParams);
175 ASSERT_TRUE(result.isOk());
176 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParams));
177}
178
Haofan Wang58d25d22024-11-18 17:47:57 -0800179TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
180 std::shared_ptr<SoundProfileAdjustmentListener> listener =
181 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
182 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
183 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
184}
185
186TEST_P(MediaQualityAidl, TestGetSoundParameters) {
187 SoundParameters soundParams;
188 auto result = mediaquality->getSoundParameters(1, &soundParams);
189 ASSERT_TRUE(result.isOk());
190 ASSERT_EQ(soundParams.soundParameters.size(), 2);
191}
192
Haofan Wang778dcf22024-12-02 13:18:11 -0800193TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
194 SoundParameters soundParams;
195 auto result = mediaquality->getSoundParameters(1, &soundParams);
196 ASSERT_TRUE(result.isOk());
197 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParams));
198}
199
Haofan Wangb97b3f32024-10-31 15:33:17 -0700200TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
201 AmbientBacklightSettings in_settings = {
202 .packageName = "com.android.mediaquality",
203 .source = AmbientBacklightSource::VIDEO,
204 .colorFormat = PixelFormat::RGB_888,
205 .hZonesNumber = 32,
206 .vZonesNumber = 20,
207 .hasLetterbox = true,
208 .threshold = 0,
209 };
210 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000211}
212
Haofan Wangee9629f2024-11-22 13:34:17 -0800213TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
214 bool supported;
215 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
216}
217
218TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
219 bool enabled;
220 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
221}
222
223TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
224 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
225}
226
227TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
228 bool supported;
229 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
230}
231
232TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
233 bool enabled;
234 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
235}
236
237TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
238 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
239}
240
241TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
242 bool supported;
243 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
244}
245
246TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
247 bool enabled;
248 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
249}
250
251TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
252 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
253}
254
Haofan Wange02b8092024-10-28 21:47:27 +0000255GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
256
257INSTANTIATE_TEST_SUITE_P(
258 PerInstance, MediaQualityAidl,
259 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
260 android::PrintInstanceNameToString);
261
262int main(int argc, char** argv) {
263 ::testing::InitGoogleTest(&argc, argv);
264 ProcessState::self()->setThreadPoolMaxThreadCount(1);
265 ProcessState::self()->startThreadPool();
266 return RUN_ALL_TESTS();
267}