DrmDevice *mDrmDevice;
};
-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 DrmHwcTransform {
kIdentity = 0,
kFlipH = 1 << 0,
buffer_handle_t sf_handle = NULL;
int gralloc_buffer_usage = 0;
DrmHwcBuffer buffer;
- DrmHwcNativeHandle handle;
uint32_t transform;
DrmHwcBlending blending = DrmHwcBlending::kNone;
uint16_t alpha = 0xffff;
void SetTransform(int32_t sf_transform);
- buffer_handle_t get_usable_handle() const {
- return handle.get() != NULL ? handle.get() : sf_handle;
- }
-
bool protected_usage() const {
return (gralloc_buffer_usage & GRALLOC_USAGE_PROTECTED) ==
GRALLOC_USAGE_PROTECTED;
return 0;
}
-int DrmHwcNativeHandle::CopyBufferHandle(buffer_handle_t handle) {
- native_handle_t *handle_copy = nullptr;
- GraphicBufferMapper &gm(GraphicBufferMapper::get());
- int ret = 0;
-
- ret = gm.getGrallocMapper().importBuffer(handle,
- (buffer_handle_t *)&handle_copy);
-
- if (ret) {
- ALOGE("Failed to import buffer handle %d", ret);
- return ret;
- }
-
- Clear();
-
- handle_ = handle_copy;
-
- return 0;
-}
-
-DrmHwcNativeHandle::~DrmHwcNativeHandle() {
- Clear();
-}
-
-void DrmHwcNativeHandle::Clear() {
- if (handle_ != nullptr) {
- GraphicBufferMapper &gm(GraphicBufferMapper::get());
- int ret = gm.freeBuffer(handle_);
- if (ret) {
- ALOGE("Failed to free buffer handle %d", ret);
- }
- handle_ = nullptr;
- }
-}
-
int DrmHwcLayer::ImportBuffer(DrmDevice *drmDevice) {
int ret = buffer.ImportBuffer(sf_handle, drmDevice);
if (ret)
const hwc_drm_bo *bo = buffer.operator->();
- ret = handle.CopyBufferHandle(sf_handle);
- if (ret)
- return ret;
-
gralloc_buffer_usage = bo->usage;
return 0;