blob: c3e25a4f86bf2ff2d39e6a449931e812524ef6e3 [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 Wang58d25d22024-11-18 17:47:57 -080097 private:
98 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
99};
100
101class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
102 public:
103 explicit SoundProfileAdjustmentListener(
104 const std::function<void(const SoundProfile& soundProfile)>&
105 on_hal_sound_profile_adjust)
106 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
107 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
108 on_hal_sound_profile_adjust_(soundProfile);
109 return ScopedAStatus::ok();
110 }
111
Haofan Wang19796062024-12-02 12:15:20 -0800112 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
113 return ScopedAStatus::ok();
114 }
115
116 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
117 const std::vector<VendorParamCapability>&) {
118 return ScopedAStatus::ok();
119 }
120
Haofan Wang58d25d22024-11-18 17:47:57 -0800121 private:
122 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
123};
124
Haofan Wangb97b3f32024-10-31 15:33:17 -0700125class MediaQualityAidl : public testing::TestWithParam<std::string> {
126 public:
127 virtual void SetUp() override {
128 mediaquality = IMediaQuality::fromBinder(
129 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
130 ASSERT_NE(mediaquality, nullptr);
131 }
132 std::shared_ptr<IMediaQuality> mediaquality;
133};
134
135TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
136 std::promise<void> open_cb_promise;
137 std::future<void> open_cb_future{open_cb_promise.get_future()};
138 std::shared_ptr<MediaQualityCallback> callback =
139 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
140 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
141 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
142 open_cb_promise.set_value();
143 return ScopedAStatus::ok();
144 });
145 ASSERT_OK(mediaquality->setCallback(callback));
146 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
147 std::chrono::milliseconds timeout{10000};
148 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +0000149}
150
Haofan Wangb97b3f32024-10-31 15:33:17 -0700151TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +0000152 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -0700153 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
154}
155
156TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
157 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
158 [](auto /* event */) { return ScopedAStatus::ok(); });
159 ASSERT_OK(mediaquality->setCallback(callback));
160}
161
Haofan Wang58d25d22024-11-18 17:47:57 -0800162TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
163 std::shared_ptr<PictureProfileAdjustmentListener> listener =
164 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
165 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
166 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
167}
168
Haofan Wang778dcf22024-12-02 13:18:11 -0800169TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800170 PictureParameters pictureParameters;
171 std::vector<PictureParameter> picParams;
172
173 PictureParameter brightnessParam;
174 brightnessParam.set<PictureParameter::Tag::brightness>(0.5f);
175 picParams.push_back(brightnessParam);
176
177 PictureParameter contrastParam;
178 contrastParam.set<PictureParameter::Tag::contrast>(50);
179 picParams.push_back(contrastParam);
180
181 pictureParameters.pictureParameters = picParams;
182 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800183}
184
Haofan Wang58d25d22024-11-18 17:47:57 -0800185TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
186 std::shared_ptr<SoundProfileAdjustmentListener> listener =
187 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
188 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
189 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
190}
191
Haofan Wang778dcf22024-12-02 13:18:11 -0800192TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
Haofan Wangab1ebb22024-12-03 14:54:03 -0800193 SoundParameters soundParameters;
194 std::vector<SoundParameter> soundParams;
195
196 SoundParameter balanceParam;
197 balanceParam.set<SoundParameter::Tag::balance>(50);
198 soundParams.push_back(balanceParam);
199
200 SoundParameter bassParam;
201 bassParam.set<SoundParameter::Tag::bass>(50);
202 soundParams.push_back(bassParam);
203
204 soundParameters.soundParameters = soundParams;
205 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParameters));
Haofan Wang778dcf22024-12-02 13:18:11 -0800206}
207
Haofan Wangb97b3f32024-10-31 15:33:17 -0700208TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
209 AmbientBacklightSettings in_settings = {
210 .packageName = "com.android.mediaquality",
211 .source = AmbientBacklightSource::VIDEO,
212 .colorFormat = PixelFormat::RGB_888,
213 .hZonesNumber = 32,
214 .vZonesNumber = 20,
215 .hasLetterbox = true,
216 .threshold = 0,
217 };
218 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000219}
220
Haofan Wangee9629f2024-11-22 13:34:17 -0800221TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
222 bool supported;
223 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
224}
225
226TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
227 bool enabled;
228 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
229}
230
231TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
232 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
233}
234
235TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
236 bool supported;
237 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
238}
239
240TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
241 bool enabled;
242 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
243}
244
245TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
246 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
247}
248
249TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
250 bool supported;
251 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
252}
253
254TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
255 bool enabled;
256 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
257}
258
259TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
260 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
261}
262
Haofan Wange02b8092024-10-28 21:47:27 +0000263GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
264
265INSTANTIATE_TEST_SUITE_P(
266 PerInstance, MediaQualityAidl,
267 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
268 android::PrintInstanceNameToString);
269
270int main(int argc, char** argv) {
271 ::testing::InitGoogleTest(&argc, argv);
272 ProcessState::self()->setThreadPoolMaxThreadCount(1);
273 ProcessState::self()->startThreadPool();
274 return RUN_ALL_TESTS();
275}