@@ -131,6 +131,8 @@ std::string HwcDisplay::Dump() {
131131HwcDisplay::HwcDisplay (hwc2_display_t handle, HWC2::DisplayType type,
132132 DrmHwc *hwc)
133133 : hwc_(hwc), handle_(handle), type_(type), client_layer_(this , false ) {
134+ hdr_metadata_ = std::make_shared<hdr_output_metadata>();
135+ ALOGI (" kanli create HwcDisplay" );
134136 if (type_ == HWC2::DisplayType::Virtual) {
135137 writeback_layer_ = std::make_unique<HwcLayer>(this , false );
136138 }
@@ -546,12 +548,19 @@ HWC2::Error HwcDisplay::GetActiveConfig(hwc2_config_t *config) const {
546548
547549HWC2::Error HwcDisplay::GetColorModes (uint32_t *num_modes, int32_t *modes) {
548550 ATRACE_CALL ();
551+ #if 1
549552 if (IsInHeadlessMode ()) {
550553 *num_modes = 1 ;
551554 if (modes)
552555 modes[0 ] = HAL_COLOR_MODE_NATIVE;
553556 return HWC2::Error::None;
554557 }
558+ #else
559+ *num_modes = 1;
560+ if (modes)
561+ modes[0] = HAL_COLOR_MODE_NATIVE;
562+ return HWC2::Error::None;
563+ #endif
555564
556565 if (!modes) {
557566 std::vector<Colormode> temp_modes;
@@ -561,16 +570,19 @@ HWC2::Error HwcDisplay::GetColorModes(uint32_t *num_modes, int32_t *modes) {
561570 }
562571
563572 std::vector<Colormode> temp_modes;
564- std::vector<int32_t > out_modes (modes, modes + *num_modes) ;
573+ std::vector<int32_t > out_modes;
565574 GetEdid ()->GetColorModes (temp_modes);
566575 if (temp_modes.empty ()) {
567576 out_modes.emplace_back (HAL_COLOR_MODE_NATIVE);
568- return HWC2::Error::None;
577+ } else {
578+ for (auto &c : temp_modes) {
579+ out_modes.emplace_back (static_cast <int32_t >(c));
580+ }
569581 }
570582
571- for (auto &c : temp_modes)
572- out_modes. emplace_back ( static_cast < int32_t >(c)) ;
573-
583+ for (size_t i = 0 ; i < out_modes. size (); ++i) {
584+ modes[i] = out_modes[i] ;
585+ }
574586 return HWC2::Error::None;
575587}
576588
@@ -703,22 +715,34 @@ HWC2::Error HwcDisplay::GetHdrCapabilities(uint32_t *num_types, int32_t *types,
703715 }
704716
705717 std::vector<ui::Hdr> temp_types;
706- std::vector<int32_t > out_types (types, types + *num_types) ;
718+ std::vector<int32_t > out_types;
707719 GetEdid ()->GetHdrCapabilities (temp_types, max_luminance,
708720 max_average_luminance, min_luminance);
721+
709722 for (auto &t : temp_types) {
710723 switch (t) {
724+ case ui::Hdr::DOLBY_VISION:
725+ out_types.emplace_back (HAL_HDR_DOLBY_VISION);
726+ break ;
711727 case ui::Hdr::HDR10:
712728 out_types.emplace_back (HAL_HDR_HDR10);
713729 break ;
714730 case ui::Hdr::HLG:
715731 out_types.emplace_back (HAL_HDR_HLG);
716732 break ;
733+ case ui::Hdr::HDR10_PLUS:
734+ out_types.emplace_back (HAL_HDR_HDR10_PLUS);
735+ break ;
717736 default :
718737 // Ignore any other HDR types
719738 break ;
720739 }
721740 }
741+
742+ for (size_t i = 0 ; i < out_types.size (); ++i) {
743+ types[i] = out_types[i];
744+ }
745+
722746 return HWC2::Error::None;
723747}
724748
@@ -912,7 +936,7 @@ HWC2::Error HwcDisplay::SetColorMode(int32_t mode) {
912936 */
913937 if (mode < HAL_COLOR_MODE_NATIVE || mode > HAL_COLOR_MODE_DISPLAY_BT2020)
914938 return HWC2::Error::BadParameter;
915-
939+ ALOGI ( " kanli SetColorMode %d " , mode);
916940 switch (mode) {
917941 case HAL_COLOR_MODE_NATIVE:
918942 hdr_metadata_.reset ();
@@ -1145,6 +1169,7 @@ HWC2::Error HwcDisplay::SetHdrOutputMetadata(ui::Hdr type) {
11451169 m->min_display_mastering_luminance = static_cast <uint64_t >(hdr_luminance[2 ] *
11461170 10000 .F );
11471171
1172+ #if 0
11481173 auto gamut = ColorGamut::BT2020();
11491174 auto primaries = gamut.getPrimaries();
11501175 m->display_primaries[0].x = ToU16ColorValue(primaries[0].x);
@@ -1157,6 +1182,25 @@ HWC2::Error HwcDisplay::SetHdrOutputMetadata(ui::Hdr type) {
11571182 auto whitePoint = gamut.getWhitePoint();
11581183 m->white_point.x = ToU16ColorValue(whitePoint.x);
11591184 m->white_point.y = ToU16ColorValue(whitePoint.y);
1185+ #else
1186+ auto gamut = ColorGamut::BT2020 ();
1187+ auto primaries = gamut.getPrimaries ();
1188+ auto whitePoint = gamut.getWhitePoint ();
1189+
1190+ GetEdid ()->GetColorGamut (primaries, whitePoint);
1191+
1192+ m->display_primaries [0 ].x = ToU16ColorValue (primaries[0 ].x );
1193+ m->display_primaries [0 ].y = ToU16ColorValue (primaries[0 ].y );
1194+ m->display_primaries [1 ].x = ToU16ColorValue (primaries[1 ].x );
1195+ m->display_primaries [1 ].y = ToU16ColorValue (primaries[1 ].y );
1196+ m->display_primaries [2 ].x = ToU16ColorValue (primaries[2 ].x );
1197+ m->display_primaries [2 ].y = ToU16ColorValue (primaries[2 ].y );
1198+
1199+ m->white_point .x = ToU16ColorValue (whitePoint.x );
1200+ m->white_point .y = ToU16ColorValue (whitePoint.y );
1201+
1202+ #endif
1203+
11601204
11611205 return HWC2::Error::None;
11621206}
0 commit comments