/* * drm_device.h - DRM Device Implementation * * Copyright (c) 2021 Rockchip Corporation * * 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 _DRM_DEVICE_H_ #define _DRM_DEVICE_H_ #include #include #include "unique_fd.h" #include "xcam_common.h" extern "C" { #define RKCAM_MAX_DRM_PLANES 4 struct DrmDumbObject { uint32_t drm_format; uint32_t width; uint32_t height; int num_planes; int strides[RKCAM_MAX_DRM_PLANES]; uint32_t offsets[RKCAM_MAX_DRM_PLANES]; int fds[RKCAM_MAX_DRM_PLANES]; uint32_t handles[RKCAM_MAX_DRM_PLANES]; size_t sizes[RKCAM_MAX_DRM_PLANES]; }; }; namespace XCam { class DrmDevice { public: DrmDevice(); ~DrmDevice(); DrmDevice(const DrmDevice&) = delete; DrmDevice& operator=(const DrmDevice&) = delete; static bool Available(); std::unique_ptr CreateDumbObject(unsigned int width, unsigned int height, unsigned int bpp = 8, unsigned int num_planes = 1); XCamReturn DestroyDumbObject(const std::unique_ptr& bo); XCamReturn RequestMapDumbObject(const std::unique_ptr& bo, unsigned int plane = 0); private: int Open(); void Close(); UniqueFd fd_; }; }; // namespace XCam #endif // _DRM_DEVICE_H_