aboutsummaryrefslogtreecommitdiff
path: root/include/drmhwcomposer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/drmhwcomposer.h')
-rw-r--r--include/drmhwcomposer.h133
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;
}