// If the display hasn't been modeset yet, this will be NULL
DrmCrtc *crtc = drm_->GetCrtcForDisplay(display);
- int ret = composition_map_[(*iter)->display()]->Init(drm_, crtc, importer_,
- frame_no);
+ int ret = composition_map_[display]->Init(drm_, crtc, importer_, frame_no);
if (ret) {
- ALOGE("Failed to init display composition for %d", (*iter)->display());
+ ALOGE("Failed to init display composition for %d", display);
return ret;
}
}
DrmCompositionDisplayLayersMap &map = maps[display_index];
int display = map.display;
- ret = composition_map_[display]->SetLayers(
- map.layers.data(), map.layers.size(), &primary_planes_,
- &overlay_planes_);
+ if (!drm_->GetConnectorForDisplay(display)) {
+ ALOGE("Invalid display given to SetLayers %d", display);
+ continue;
+ }
+
+ ret = composition_map_[display]->SetLayers(map.layers.data(),
+ map.layers.size());
if (ret)
return ret;
}
- return DisableUnusedPlanes();
+ return 0;
}
int DrmComposition::SetDpmsMode(int display, uint32_t dpms_mode) {
return composition_map_[display]->SetDpmsMode(dpms_mode);
}
+int DrmComposition::SetDisplayMode(int display, const DrmMode &display_mode) {
+ return composition_map_[display]->SetDisplayMode(display_mode);
+}
+
std::unique_ptr<DrmDisplayComposition> DrmComposition::TakeDisplayComposition(
int display) {
return std::move(composition_map_[display]);
}
+int DrmComposition::Plan(std::map<int, DrmDisplayCompositor> &compositor_map) {
+ int ret = 0;
+ for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
+ iter != drm_->end_connectors(); ++iter) {
+ int display = (*iter)->display();
+ DrmDisplayComposition *comp = GetDisplayComposition(display);
+ ret = comp->Plan(compositor_map[display].squash_state(), &primary_planes_,
+ &overlay_planes_);
+ if (ret) {
+ ALOGE("Failed to plan composition for dislay %d", display);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
int DrmComposition::DisableUnusedPlanes() {
for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
iter != drm_->end_connectors(); ++iter) {
* TODO: re-visit this and potentially disable leftover planes after the
* active compositions have gobbled up all they can
*/
- if (comp->type() == DRM_COMPOSITION_TYPE_EMPTY)
+ if (comp->type() == DRM_COMPOSITION_TYPE_EMPTY ||
+ comp->type() == DRM_COMPOSITION_TYPE_MODESET)
continue;
DrmCrtc *crtc = drm_->GetCrtcForDisplay(display);