if (!i.plane())
continue;
- // make sure that source layers are ordered based on zorder
- std::sort(i.source_layers().begin(), i.source_layers().end());
-
std::vector<DrmPlane *> *container = nullptr;
if (i.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
container = primary_planes;
class Importer;
class Planner;
+constexpr size_t kUndefinedSourceLayer = UINT16_MAX;
+
class DrmCompositionPlane {
public:
DrmCompositionPlane() = default;
DrmCompositionPlane(DrmCompositionPlane &&rhs) = default;
DrmCompositionPlane &operator=(DrmCompositionPlane &&other) = default;
- DrmCompositionPlane(DrmPlane *plane) : plane_(plane) {
- }
DrmCompositionPlane(DrmPlane *plane, size_t source_layer)
- : plane_(plane), source_layers_(1, source_layer) {
+ : plane_(plane), source_layer_(source_layer) {
}
DrmPlane *plane() const {
return plane_;
}
- void set_plane(DrmPlane *plane) {
- plane_ = plane;
- }
-
- std::vector<size_t> &source_layers() {
- return source_layers_;
- }
- const std::vector<size_t> &source_layers() const {
- return source_layers_;
+ size_t source_layer() const {
+ return source_layer_;
}
private:
DrmPlane *plane_ = NULL;
- std::vector<size_t> source_layers_;
+ size_t source_layer_ = kUndefinedSourceLayer;
};
class DrmDisplayComposition {
for (DrmCompositionPlane &comp_plane : comp_planes) {
DrmPlane *plane = comp_plane.plane();
- std::vector<size_t> &source_layers = comp_plane.source_layers();
+ size_t source_layer = comp_plane.source_layer();
- if (source_layers.size() > 1) {
- ALOGE("Can't handle more than one source layer sz=%zu",
- source_layers.size());
- continue;
- }
-
- if (source_layers.empty() || source_layers.front() >= layers.size()) {
- ALOGE("Source layer index %zu out of bounds %zu", source_layers.front(),
+ if (source_layer >= layers.size()) {
+ ALOGE("Source layer index %zu out of bounds %zu", source_layer,
layers.size());
return -EINVAL;
}
- DrmHwcLayer &layer = layers[source_layers.front()];
+ DrmHwcLayer &layer = layers[source_layer];
new_frame_state.used_framebuffers.emplace_back(layer.FbIdHandle);
new_frame_state.used_planes.emplace_back(plane);
auto &v = unused_planes;
v.erase(std::remove(v.begin(), v.end(), plane), v.end());
- if (plane->AtomicSetState(*pset, layer, source_layers.front(),
- crtc->id()) != 0) {
+ if (plane->AtomicSetState(*pset, layer, source_layer, crtc->id()) != 0) {
return -EINVAL;
}
}