blob: 84f798bd4cd006de0e787f26743dee5e97131324 [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;
Shubang Lu370dccf2024-12-04 13:29:02 -080055using aidl::android::hardware::tv::mediaquality::VendorParameterIdentifier;
Haofan Wange02b8092024-10-28 21:47:27 +000056using android::ProcessState;
Haofan Wange02b8092024-10-28 21:47:27 +000057using android::String16;
Haofan Wangb97b3f32024-10-31 15:33:17 -070058using ndk::ScopedAStatus;
59using ndk::SpAIBinder;
Haofan Wange02b8092024-10-28 21:47:27 +000060
61#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
62#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
63
Haofan Wangb97b3f32024-10-31 15:33:17 -070064class MediaQualityCallback : public BnMediaQualityCallback {
Haofan Wange02b8092024-10-28 21:47:27 +000065 public:
Haofan Wangb97b3f32024-10-31 15:33:17 -070066 explicit MediaQualityCallback(
67 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
68 : on_hal_event_cb_(on_hal_event_cb) {}
69 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
70 on_hal_event_cb_(event);
71 return ScopedAStatus::ok();
Haofan Wange02b8092024-10-28 21:47:27 +000072 }
73
Haofan Wangb97b3f32024-10-31 15:33:17 -070074 private:
75 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
Haofan Wange02b8092024-10-28 21:47:27 +000076};
77
Haofan Wang58d25d22024-11-18 17:47:57 -080078class PictureProfileAdjustmentListener : public BnPictureProfileAdjustmentListener {
79 public:
80 explicit PictureProfileAdjustmentListener(
81 const std::function<void(const PictureProfile& pictureProfile)>&
82 on_hal_picture_profile_adjust)
83 : on_hal_picture_profile_adjust_(on_hal_picture_profile_adjust) {}
84 ScopedAStatus onPictureProfileAdjusted(const PictureProfile& pictureProfile) override {
85 on_hal_picture_profile_adjust_(pictureProfile);
86 return ScopedAStatus::ok();
87 }
88
Haofan Wang19796062024-12-02 12:15:20 -080089 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
90 return ScopedAStatus::ok();
91 }
92
93 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
94 const std::vector<VendorParamCapability>&) {
95 return ScopedAStatus::ok();
96 }
97
Haofan Wangf8d660a2024-12-04 13:06:36 -080098 ScopedAStatus onRequestPictureParameters(int64_t) { return ScopedAStatus::ok(); }
99
Haofan Wang58d25d22024-11-18 17:47:57 -0800100 private:
101 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
102};
103
104class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
105 public:
106 explicit SoundProfileAdjustmentListener(
107 const std::function<void(const SoundProfile& soundProfile)>&
108 on_hal_sound_profile_adjust)
109 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
110 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
111 on_hal_sound_profile_adjust_(soundProfile);
112 return ScopedAStatus::ok();
113 }
114
Haofan Wang19796062024-12-02 12:15:20 -0800115 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
116 return ScopedAStatus::ok();
117 }
118
119 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
120 const std::vector<VendorParamCapability>&) {
121 return ScopedAStatus::ok();
122 }
123
Haofan Wangf8d660a2024-12-04 13:06:36 -0800124 ScopedAStatus onRequestSoundParameters(int64_t) { return ScopedAStatus::ok(); }
125
Haofan Wang58d25d22024-11-18 17:47:57 -0800126 private:
127 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
128};
129
Haofan Wangb97b3f32024-10-31 15:33:17 -0700130class MediaQualityAidl : public testing::TestWithParam<std::string> {
131 public:
132 virtual void SetUp() override {
133 mediaquality = IMediaQuality::fromBinder(
134 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
135 ASSERT_NE(mediaquality, nullptr);
136 }
137 std::shared_ptr<IMediaQuality> mediaquality;
138};
139
140TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
141 std::promise<void> open_cb_promise;
142 std::future<void> open_cb_future{open_cb_promise.get_future()};
143 std::shared_ptr<MediaQualityCallback> callback =
144 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
145 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
146 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
147 open_cb_promise.set_value();
148 return ScopedAStatus::ok();
149 });
150 ASSERT_OK(mediaquality->setCallback(callback));
151 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
152 std::chrono::milliseconds timeout{10000};
153 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +0000154}
155
Haofan Wangb97b3f32024-10-31 15:33:17 -0700156TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +0000157 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -0700158 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
159}
160
161TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
162 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
163 [](auto /* event */) { return ScopedAStatus::ok(); });
164 ASSERT_OK(mediaquality->setCallback(callback));
165}
166
Haofan Wang58d25d22024-11-18 17:47:57 -0800167TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
168 std::shared_ptr<PictureProfileAdjustmentListener> listener =
169 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
170 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
171 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
172}
173
Haofan Wang778dcf22024-12-02 13:18:11 -0800174TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800175 PictureParameters pictureParameters;
176 std::vector<PictureParameter> picParams;
177
178 PictureParameter brightnessParam;
179 brightnessParam.set<PictureParameter::Tag::brightness>(0.5f);
180 picParams.push_back(brightnessParam);
181
182 PictureParameter contrastParam;
183 contrastParam.set<PictureParameter::Tag::contrast>(50);
184 picParams.push_back(contrastParam);
185
186 pictureParameters.pictureParameters = picParams;
187 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800188}
189
Haofan Wang58d25d22024-11-18 17:47:57 -0800190TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
191 std::shared_ptr<SoundProfileAdjustmentListener> listener =
192 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
193 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
194 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
195}
196
Haofan Wang778dcf22024-12-02 13:18:11 -0800197TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800198 SoundParameters soundParameters;
199 std::vector<SoundParameter> soundParams;
200
201 SoundParameter balanceParam;
202 balanceParam.set<SoundParameter::Tag::balance>(50);
203 soundParams.push_back(balanceParam);
204
205 SoundParameter bassParam;
206 bassParam.set<SoundParameter::Tag::bass>(50);
207 soundParams.push_back(bassParam);
208
209 soundParameters.soundParameters = soundParams;
210 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800211}
212
Haofan Wangb97b3f32024-10-31 15:33:17 -0700213TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
214 AmbientBacklightSettings in_settings = {
215 .packageName = "com.android.mediaquality",
216 .source = AmbientBacklightSource::VIDEO,
217 .colorFormat = PixelFormat::RGB_888,
218 .hZonesNumber = 32,
219 .vZonesNumber = 20,
220 .hasLetterbox = true,
221 .threshold = 0,
222 };
223 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000224}
225
Haofan Wangee9629f2024-11-22 13:34:17 -0800226TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
227 bool supported;
228 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
229}
230
231TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
232 bool enabled;
233 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
234}
235
236TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
237 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
238}
239
240TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
241 bool supported;
242 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
243}
244
245TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
246 bool enabled;
247 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
248}
249
250TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
251 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
252}
253
254TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
255 bool supported;
256 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
257}
258
259TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
260 bool enabled;
261 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
262}
263
264TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
265 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
266}
267
Haofan Wange02b8092024-10-28 21:47:27 +0000268GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
269
270INSTANTIATE_TEST_SUITE_P(
271 PerInstance, MediaQualityAidl,
272 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
273 android::PrintInstanceNameToString);
274
275int main(int argc, char** argv) {
276 ::testing::InitGoogleTest(&argc, argv);
277 ProcessState::self()->setThreadPoolMaxThreadCount(1);
278 ProcessState::self()->startThreadPool();
279 return RUN_ALL_TESTS();
280}