1 /*
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 */
16 #define LOG_TAG "ambient_backlight_aidl_hal_test"
17
18 #include <aidl/Gtest.h>
19 #include <aidl/Vintf.h>
20 #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>
23 #include <aidl/android/hardware/tv/mediaquality/BnPictureProfileAdjustmentListener.h>
24 #include <aidl/android/hardware/tv/mediaquality/BnSoundProfileAdjustmentListener.h>
25 #include <aidl/android/hardware/tv/mediaquality/IMediaQuality.h>
26 #include <aidl/android/hardware/tv/mediaquality/PictureParameter.h>
27 #include <aidl/android/hardware/tv/mediaquality/PictureParameters.h>
28 #include <aidl/android/hardware/tv/mediaquality/PictureProfile.h>
29 #include <aidl/android/hardware/tv/mediaquality/SoundParameter.h>
30 #include <aidl/android/hardware/tv/mediaquality/SoundParameters.h>
31 #include <aidl/android/hardware/tv/mediaquality/SoundProfile.h>
32 #include <aidl/android/hardware/tv/mediaquality/StreamStatus.h>
33
34 #include <android/binder_auto_utils.h>
35 #include <android/binder_manager.h>
36 #include <binder/IServiceManager.h>
37 #include <binder/ProcessState.h>
38 #include <log/log.h>
39 #include <future>
40
41 using aidl::android::hardware::graphics::common::PixelFormat;
42 using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
43 using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
44 using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
45 using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
46 using aidl::android::hardware::tv::mediaquality::BnPictureProfileAdjustmentListener;
47 using aidl::android::hardware::tv::mediaquality::BnSoundProfileAdjustmentListener;
48 using aidl::android::hardware::tv::mediaquality::IMediaQuality;
49 using aidl::android::hardware::tv::mediaquality::ParamCapability;
50 using aidl::android::hardware::tv::mediaquality::PictureParameter;
51 using aidl::android::hardware::tv::mediaquality::PictureParameters;
52 using aidl::android::hardware::tv::mediaquality::PictureProfile;
53 using aidl::android::hardware::tv::mediaquality::SoundParameter;
54 using aidl::android::hardware::tv::mediaquality::SoundParameters;
55 using aidl::android::hardware::tv::mediaquality::SoundProfile;
56 using aidl::android::hardware::tv::mediaquality::StreamStatus;
57 using aidl::android::hardware::tv::mediaquality::VendorParamCapability;
58 using aidl::android::hardware::tv::mediaquality::VendorParameterIdentifier;
59 using android::ProcessState;
60 using android::String16;
61 using ndk::ScopedAStatus;
62 using ndk::SpAIBinder;
63
64 #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
65 #define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
66
validateParameterRange0To100(int value)67 void validateParameterRange0To100(int value) {
68 EXPECT_GE(value, 0);
69 EXPECT_LE(value, 100);
70 }
71
validateParameterRange0To2047(int value)72 void validateParameterRange0To2047(int value) {
73 EXPECT_GE(value, 0);
74 EXPECT_LE(value, 2047);
75 }
76
validateColorTemperature(int value)77 void validateColorTemperature(int value) {
78 EXPECT_GE(value, -100);
79 EXPECT_LE(value, 100);
80 }
81
validatePictureParameter(const PictureParameter & param)82 void validatePictureParameter(const PictureParameter& param) {
83 switch (param.getTag()) {
84 case PictureParameter::Tag::brightness: {
85 ALOGD("[validatePictureParameter] validate brightness value");
86 float value = param.get<PictureParameter::Tag::brightness>();
87 EXPECT_TRUE(value >= 0.0f && value <= 1.0f);
88 break;
89 }
90 case PictureParameter::Tag::contrast: {
91 ALOGD("[validatePictureParameter] validate contrast value");
92 int value = param.get<PictureParameter::Tag::contrast>();
93 validateParameterRange0To100(value);
94 break;
95 }
96 case PictureParameter::Tag::sharpness: {
97 ALOGD("[validatePictureParameter] validate sharpness value");
98 int value = param.get<PictureParameter::Tag::sharpness>();
99 validateParameterRange0To100(value);
100 break;
101 }
102 case PictureParameter::Tag::saturation: {
103 ALOGD("[validatePictureParameter] validate saturation value");
104 int value = param.get<PictureParameter::Tag::saturation>();
105 validateParameterRange0To100(value);
106 break;
107 }
108 case PictureParameter::Tag::hue: {
109 ALOGD("[validatePictureParameter] validate hue value");
110 int value = param.get<PictureParameter::Tag::hue>();
111 EXPECT_GE(value, -50);
112 EXPECT_LE(value, 50);
113 break;
114 }
115 case PictureParameter::Tag::colorTunerBrightness: {
116 ALOGD("[validatePictureParameter] validate colorTunerBrightness value");
117 int value = param.get<PictureParameter::Tag::colorTunerBrightness>();
118 validateParameterRange0To100(value);
119 break;
120 }
121 case PictureParameter::Tag::colorTunerSaturation: {
122 ALOGD("[validatePictureParameter] validate colorTunerSaturation value");
123 int value = param.get<PictureParameter::Tag::colorTunerSaturation>();
124 validateParameterRange0To100(value);
125 break;
126 }
127 case PictureParameter::Tag::colorTunerHue: {
128 ALOGD("[validatePictureParameter] validate colorTunerHue value");
129 int value = param.get<PictureParameter::Tag::colorTunerHue>();
130 EXPECT_GE(value, -50);
131 EXPECT_LE(value, 50);
132 break;
133 }
134 case PictureParameter::Tag::colorTunerRedOffset: {
135 ALOGD("[validatePictureParameter] validate colorTunerRedOffset value");
136 int value = param.get<PictureParameter::Tag::colorTunerRedOffset>();
137 validateParameterRange0To100(value);
138 break;
139 }
140 case PictureParameter::Tag::colorTunerGreenOffset: {
141 ALOGD("[validatePictureParameter] validate colorTunerGreenOffset value");
142 int value = param.get<PictureParameter::Tag::colorTunerGreenOffset>();
143 validateParameterRange0To100(value);
144 break;
145 }
146 case PictureParameter::Tag::colorTunerBlueOffset: {
147 ALOGD("[validatePictureParameter] validate colorTunerBlueOffset value");
148 int value = param.get<PictureParameter::Tag::colorTunerBlueOffset>();
149 validateParameterRange0To100(value);
150 break;
151 }
152 case PictureParameter::Tag::colorTunerRedGain: {
153 ALOGD("[validatePictureParameter] validate colorTunerRedGain value");
154 int value = param.get<PictureParameter::Tag::colorTunerRedGain>();
155 validateParameterRange0To100(value);
156 break;
157 }
158 case PictureParameter::Tag::colorTunerGreenGain: {
159 ALOGD("[validatePictureParameter] validate colorTunerGreenGain value");
160 int value = param.get<PictureParameter::Tag::colorTunerGreenGain>();
161 validateParameterRange0To100(value);
162 break;
163 }
164 case PictureParameter::Tag::colorTunerBlueGain: {
165 ALOGD("[validatePictureParameter] validate colorTunerBlueGain value");
166 int value = param.get<PictureParameter::Tag::colorTunerBlueGain>();
167 validateParameterRange0To100(value);
168 break;
169 }
170 case PictureParameter::Tag::panelInitMaxLuminceNits: {
171 ALOGD("[validatePictureParameter] validate panelInitMaxLuminceNits value");
172 int value = param.get<PictureParameter::Tag::panelInitMaxLuminceNits>();
173 EXPECT_GE(value, 0);
174 EXPECT_LE(value, 10000);
175 break;
176 }
177 case PictureParameter::Tag::colorTemperatureRedGain: {
178 ALOGD("[validatePictureParameter] validate colorTemperatureRedGain value");
179 int value = param.get<PictureParameter::Tag::colorTemperatureRedGain>();
180 validateColorTemperature(value);
181 break;
182 }
183 case PictureParameter::Tag::colorTemperatureGreenGain: {
184 ALOGD("[validatePictureParameter] validate colorTemperatureGreenGain value");
185 int value = param.get<PictureParameter::Tag::colorTemperatureGreenGain>();
186 validateColorTemperature(value);
187 break;
188 }
189 case PictureParameter::Tag::colorTemperatureBlueGain: {
190 ALOGD("[validatePictureParameter] validate colorTemperatureBlueGain value");
191 int value = param.get<PictureParameter::Tag::colorTemperatureBlueGain>();
192 validateColorTemperature(value);
193 break;
194 }
195 case PictureParameter::Tag::colorTemperatureRedOffset: {
196 ALOGD("[validatePictureParameter] validate ccolorTemperatureRedOffset value");
197 int value = param.get<PictureParameter::Tag::colorTemperatureRedOffset>();
198 validateColorTemperature(value);
199 break;
200 }
201 case PictureParameter::Tag::colorTemperatureGreenOffset: {
202 ALOGD("[validatePictureParameter] validate colorTemperatureGreenOffset value");
203 int value = param.get<PictureParameter::Tag::colorTemperatureGreenOffset>();
204 validateColorTemperature(value);
205 break;
206 }
207 case PictureParameter::Tag::colorTemperatureBlueOffset: {
208 ALOGD("[validatePictureParameter] validate colorTemperatureBlueOffset value");
209 int value = param.get<PictureParameter::Tag::colorTemperatureBlueOffset>();
210 validateColorTemperature(value);
211 break;
212 }
213 case PictureParameter::Tag::elevenPointRed: {
214 ALOGD("[validatePictureParameter] validate elevenPointRed value");
215 std::array<int, 11> elevenPointValues =
216 param.get<PictureParameter::Tag::elevenPointRed>();
217 for (int value : elevenPointValues) {
218 validateParameterRange0To100(value);
219 }
220 break;
221 }
222 case PictureParameter::Tag::elevenPointGreen: {
223 ALOGD("[validatePictureParameter] validate elevenPointGreen value");
224 std::array<int, 11> elevenPointValues =
225 param.get<PictureParameter::Tag::elevenPointGreen>();
226 for (int value : elevenPointValues) {
227 validateParameterRange0To100(value);
228 }
229 break;
230 }
231 case PictureParameter::Tag::elevenPointBlue: {
232 ALOGD("[validatePictureParameter] validate elevenPointBlue value");
233 std::array<int, 11> elevenPointValues =
234 param.get<PictureParameter::Tag::elevenPointBlue>();
235 for (int value : elevenPointValues) {
236 validateParameterRange0To100(value);
237 }
238 break;
239 }
240 case PictureParameter::Tag::osdRedGain: {
241 ALOGD("[validatePictureParameter] validate osdRedGain value");
242 int value = param.get<PictureParameter::Tag::osdRedGain>();
243 validateParameterRange0To2047(value);
244 break;
245 }
246 case PictureParameter::Tag::osdGreenGain: {
247 ALOGD("[validatePictureParameter] validate osdGreenGain value");
248 int value = param.get<PictureParameter::Tag::osdGreenGain>();
249 validateParameterRange0To2047(value);
250 break;
251 }
252 case PictureParameter::Tag::osdBlueGain: {
253 ALOGD("[validatePictureParameter] validate osdBlueGain value");
254 int value = param.get<PictureParameter::Tag::osdBlueGain>();
255 validateParameterRange0To2047(value);
256 break;
257 }
258 case PictureParameter::Tag::osdRedOffset: {
259 ALOGD("[validatePictureParameter] validate osdRedOffset value");
260 int value = param.get<PictureParameter::Tag::osdRedOffset>();
261 validateParameterRange0To2047(value);
262 break;
263 }
264 case PictureParameter::Tag::osdGreenOffset: {
265 ALOGD("[validatePictureParameter] validate osdGreenOffset value");
266 int value = param.get<PictureParameter::Tag::osdGreenOffset>();
267 validateParameterRange0To2047(value);
268 break;
269 }
270 case PictureParameter::Tag::osdBlueOffset: {
271 ALOGD("[validatePictureParameter] validate osdBlueOffset value");
272 int value = param.get<PictureParameter::Tag::osdBlueOffset>();
273 validateParameterRange0To2047(value);
274 break;
275 }
276 case PictureParameter::Tag::osdHue: {
277 ALOGD("[validatePictureParameter] validate osdHue value");
278 int value = param.get<PictureParameter::Tag::osdHue>();
279 validateParameterRange0To100(value);
280 break;
281 }
282 case PictureParameter::Tag::osdSaturation: {
283 ALOGD("[validatePictureParameter] validate osdSaturation value");
284 int value = param.get<PictureParameter::Tag::osdSaturation>();
285 EXPECT_GE(value, 0);
286 EXPECT_LE(value, 255);
287 break;
288 }
289 case PictureParameter::Tag::osdContrast: {
290 ALOGD("[validatePictureParameter] validate osdContrast value");
291 int value = param.get<PictureParameter::Tag::osdContrast>();
292 validateParameterRange0To2047(value);
293 break;
294 }
295 case PictureParameter::Tag::colorTunerHueRed: {
296 ALOGD("[validatePictureParameter] validate colorTunerHueRed value");
297 int value = param.get<PictureParameter::Tag::colorTunerHueRed>();
298 validateParameterRange0To100(value);
299 break;
300 }
301 case PictureParameter::Tag::colorTunerHueGreen: {
302 ALOGD("[validatePictureParameter] validate colorTunerHueGreen value");
303 int value = param.get<PictureParameter::Tag::colorTunerHueGreen>();
304 validateParameterRange0To100(value);
305 break;
306 }
307 case PictureParameter::Tag::colorTunerHueBlue: {
308 ALOGD("[validatePictureParameter] validate colorTunerHueBlue value");
309 int value = param.get<PictureParameter::Tag::colorTunerHueBlue>();
310 validateParameterRange0To100(value);
311 break;
312 }
313 case PictureParameter::Tag::colorTunerHueCyan: {
314 ALOGD("[validatePictureParameter] validate colorTunerHueCyan value");
315 int value = param.get<PictureParameter::Tag::colorTunerHueCyan>();
316 validateParameterRange0To100(value);
317 break;
318 }
319 case PictureParameter::Tag::colorTunerHueMagenta: {
320 ALOGD("[validatePictureParameter] validate colorTunerHueMagenta value");
321 int value = param.get<PictureParameter::Tag::colorTunerHueMagenta>();
322 validateParameterRange0To100(value);
323 break;
324 }
325 case PictureParameter::Tag::colorTunerHueYellow: {
326 ALOGD("[validatePictureParameter] validate colorTunerHueYellow value");
327 int value = param.get<PictureParameter::Tag::colorTunerHueYellow>();
328 validateParameterRange0To100(value);
329 break;
330 }
331 case PictureParameter::Tag::colorTunerHueFlesh: {
332 ALOGD("[validatePictureParameter] validate colorTunerHueFlesh value");
333 int value = param.get<PictureParameter::Tag::colorTunerHueFlesh>();
334 validateParameterRange0To100(value);
335 break;
336 }
337 case PictureParameter::Tag::colorTunerSaturationRed: {
338 ALOGD("[validatePictureParameter] validate colorTunerSaturationRed value");
339 int value = param.get<PictureParameter::Tag::colorTunerSaturationRed>();
340 validateParameterRange0To100(value);
341 break;
342 }
343 case PictureParameter::Tag::colorTunerSaturationGreen: {
344 ALOGD("[validatePictureParameter] validate colorTunerSaturationGreen value");
345 int value = param.get<PictureParameter::Tag::colorTunerSaturationGreen>();
346 validateParameterRange0To100(value);
347 break;
348 }
349 case PictureParameter::Tag::colorTunerSaturationBlue: {
350 ALOGD("[validatePictureParameter] validate colorTunerSaturationBlue value");
351 int value = param.get<PictureParameter::Tag::colorTunerSaturationBlue>();
352 validateParameterRange0To100(value);
353 break;
354 }
355 case PictureParameter::Tag::colorTunerSaturationCyan: {
356 ALOGD("[validatePictureParameter] validate colorTunerSaturationCyan value");
357 int value = param.get<PictureParameter::Tag::colorTunerSaturationCyan>();
358 validateParameterRange0To100(value);
359 break;
360 }
361 case PictureParameter::Tag::colorTunerSaturationMagenta: {
362 ALOGD("[validatePictureParameter] validate colorTunerSaturationMagenta value");
363 int value = param.get<PictureParameter::Tag::colorTunerSaturationMagenta>();
364 validateParameterRange0To100(value);
365 break;
366 }
367 case PictureParameter::Tag::colorTunerSaturationYellow: {
368 ALOGD("[validatePictureParameter] validate colorTunerSaturationYellow value");
369 int value = param.get<PictureParameter::Tag::colorTunerSaturationYellow>();
370 validateParameterRange0To100(value);
371 break;
372 }
373 case PictureParameter::Tag::colorTunerSaturationFlesh: {
374 ALOGD("[validatePictureParameter] validate colorTunerSaturationFlesh value");
375 int value = param.get<PictureParameter::Tag::colorTunerSaturationFlesh>();
376 validateParameterRange0To100(value);
377 break;
378 }
379 case PictureParameter::Tag::colorTunerLuminanceRed: {
380 ALOGD("[validatePictureParameter] validate colorTunerLuminanceRed value");
381 int value = param.get<PictureParameter::Tag::colorTunerLuminanceRed>();
382 validateParameterRange0To100(value);
383 break;
384 }
385 case PictureParameter::Tag::colorTunerLuminanceGreen: {
386 ALOGD("[validatePictureParameter] validate colorTunerLuminanceGreen value");
387 int value = param.get<PictureParameter::Tag::colorTunerLuminanceGreen>();
388 validateParameterRange0To100(value);
389 break;
390 }
391 case PictureParameter::Tag::colorTunerLuminanceBlue: {
392 ALOGD("[validatePictureParameter] validate colorTunerLuminanceBlue value");
393 int value = param.get<PictureParameter::Tag::colorTunerLuminanceBlue>();
394 validateParameterRange0To100(value);
395 break;
396 }
397 case PictureParameter::Tag::colorTunerLuminanceCyan: {
398 ALOGD("[validatePictureParameter] validate colorTunerLuminanceCyan value");
399 int value = param.get<PictureParameter::Tag::colorTunerLuminanceCyan>();
400 validateParameterRange0To100(value);
401 break;
402 }
403 case PictureParameter::Tag::colorTunerLuminanceMagenta: {
404 ALOGD("[validatePictureParameter] validate colorTunerLuminanceMagenta value");
405 int value = param.get<PictureParameter::Tag::colorTunerLuminanceMagenta>();
406 validateParameterRange0To100(value);
407 break;
408 }
409 case PictureParameter::Tag::colorTunerLuminanceYellow: {
410 ALOGD("[validatePictureParameter] validate colorTunerLuminanceYellow value");
411 int value = param.get<PictureParameter::Tag::colorTunerLuminanceYellow>();
412 validateParameterRange0To100(value);
413 break;
414 }
415 case PictureParameter::Tag::colorTunerLuminanceFlesh: {
416 ALOGD("[validatePictureParameter] validate colorTunerLuminanceFlesh value");
417 int value = param.get<PictureParameter::Tag::colorTunerLuminanceFlesh>();
418 validateParameterRange0To100(value);
419 break;
420 }
421 default:
422 ALOGD("Those parameters don't need to check.");
423 break;
424 }
425 }
426
validateSoundParameter(const SoundParameter & param)427 void validateSoundParameter(const SoundParameter& param) {
428 switch (param.getTag()) {
429 case SoundParameter::Tag::balance: {
430 ALOGD("[validateSoundParameter] validate balance value");
431 int value = param.get<SoundParameter::Tag::balance>();
432 EXPECT_GE(value, -50);
433 EXPECT_LE(value, 50);
434 break;
435 }
436 case SoundParameter::Tag::bass: {
437 ALOGD("[validateSoundParameter] validate bass value");
438 int value = param.get<SoundParameter::Tag::bass>();
439 validateParameterRange0To100(value);
440 break;
441 }
442 case SoundParameter::Tag::treble: {
443 ALOGD("[validateSoundParameter] validate treble value");
444 int value = param.get<SoundParameter::Tag::treble>();
445 validateParameterRange0To100(value);
446 break;
447 }
448 case SoundParameter::Tag::speakersDelayMs: {
449 ALOGD("[validateSoundParameter] validate speakersDelayMs value");
450 int value = param.get<SoundParameter::Tag::speakersDelayMs>();
451 EXPECT_GE(value, 0);
452 EXPECT_LE(value, 250);
453 break;
454 }
455 case SoundParameter::Tag::digitalOutputDelayMs: {
456 ALOGD("[validateSoundParameter] validate digitalOutputDelayMs value");
457 int value = param.get<SoundParameter::Tag::digitalOutputDelayMs>();
458 EXPECT_GE(value, 0);
459 EXPECT_LE(value, 250);
460 break;
461 }
462 default:
463 ALOGD("Those parameters don't need to check.");
464 break;
465 }
466 }
467
468 class MediaQualityCallback : public BnMediaQualityCallback {
469 public:
MediaQualityCallback(const std::function<void (const AmbientBacklightEvent & event)> & on_hal_event_cb)470 explicit MediaQualityCallback(
471 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
472 : on_hal_event_cb_(on_hal_event_cb) {}
notifyAmbientBacklightEvent(const AmbientBacklightEvent & event)473 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
474 on_hal_event_cb_(event);
475 return ScopedAStatus::ok();
476 }
477
478 private:
479 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
480 };
481
482 class PictureProfileAdjustmentListener : public BnPictureProfileAdjustmentListener {
483 public:
PictureProfileAdjustmentListener(const std::function<void (const PictureProfile & pictureProfile)> & on_hal_picture_profile_adjust)484 explicit PictureProfileAdjustmentListener(
485 const std::function<void(const PictureProfile& pictureProfile)>&
486 on_hal_picture_profile_adjust)
487 : on_hal_picture_profile_adjust_(on_hal_picture_profile_adjust) {}
488
onPictureProfileAdjusted(const PictureProfile & pictureProfile)489 ScopedAStatus onPictureProfileAdjusted(const PictureProfile& pictureProfile) override {
490 for (const auto& param : pictureProfile.parameters.pictureParameters) {
491 validatePictureParameter(param);
492 }
493 on_hal_picture_profile_adjust_(pictureProfile);
494 return ScopedAStatus::ok();
495 }
496
onParamCapabilityChanged(int64_t,const std::vector<ParamCapability> &)497 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
498 return ScopedAStatus::ok();
499 }
500
onVendorParamCapabilityChanged(int64_t,const std::vector<VendorParamCapability> &)501 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
502 const std::vector<VendorParamCapability>&) {
503 return ScopedAStatus::ok();
504 }
505
requestPictureParameters(int64_t)506 ScopedAStatus requestPictureParameters(int64_t) { return ScopedAStatus::ok(); }
507
onStreamStatusChanged(int64_t,StreamStatus)508 ScopedAStatus onStreamStatusChanged(int64_t, StreamStatus) { return ScopedAStatus::ok(); }
509
510 private:
511 std::function<void(const PictureProfile& pictureProfile)> on_hal_picture_profile_adjust_;
512 };
513
514 class SoundProfileAdjustmentListener : public BnSoundProfileAdjustmentListener {
515 public:
SoundProfileAdjustmentListener(const std::function<void (const SoundProfile & soundProfile)> & on_hal_sound_profile_adjust)516 explicit SoundProfileAdjustmentListener(
517 const std::function<void(const SoundProfile& soundProfile)>&
518 on_hal_sound_profile_adjust)
519 : on_hal_sound_profile_adjust_(on_hal_sound_profile_adjust) {}
520
onSoundProfileAdjusted(const SoundProfile & soundProfile)521 ScopedAStatus onSoundProfileAdjusted(const SoundProfile& soundProfile) override {
522 for (const auto& param : soundProfile.parameters.soundParameters) {
523 validateSoundParameter(param);
524 }
525 on_hal_sound_profile_adjust_(soundProfile);
526 return ScopedAStatus::ok();
527 }
528
onParamCapabilityChanged(int64_t,const std::vector<ParamCapability> &)529 ScopedAStatus onParamCapabilityChanged(int64_t, const std::vector<ParamCapability>&) override {
530 return ScopedAStatus::ok();
531 }
532
onVendorParamCapabilityChanged(int64_t,const std::vector<VendorParamCapability> &)533 ScopedAStatus onVendorParamCapabilityChanged(int64_t,
534 const std::vector<VendorParamCapability>&) {
535 return ScopedAStatus::ok();
536 }
537
requestSoundParameters(int64_t)538 ScopedAStatus requestSoundParameters(int64_t) { return ScopedAStatus::ok(); }
539
540 private:
541 std::function<void(const SoundProfile& soundProfile)> on_hal_sound_profile_adjust_;
542 };
543
544 class MediaQualityAidl : public testing::TestWithParam<std::string> {
545 public:
SetUp()546 virtual void SetUp() override {
547 mediaquality = IMediaQuality::fromBinder(
548 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
549 ASSERT_NE(mediaquality, nullptr);
550 }
551 std::shared_ptr<IMediaQuality> mediaquality;
552 };
553
TEST_P(MediaQualityAidl,TestSetAmbientBacklightDetectionEnabled)554 TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
555 std::promise<void> open_cb_promise;
556 std::future<void> open_cb_future{open_cb_promise.get_future()};
557 std::shared_ptr<MediaQualityCallback> callback =
558 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
559 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
560 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
561 open_cb_promise.set_value();
562 return ScopedAStatus::ok();
563 });
564 ASSERT_OK(mediaquality->setAmbientBacklightCallback(callback));
565 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
566 std::chrono::milliseconds timeout{10000};
567 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
568 }
569
TEST_P(MediaQualityAidl,TestGetAmbientBacklightDetectionEnabled)570 TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
571 bool enabled;
572 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
573 }
574
TEST_P(MediaQualityAidl,TestSetMediaQualityCallback)575 TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
576 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
577 [](auto /* event */) { return ScopedAStatus::ok(); });
578 ASSERT_OK(mediaquality->setAmbientBacklightCallback(callback));
579 }
580
TEST_P(MediaQualityAidl,TestGetPictureProfileChangedListener)581 TEST_P(MediaQualityAidl, TestGetPictureProfileChangedListener) {
582 std::shared_ptr<::aidl::android::hardware::tv::mediaquality::IPictureProfileChangedListener>
583 aidlListener;
584 mediaquality->getPictureProfileListener(&aidlListener);
585 }
586
TEST_P(MediaQualityAidl,TestGetSoundProfileChangedListener)587 TEST_P(MediaQualityAidl, TestGetSoundProfileChangedListener) {
588 std::shared_ptr<::aidl::android::hardware::tv::mediaquality::ISoundProfileChangedListener>
589 aidlListener;
590 mediaquality->getSoundProfileListener(&aidlListener);
591 }
592
TEST_P(MediaQualityAidl,TestSetPictureProfileAdjustmentListener)593 TEST_P(MediaQualityAidl, TestSetPictureProfileAdjustmentListener) {
594 std::shared_ptr<PictureProfileAdjustmentListener> listener =
595 ndk::SharedRefBase::make<PictureProfileAdjustmentListener>(
596 [](auto /*picture profile*/) { return ScopedAStatus::ok(); });
597 ASSERT_OK(mediaquality->setPictureProfileAdjustmentListener(listener));
598 }
599
TEST_P(MediaQualityAidl,TestSendDefaultPictureParameters)600 TEST_P(MediaQualityAidl, TestSendDefaultPictureParameters) {
601 PictureParameters pictureParameters;
602 std::vector<PictureParameter> picParams;
603
604 PictureParameter brightnessParam;
605 brightnessParam.set<PictureParameter::Tag::brightness>(0.5f);
606 picParams.push_back(brightnessParam);
607
608 PictureParameter contrastParam;
609 contrastParam.set<PictureParameter::Tag::contrast>(50);
610 picParams.push_back(contrastParam);
611
612 pictureParameters.pictureParameters = picParams;
613 ASSERT_OK(mediaquality->sendDefaultPictureParameters(pictureParameters));
614 }
615
TEST_P(MediaQualityAidl,TestSetSoundProfileAdjustmentListener)616 TEST_P(MediaQualityAidl, TestSetSoundProfileAdjustmentListener) {
617 std::shared_ptr<SoundProfileAdjustmentListener> listener =
618 ndk::SharedRefBase::make<SoundProfileAdjustmentListener>(
619 [](auto /*sound profile*/) { return ScopedAStatus::ok(); });
620 ASSERT_OK(mediaquality->setSoundProfileAdjustmentListener(listener));
621 }
622
TEST_P(MediaQualityAidl,TestSendDefaultSoundParameters)623 TEST_P(MediaQualityAidl, TestSendDefaultSoundParameters) {
624 SoundParameters soundParameters;
625 std::vector<SoundParameter> soundParams;
626
627 SoundParameter balanceParam;
628 balanceParam.set<SoundParameter::Tag::balance>(50);
629 soundParams.push_back(balanceParam);
630
631 SoundParameter bassParam;
632 bassParam.set<SoundParameter::Tag::bass>(50);
633 soundParams.push_back(bassParam);
634
635 soundParameters.soundParameters = soundParams;
636 ASSERT_OK(mediaquality->sendDefaultSoundParameters(soundParameters));
637 }
638
TEST_P(MediaQualityAidl,TestSetAmbientBacklightDetector)639 TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
640 AmbientBacklightSettings in_settings = {
641 .uid = 1,
642 .source = AmbientBacklightSource::VIDEO,
643 .colorFormat = PixelFormat::RGB_888,
644 .hZonesNumber = 32,
645 .vZonesNumber = 20,
646 .hasLetterbox = true,
647 .colorThreshold = 0,
648 };
649 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
650 }
651
TEST_P(MediaQualityAidl,TestIsAutoPqSupported)652 TEST_P(MediaQualityAidl, TestIsAutoPqSupported) {
653 bool supported;
654 ASSERT_OK(mediaquality->isAutoPqSupported(&supported));
655 }
656
TEST_P(MediaQualityAidl,TestGetAutoPqEnabled)657 TEST_P(MediaQualityAidl, TestGetAutoPqEnabled) {
658 bool enabled;
659 ASSERT_OK(mediaquality->getAutoPqEnabled(&enabled));
660 }
661
TEST_P(MediaQualityAidl,TestSetAutoPqEnabled)662 TEST_P(MediaQualityAidl, TestSetAutoPqEnabled) {
663 ASSERT_OK(mediaquality->setAutoPqEnabled(true));
664 }
665
TEST_P(MediaQualityAidl,TestIsAutoSrSupported)666 TEST_P(MediaQualityAidl, TestIsAutoSrSupported) {
667 bool supported;
668 ASSERT_OK(mediaquality->isAutoSrSupported(&supported));
669 }
670
TEST_P(MediaQualityAidl,TestGetAutoSrEnabled)671 TEST_P(MediaQualityAidl, TestGetAutoSrEnabled) {
672 bool enabled;
673 ASSERT_OK(mediaquality->getAutoSrEnabled(&enabled));
674 }
675
TEST_P(MediaQualityAidl,TestSetAutoSrEnabled)676 TEST_P(MediaQualityAidl, TestSetAutoSrEnabled) {
677 ASSERT_OK(mediaquality->setAutoSrEnabled(true));
678 }
679
TEST_P(MediaQualityAidl,TestIsAutoAqSupported)680 TEST_P(MediaQualityAidl, TestIsAutoAqSupported) {
681 bool supported;
682 ASSERT_OK(mediaquality->isAutoAqSupported(&supported));
683 }
684
TEST_P(MediaQualityAidl,TestGetAutoAqEnabled)685 TEST_P(MediaQualityAidl, TestGetAutoAqEnabled) {
686 bool enabled;
687 ASSERT_OK(mediaquality->getAutoAqEnabled(&enabled));
688 }
689
TEST_P(MediaQualityAidl,TestSetAutoAqEnabled)690 TEST_P(MediaQualityAidl, TestSetAutoAqEnabled) {
691 ASSERT_OK(mediaquality->setAutoAqEnabled(true));
692 }
693
694 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
695
696 INSTANTIATE_TEST_SUITE_P(
697 PerInstance, MediaQualityAidl,
698 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
699 android::PrintInstanceNameToString);
700
main(int argc,char ** argv)701 int main(int argc, char** argv) {
702 ::testing::InitGoogleTest(&argc, argv);
703 ProcessState::self()->setThreadPoolMaxThreadCount(1);
704 ProcessState::self()->startThreadPool();
705 return RUN_ALL_TESTS();
706 }
707