• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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