diff options
Diffstat (limited to 'include/drmhwcomposer.h')
-rw-r--r-- | include/drmhwcomposer.h | 133 |
1 files changed, 30 insertions, 103 deletions
diff --git a/include/drmhwcomposer.h b/include/drmhwcomposer.h index 0706ae5..4fb0efd 100644 --- a/include/drmhwcomposer.h +++ b/include/drmhwcomposer.h @@ -17,101 +17,35 @@ #ifndef ANDROID_DRM_HWCOMPOSER_H_ #define ANDROID_DRM_HWCOMPOSER_H_ -#include <stdbool.h> -#include <stdint.h> - -#include <vector> - #include <hardware/hardware.h> #include <hardware/hwcomposer.h> -#include "autofd.h" -#include "drmhwcgralloc.h" - -struct hwc_import_context; -int hwc_import_init(struct hwc_import_context **ctx); -int hwc_import_destroy(struct hwc_import_context *ctx); +#include <cstdbool> +#include <cstdint> +#include <vector> -int hwc_import_bo_create(int fd, struct hwc_import_context *ctx, - buffer_handle_t buf, struct hwc_drm_bo *bo); -bool hwc_import_bo_release(int fd, struct hwc_import_context *ctx, - struct hwc_drm_bo *bo); +#include "drm/DrmFbImporter.h" +#include "drmhwcgralloc.h" +#include "utils/UniqueFd.h" namespace android { -class Importer; - -class DrmHwcBuffer { - public: - DrmHwcBuffer() = default; - DrmHwcBuffer(const hwc_drm_bo &bo, Importer *importer) - : bo_(bo), importer_(importer) { - } - DrmHwcBuffer(DrmHwcBuffer &&rhs) : bo_(rhs.bo_), importer_(rhs.importer_) { - rhs.importer_ = NULL; - } - - ~DrmHwcBuffer() { - Clear(); - } - - DrmHwcBuffer &operator=(DrmHwcBuffer &&rhs) { - Clear(); - importer_ = rhs.importer_; - rhs.importer_ = NULL; - bo_ = rhs.bo_; - return *this; - } - - operator bool() const { - return importer_ != NULL; - } - - const hwc_drm_bo *operator->() const; - - void Clear(); +class DrmFbIdHandle; - int ImportBuffer(buffer_handle_t handle, Importer *importer); - - private: - hwc_drm_bo bo_; - Importer *importer_ = NULL; +enum class DrmHwcColorSpace : int32_t { + kUndefined, + kItuRec601, + kItuRec709, + kItuRec2020, }; -class DrmHwcNativeHandle { - public: - DrmHwcNativeHandle() = default; - - DrmHwcNativeHandle(native_handle_t *handle) : handle_(handle) { - } - - DrmHwcNativeHandle(DrmHwcNativeHandle &&rhs) { - handle_ = rhs.handle_; - rhs.handle_ = NULL; - } - - ~DrmHwcNativeHandle(); - - DrmHwcNativeHandle &operator=(DrmHwcNativeHandle &&rhs) { - Clear(); - handle_ = rhs.handle_; - rhs.handle_ = NULL; - return *this; - } - - int CopyBufferHandle(buffer_handle_t handle); - - void Clear(); - - buffer_handle_t get() const { - return handle_; - } - - private: - native_handle_t *handle_ = NULL; +enum class DrmHwcSampleRange : int32_t { + kUndefined, + kFullRange, + kLimitedRange, }; -enum DrmHwcTransform { +enum DrmHwcTransform : uint32_t { kIdentity = 0, kFlipH = 1 << 0, kFlipV = 1 << 1, @@ -121,37 +55,30 @@ enum DrmHwcTransform { }; enum class DrmHwcBlending : int32_t { - kNone = HWC_BLENDING_NONE, - kPreMult = HWC_BLENDING_PREMULT, - kCoverage = HWC_BLENDING_COVERAGE, + kNone, + kPreMult, + kCoverage, }; struct DrmHwcLayer { - buffer_handle_t sf_handle = NULL; + buffer_handle_t sf_handle = nullptr; + hwc_drm_bo_t buffer_info{}; + std::shared_ptr<DrmFbIdHandle> fb_id_handle; + int gralloc_buffer_usage = 0; - DrmHwcBuffer buffer; - DrmHwcNativeHandle handle; - uint32_t transform; + DrmHwcTransform transform{}; DrmHwcBlending blending = DrmHwcBlending::kNone; - uint16_t alpha = 0xffff; + uint16_t alpha = UINT16_MAX; hwc_frect_t source_crop; hwc_rect_t display_frame; + DrmHwcColorSpace color_space; + DrmHwcSampleRange sample_range; UniqueFd acquire_fence; - OutputFd release_fence; - - int ImportBuffer(Importer *importer); - int InitFromDrmHwcLayer(DrmHwcLayer *layer, Importer *importer); - void SetTransform(int32_t sf_transform); - void SetSourceCrop(hwc_frect_t const &crop); - void SetDisplayFrame(hwc_rect_t const &frame); - - buffer_handle_t get_usable_handle() const { - return handle.get() != NULL ? handle.get() : sf_handle; - } + int ImportBuffer(DrmDevice *drm_device); - bool protected_usage() const { + bool IsProtected() const { return (gralloc_buffer_usage & GRALLOC_USAGE_PROTECTED) == GRALLOC_USAGE_PROTECTED; } |