// Copyright 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expresso or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "Hwc2.h"

std::unique_ptr<FlatComposeRequest> ToFlatComposeRequest(
        const ComposeDevice* composeRequest) {
    auto flatComposeRequest = std::make_unique<FlatComposeRequest>();
    flatComposeRequest->displayId = 0;
    flatComposeRequest->targetHandle = composeRequest->targetHandle;
    for (uint32_t i = 0; i < composeRequest->numLayers; i++) {
        flatComposeRequest->layers.emplace_back(composeRequest->layer[i]);
    }
    return flatComposeRequest;
}

std::unique_ptr<FlatComposeRequest> ToFlatComposeRequest(
        const ComposeDevice_v2* composeRequest) {
    auto flatComposeRequest = std::make_unique<FlatComposeRequest>();
    flatComposeRequest->displayId = composeRequest->displayId;
    flatComposeRequest->targetHandle = composeRequest->targetHandle;
    for (uint32_t i = 0; i < composeRequest->numLayers; i++) {
        flatComposeRequest->layers.emplace_back(composeRequest->layer[i]);
    }
    return flatComposeRequest;
}
