blob: 428763e509c26251da371324cf1e6fc2d9e4f55e [file] [log] [blame]
/*
* Copyright (C) 2023 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 express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_HWC_DRMSWAPCHAIN_H
#define ANDROID_HWC_DRMSWAPCHAIN_H
#include <android-base/unique_fd.h>
#include "Common.h"
#include "DrmClient.h"
namespace aidl::android::hardware::graphics::composer3::impl {
class DrmSwapchain {
public:
class Image {
public:
Image() = delete;
~Image();
int wait();
void markAsInUse(::android::base::unique_fd useCompleteFenceFd);
const native_handle_t* getBuffer();
const std::shared_ptr<DrmBuffer> getDrmBuffer();
Image(Image&& other);
private:
Image(const native_handle_t*, std::shared_ptr<DrmBuffer>);
const native_handle_t* mBuffer = nullptr;
std::shared_ptr<DrmBuffer> mDrmBuffer;
::android::base::unique_fd mLastUseFenceFd;
friend class DrmSwapchain;
};
static std::unique_ptr<DrmSwapchain> create(uint32_t width, uint32_t height, uint32_t usage,
DrmClient* client, uint32_t numImages = 3);
Image* getNextImage();
private:
DrmSwapchain(std::vector<Image> images);
std::vector<Image> mImages;
uint32_t mLastUsedIndex = 0;
};
} // namespace aidl::android::hardware::graphics::composer3::impl
#endif