blob: f785cad556010248c87ced3100008ee8a1df6fc8 [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>
Haofan Wang776b6c82024-12-18 12:03:11 -080032#include <aidl/android/hardware/tv/mediaquality/StreamStatus.h>
Haofan Wang58d25d22024-11-18 17:47:57 -080033
Haofan Wangb97b3f32024-10-31 15:33:17 -070034#include <android/binder_auto_utils.h>
35#include <android/binder_manager.h>
Haofan Wange02b8092024-10-28 21:47:27 +000036#include <binder/IServiceManager.h>
37#include <binder/ProcessState.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070038#include <future>
Haofan Wange02b8092024-10-28 21:47:27 +000039
Haofan Wangb97b3f32024-10-31 15:33:17 -070040using aidl::android::hardware::graphics::common::PixelFormat;
41using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
42using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
43using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
44using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
Haofan Wang58d25d22024-11-18 17:47:57 -080045using aidl::android::hardware::tv::mediaquality::BnPictureProfileAdjustmentListener;
46using aidl::android::hardware::tv::mediaquality::BnSoundProfileAdjustmentListener;
Haofan Wangb97b3f32024-10-31 15:33:17 -070047using aidl::android::hardware::tv::mediaquality::IMediaQuality;
Haofan Wang19796062024-12-02 12:15:20 -080048using aidl::android::hardware::tv::mediaquality::ParamCapability;
Haofan Wangab1ebb22024-12-03 14:54:03 -080049using aidl::android::hardware::tv::mediaquality::PictureParameter;
Haofan Wang58d25d22024-11-18 17:47:57 -080050using aidl::android::hardware::tv::mediaquality::PictureParameters;
51using aidl::android::hardware::tv::mediaquality::PictureProfile;
Haofan Wangab1ebb22024-12-03 14:54:03 -080052using aidl::android::hardware::tv::mediaquality::SoundParameter;
Haofan Wang58d25d22024-11-18 17:47:57 -080053using aidl::android::hardware::tv::mediaquality::SoundParameters;
54using aidl::android::hardware::tv::mediaquality::SoundProfile;
Haofan Wang776b6c82024-12-18 12:03:11 -080055using aidl::android::hardware::tv::mediaquality::StreamStatus;
Haofan Wang19796062024-12-02 12:15:20 -080056using aidl::android::hardware::tv::mediaquality::VendorParamCapability;
Shubang Lu370dccf2024-12-04 13:29:02 -080057using aidl::android::hardware::tv::mediaquality::VendorParameterIdentifier;
Haofan Wange02b8092024-10-28 21:47:27 +000058using android::ProcessState;
Haofan Wange02b8092024-10-28 21:47:27 +000059using android::String16;
Haofan Wangb97b3f32024-10-31 15:33:17 -070060using ndk::ScopedAStatus;
61using ndk::SpAIBinder;
Haofan Wange02b8092024-10-28 21:47:27 +000062
63#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
64#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
65
Haofan Wangb97b3f32024-10-31 15:33:17 -070066class MediaQualityCallback : public BnMediaQualityCallback {
Haofan Wange02b8092024-10-28 21:47:27 +000067 public:
Haofan Wangb97b3f32024-10-31 15:33:17 -070068 explicit MediaQualityCallback(
69 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
70 : on_hal_event_cb_(on_hal_event_cb) {}
71 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
72 on_hal_event_cb_(event);
73 return ScopedAStatus::ok();
Haofan Wange02b8092024-10-28 21:47:27 +000074 }
75
Haofan Wangb97b3f32024-10-31 15:33:17 -070076 private:
77 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
Haofan Wange02b8092024-10-28 21:47:27 +000078};
79
Haofan Wang58d25d22024-11-18 17:47:57 -080080class PictureProfileAdjustmentListener : public BnPictureProfileAdjustmentListener {
81 public:
82 explicit PictureProfileAdjustmentListener(
83 const std::function<void(const PictureProfile& pictureProfile)>&
84 on_hal_picture_profile_adjust)
85 : on_hal_picture_profile_adjust_(on_hal_picture_profile_adjust) {}
86 ScopedAStatus onPictureProfileAdjusted(const PictureProfile& pictureProfile) override {
87 on_hal_picture_profile_adjust_(pictureProfile);
88 return ScopedAStatus::ok();
89 }
90
Haofan Wang19796062024-12-02 12:15:20 -080091 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
92 return ScopedAStatus::ok();
93 }
94
95 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
96 const std::vector<VendorParamCapability>&) {
97 return ScopedAStatus::ok();
98 }
99
Haofan Wange7c0ba02024-12-17 10:47:20 -0800100 ScopedAStatus requestPictureParameters(int64_t) { return ScopedAStatus::ok(); }
Haofan Wangf8d660a2024-12-04 13:06:36 -0800101
Haofan Wang776b6c82024-12-18 12:03:11 -0800102 ScopedAStatus onStreamStatusChanged(int64_t, StreamStatus) { return ScopedAStatus::ok(); }
103
Haofan Wang58d25d22024-11-18 17:47:57 -0800104 private:
105 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
106};
107
108class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
109 public:
110 explicit SoundProfileAdjustmentListener(
111 const std::function<void(const SoundProfile& soundProfile)>&
112 on_hal_sound_profile_adjust)
113 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
114 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
115 on_hal_sound_profile_adjust_(soundProfile);
116 return ScopedAStatus::ok();
117 }
118
Haofan Wang19796062024-12-02 12:15:20 -0800119 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
120 return ScopedAStatus::ok();
121 }
122
123 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
124 const std::vector<VendorParamCapability>&) {
125 return ScopedAStatus::ok();
126 }
127
Haofan Wange7c0ba02024-12-17 10:47:20 -0800128 ScopedAStatus requestSoundParameters(int64_t) { return ScopedAStatus::ok(); }
Haofan Wangf8d660a2024-12-04 13:06:36 -0800129
Haofan Wang58d25d22024-11-18 17:47:57 -0800130 private:
131 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
132};
133
Haofan Wangb97b3f32024-10-31 15:33:17 -0700134class MediaQualityAidl : public testing::TestWithParam<std::string> {
135 public:
136 virtual void SetUp() override {
137 mediaquality = IMediaQuality::fromBinder(
138 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
139 ASSERT_NE(mediaquality, nullptr);
140 }
141 std::shared_ptr<IMediaQuality> mediaquality;
142};
143
144TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
145 std::promise<void> open_cb_promise;
146 std::future<void> open_cb_future{open_cb_promise.get_future()};
147 std::shared_ptr<MediaQualityCallback> callback =
148 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
149 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
150 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
151 open_cb_promise.set_value();
152 return ScopedAStatus::ok();
153 });
Haofan Wang86c3fad2024-12-16 10:11:41 -0800154 ASSERT_OK(mediaquality->setAmbientBacklightCallback(callback));
Haofan Wangb97b3f32024-10-31 15:33:17 -0700155 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
156 std::chrono::milliseconds timeout{10000};
157 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +0000158}
159
Haofan Wangb97b3f32024-10-31 15:33:17 -0700160TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +0000161 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -0700162 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
163}
164
165TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
166 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
167 [](auto /* event */) { return ScopedAStatus::ok(); });
Haofan Wang86c3fad2024-12-16 10:11:41 -0800168 ASSERT_OK(mediaquality->setAmbientBacklightCallback(callback));
Haofan Wangb97b3f32024-10-31 15:33:17 -0700169}
170
Haofan Wang58d25d22024-11-18 17:47:57 -0800171TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
172 std::shared_ptr<PictureProfileAdjustmentListener> listener =
173 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
174 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
175 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
176}
177
Haofan Wang778dcf22024-12-02 13:18:11 -0800178TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800179 PictureParameters pictureParameters;
180 std::vector<PictureParameter> picParams;
181
182 PictureParameter brightnessParam;
183 brightnessParam.set<PictureParameter::Tag::brightness>(0.5f);
184 picParams.push_back(brightnessParam);
185
186 PictureParameter contrastParam;
187 contrastParam.set<PictureParameter::Tag::contrast>(50);
188 picParams.push_back(contrastParam);
189
190 pictureParameters.pictureParameters = picParams;
191 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800192}
193
Haofan Wang58d25d22024-11-18 17:47:57 -0800194TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
195 std::shared_ptr<SoundProfileAdjustmentListener> listener =
196 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
197 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
198 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
199}
200
Haofan Wang778dcf22024-12-02 13:18:11 -0800201TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800202 SoundParameters soundParameters;
203 std::vector<SoundParameter> soundParams;
204
205 SoundParameter balanceParam;
206 balanceParam.set<SoundParameter::Tag::balance>(50);
207 soundParams.push_back(balanceParam);
208
209 SoundParameter bassParam;
210 bassParam.set<SoundParameter::Tag::bass>(50);
211 soundParams.push_back(bassParam);
212
213 soundParameters.soundParameters = soundParams;
214 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800215}
216
Haofan Wangb97b3f32024-10-31 15:33:17 -0700217TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
218 AmbientBacklightSettings in_settings = {
Haofan Wange7c0ba02024-12-17 10:47:20 -0800219 .uid = 1,
Haofan Wangb97b3f32024-10-31 15:33:17 -0700220 .source = AmbientBacklightSource::VIDEO,
221 .colorFormat = PixelFormat::RGB_888,
222 .hZonesNumber = 32,
223 .vZonesNumber = 20,
224 .hasLetterbox = true,
Haofan Wange7c0ba02024-12-17 10:47:20 -0800225 .colorThreshold = 0,
Haofan Wangb97b3f32024-10-31 15:33:17 -0700226 };
227 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000228}
229
Haofan Wangee9629f2024-11-22 13:34:17 -0800230TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
231 bool supported;
232 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
233}
234
235TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
236 bool enabled;
237 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
238}
239
240TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
241 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
242}
243
244TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
245 bool supported;
246 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
247}
248
249TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
250 bool enabled;
251 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
252}
253
254TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
255 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
256}
257
258TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
259 bool supported;
260 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
261}
262
263TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
264 bool enabled;
265 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
266}
267
268TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
269 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
270}
271
Haofan Wange02b8092024-10-28 21:47:27 +0000272GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
273
274INSTANTIATE_TEST_SUITE_P(
275 PerInstance, MediaQualityAidl,
276 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
277 android::PrintInstanceNameToString);
278
279int main(int argc, char** argv) {
280 ::testing::InitGoogleTest(&argc, argv);
281 ProcessState::self()->setThreadPoolMaxThreadCount(1);
282 ProcessState::self()->startThreadPool();
283 return RUN_ALL_TESTS();
284}