blob: 09deee6816f7d10d3a34582e344b6938aab81802 [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 Wangab1ebb22024-12-03 14:54:03 -080026#include <aidl/android/hardware/tv/mediaquality/PictureParameter.h>
Haofan Wang58d25d22024-11-18 17:47:57 -080027#include <aidl/android/hardware/tv/mediaquality/PictureParameters.h>
28#include <aidl/android/hardware/tv/mediaquality/PictureProfile.h>
Haofan Wangab1ebb22024-12-03 14:54:03 -080029#include <aidl/android/hardware/tv/mediaquality/SoundParameter.h>
Haofan Wang58d25d22024-11-18 17:47:57 -080030#include <aidl/android/hardware/tv/mediaquality/SoundParameters.h>
31#include <aidl/android/hardware/tv/mediaquality/SoundProfile.h>
32
Haofan Wangb97b3f32024-10-31 15:33:17 -070033#include <android/binder_auto_utils.h>
34#include <android/binder_manager.h>
Haofan Wange02b8092024-10-28 21:47:27 +000035#include <binder/IServiceManager.h>
36#include <binder/ProcessState.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070037#include <future>
Haofan Wange02b8092024-10-28 21:47:27 +000038
Haofan Wangb97b3f32024-10-31 15:33:17 -070039using aidl::android::hardware::graphics::common::PixelFormat;
40using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
41using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
42using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
43using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
Haofan Wang58d25d22024-11-18 17:47:57 -080044using aidl::android::hardware::tv::mediaquality::BnPictureProfileAdjustmentListener;
45using aidl::android::hardware::tv::mediaquality::BnSoundProfileAdjustmentListener;
Haofan Wangb97b3f32024-10-31 15:33:17 -070046using aidl::android::hardware::tv::mediaquality::IMediaQuality;
Haofan Wang19796062024-12-02 12:15:20 -080047using aidl::android::hardware::tv::mediaquality::ParamCapability;
Haofan Wangab1ebb22024-12-03 14:54:03 -080048using aidl::android::hardware::tv::mediaquality::PictureParameter;
Haofan Wang58d25d22024-11-18 17:47:57 -080049using aidl::android::hardware::tv::mediaquality::PictureParameters;
50using aidl::android::hardware::tv::mediaquality::PictureProfile;
Haofan Wangab1ebb22024-12-03 14:54:03 -080051using aidl::android::hardware::tv::mediaquality::SoundParameter;
Haofan Wang58d25d22024-11-18 17:47:57 -080052using aidl::android::hardware::tv::mediaquality::SoundParameters;
53using aidl::android::hardware::tv::mediaquality::SoundProfile;
Haofan Wang19796062024-12-02 12:15:20 -080054using aidl::android::hardware::tv::mediaquality::VendorParamCapability;
Haofan Wange02b8092024-10-28 21:47:27 +000055using android::ProcessState;
Haofan Wange02b8092024-10-28 21:47:27 +000056using android::String16;
Haofan Wangb97b3f32024-10-31 15:33:17 -070057using ndk::ScopedAStatus;
58using ndk::SpAIBinder;
Haofan Wange02b8092024-10-28 21:47:27 +000059
60#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
61#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
62
Haofan Wangb97b3f32024-10-31 15:33:17 -070063class MediaQualityCallback : public BnMediaQualityCallback {
Haofan Wange02b8092024-10-28 21:47:27 +000064 public:
Haofan Wangb97b3f32024-10-31 15:33:17 -070065 explicit MediaQualityCallback(
66 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
67 : on_hal_event_cb_(on_hal_event_cb) {}
68 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
69 on_hal_event_cb_(event);
70 return ScopedAStatus::ok();
Haofan Wange02b8092024-10-28 21:47:27 +000071 }
72
Haofan Wangb97b3f32024-10-31 15:33:17 -070073 private:
74 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
Haofan Wange02b8092024-10-28 21:47:27 +000075};
76
Haofan Wang58d25d22024-11-18 17:47:57 -080077class PictureProfileAdjustmentListener : public BnPictureProfileAdjustmentListener {
78 public:
79 explicit PictureProfileAdjustmentListener(
80 const std::function<void(const PictureProfile& pictureProfile)>&
81 on_hal_picture_profile_adjust)
82 : on_hal_picture_profile_adjust_(on_hal_picture_profile_adjust) {}
83 ScopedAStatus onPictureProfileAdjusted(const PictureProfile& pictureProfile) override {
84 on_hal_picture_profile_adjust_(pictureProfile);
85 return ScopedAStatus::ok();
86 }
87
Haofan Wang19796062024-12-02 12:15:20 -080088 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
89 return ScopedAStatus::ok();
90 }
91
92 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
93 const std::vector<VendorParamCapability>&) {
94 return ScopedAStatus::ok();
95 }
96
Haofan Wangf8d660a2024-12-04 13:06:36 -080097 ScopedAStatus onRequestPictureParameters(int64_t) { return ScopedAStatus::ok(); }
98
Haofan Wang58d25d22024-11-18 17:47:57 -080099 private:
100 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
101};
102
103class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
104 public:
105 explicit SoundProfileAdjustmentListener(
106 const std::function<void(const SoundProfile& soundProfile)>&
107 on_hal_sound_profile_adjust)
108 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
109 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
110 on_hal_sound_profile_adjust_(soundProfile);
111 return ScopedAStatus::ok();
112 }
113
Haofan Wang19796062024-12-02 12:15:20 -0800114 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
115 return ScopedAStatus::ok();
116 }
117
118 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
119 const std::vector<VendorParamCapability>&) {
120 return ScopedAStatus::ok();
121 }
122
Haofan Wangf8d660a2024-12-04 13:06:36 -0800123 ScopedAStatus onRequestSoundParameters(int64_t) { return ScopedAStatus::ok(); }
124
Haofan Wang58d25d22024-11-18 17:47:57 -0800125 private:
126 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
127};
128
Haofan Wangb97b3f32024-10-31 15:33:17 -0700129class MediaQualityAidl : public testing::TestWithParam<std::string> {
130 public:
131 virtual void SetUp() override {
132 mediaquality = IMediaQuality::fromBinder(
133 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
134 ASSERT_NE(mediaquality, nullptr);
135 }
136 std::shared_ptr<IMediaQuality> mediaquality;
137};
138
139TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
140 std::promise<void> open_cb_promise;
141 std::future<void> open_cb_future{open_cb_promise.get_future()};
142 std::shared_ptr<MediaQualityCallback> callback =
143 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
144 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
145 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
146 open_cb_promise.set_value();
147 return ScopedAStatus::ok();
148 });
149 ASSERT_OK(mediaquality->setCallback(callback));
150 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
151 std::chrono::milliseconds timeout{10000};
152 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +0000153}
154
Haofan Wangb97b3f32024-10-31 15:33:17 -0700155TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +0000156 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -0700157 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
158}
159
160TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
161 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
162 [](auto /* event */) { return ScopedAStatus::ok(); });
163 ASSERT_OK(mediaquality->setCallback(callback));
164}
165
Haofan Wang58d25d22024-11-18 17:47:57 -0800166TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
167 std::shared_ptr<PictureProfileAdjustmentListener> listener =
168 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
169 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
170 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
171}
172
Haofan Wang778dcf22024-12-02 13:18:11 -0800173TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800174 PictureParameters pictureParameters;
175 std::vector<PictureParameter> picParams;
176
177 PictureParameter brightnessParam;
178 brightnessParam.set<PictureParameter::Tag::brightness>(0.5f);
179 picParams.push_back(brightnessParam);
180
181 PictureParameter contrastParam;
182 contrastParam.set<PictureParameter::Tag::contrast>(50);
183 picParams.push_back(contrastParam);
184
185 pictureParameters.pictureParameters = picParams;
186 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800187}
188
Haofan Wang58d25d22024-11-18 17:47:57 -0800189TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
190 std::shared_ptr<SoundProfileAdjustmentListener> listener =
191 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
192 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
193 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
194}
195
Haofan Wang778dcf22024-12-02 13:18:11 -0800196TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800197 SoundParameters soundParameters;
198 std::vector<SoundParameter> soundParams;
199
200 SoundParameter balanceParam;
201 balanceParam.set<SoundParameter::Tag::balance>(50);
202 soundParams.push_back(balanceParam);
203
204 SoundParameter bassParam;
205 bassParam.set<SoundParameter::Tag::bass>(50);
206 soundParams.push_back(bassParam);
207
208 soundParameters.soundParameters = soundParams;
209 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800210}
211
Haofan Wangb97b3f32024-10-31 15:33:17 -0700212TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
213 AmbientBacklightSettings in_settings = {
214 .packageName = "com.android.mediaquality",
215 .source = AmbientBacklightSource::VIDEO,
216 .colorFormat = PixelFormat::RGB_888,
217 .hZonesNumber = 32,
218 .vZonesNumber = 20,
219 .hasLetterbox = true,
220 .threshold = 0,
221 };
222 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000223}
224
Haofan Wangee9629f2024-11-22 13:34:17 -0800225TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
226 bool supported;
227 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
228}
229
230TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
231 bool enabled;
232 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
233}
234
235TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
236 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
237}
238
239TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
240 bool supported;
241 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
242}
243
244TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
245 bool enabled;
246 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
247}
248
249TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
250 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
251}
252
253TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
254 bool supported;
255 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
256}
257
258TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
259 bool enabled;
260 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
261}
262
263TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
264 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
265}
266
Haofan Wange02b8092024-10-28 21:47:27 +0000267GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
268
269INSTANTIATE_TEST_SUITE_P(
270 PerInstance, MediaQualityAidl,
271 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
272 android::PrintInstanceNameToString);
273
274int main(int argc, char** argv) {
275 ::testing::InitGoogleTest(&argc, argv);
276 ProcessState::self()->setThreadPoolMaxThreadCount(1);
277 ProcessState::self()->startThreadPool();
278 return RUN_ALL_TESTS();
279}