diff options
Diffstat (limited to 'hwcomposer.cpp')
-rw-r--r-- | hwcomposer.cpp | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/hwcomposer.cpp b/hwcomposer.cpp index 4bc4670..e0483e9 100644 --- a/hwcomposer.cpp +++ b/hwcomposer.cpp @@ -202,103 +202,6 @@ struct hwc_context_t { DrmHotplugHandler hotplug_handler; }; -static native_handle_t *dup_buffer_handle(buffer_handle_t handle) { - native_handle_t *new_handle = - native_handle_create(handle->numFds, handle->numInts); - if (new_handle == NULL) - return NULL; - - const int *old_data = handle->data; - int *new_data = new_handle->data; - for (int i = 0; i < handle->numFds; i++) { - *new_data = dup(*old_data); - old_data++; - new_data++; - } - memcpy(new_data, old_data, sizeof(int) * handle->numInts); - - return new_handle; -} - -static void free_buffer_handle(native_handle_t *handle) { - int ret = native_handle_close(handle); - if (ret) - ALOGE("Failed to close native handle %d", ret); - ret = native_handle_delete(handle); - if (ret) - ALOGE("Failed to delete native handle %d", ret); -} - -const hwc_drm_bo *DrmHwcBuffer::operator->() const { - if (importer_ == NULL) { - ALOGE("Access of non-existent BO"); - exit(1); - return NULL; - } - return &bo_; -} - -void DrmHwcBuffer::Clear() { - if (importer_ != NULL) { - importer_->ReleaseBuffer(&bo_); - importer_ = NULL; - } -} - -int DrmHwcBuffer::ImportBuffer(buffer_handle_t handle, Importer *importer) { - hwc_drm_bo tmp_bo; - - int ret = importer->ImportBuffer(handle, &tmp_bo); - if (ret) - return ret; - - if (importer_ != NULL) { - importer_->ReleaseBuffer(&bo_); - } - - importer_ = importer; - - bo_ = tmp_bo; - - return 0; -} - -int DrmHwcNativeHandle::CopyBufferHandle(buffer_handle_t handle, - const gralloc_module_t *gralloc) { - native_handle_t *handle_copy = dup_buffer_handle(handle); - if (handle_copy == NULL) { - ALOGE("Failed to duplicate handle"); - return -ENOMEM; - } - - int ret = gralloc->registerBuffer(gralloc, handle_copy); - if (ret) { - ALOGE("Failed to register buffer handle %d", ret); - free_buffer_handle(handle_copy); - return ret; - } - - Clear(); - - gralloc_ = gralloc; - handle_ = handle_copy; - - return 0; -} - -DrmHwcNativeHandle::~DrmHwcNativeHandle() { - Clear(); -} - -void DrmHwcNativeHandle::Clear() { - if (gralloc_ != NULL && handle_ != NULL) { - gralloc_->unregisterBuffer(gralloc_, handle_); - free_buffer_handle(handle_); - gralloc_ = NULL; - handle_ = NULL; - } -} - class DrmVsyncCallback : public VsyncCallback { public: DrmVsyncCallback(hwc_procs_t const *procs) : procs_(procs) { @@ -311,69 +214,6 @@ class DrmVsyncCallback : public VsyncCallback { hwc_procs_t const *procs_; }; -int DrmHwcLayer::InitFromHwcLayer(hwc_layer_1_t *sf_layer, Importer *importer, - const gralloc_module_t *gralloc) { - sf_handle = sf_layer->handle; - alpha = sf_layer->planeAlpha; - - source_crop = DrmHwcRect<float>( - sf_layer->sourceCropf.left, sf_layer->sourceCropf.top, - sf_layer->sourceCropf.right, sf_layer->sourceCropf.bottom); - display_frame = DrmHwcRect<int>( - sf_layer->displayFrame.left, sf_layer->displayFrame.top, - sf_layer->displayFrame.right, sf_layer->displayFrame.bottom); - - transform = 0; - // 270* and 180* cannot be combined with flips. More specifically, they - // already contain both horizontal and vertical flips, so those fields are - // redundant in this case. 90* rotation can be combined with either horizontal - // flip or vertical flip, so treat it differently - if (sf_layer->transform == HWC_TRANSFORM_ROT_270) { - transform = DrmHwcTransform::kRotate270; - } else if (sf_layer->transform == HWC_TRANSFORM_ROT_180) { - transform = DrmHwcTransform::kRotate180; - } else { - if (sf_layer->transform & HWC_TRANSFORM_FLIP_H) - transform |= DrmHwcTransform::kFlipH; - if (sf_layer->transform & HWC_TRANSFORM_FLIP_V) - transform |= DrmHwcTransform::kFlipV; - if (sf_layer->transform & HWC_TRANSFORM_ROT_90) - transform |= DrmHwcTransform::kRotate90; - } - - switch (sf_layer->blending) { - case HWC_BLENDING_NONE: - blending = DrmHwcBlending::kNone; - break; - case HWC_BLENDING_PREMULT: - blending = DrmHwcBlending::kPreMult; - break; - case HWC_BLENDING_COVERAGE: - blending = DrmHwcBlending::kCoverage; - break; - default: - ALOGE("Invalid blending in hwc_layer_1_t %d", sf_layer->blending); - return -EINVAL; - } - - int ret = buffer.ImportBuffer(sf_layer->handle, importer); - if (ret) - return ret; - - ret = handle.CopyBufferHandle(sf_layer->handle, gralloc); - if (ret) - return ret; - - ret = gralloc->perform(gralloc, GRALLOC_MODULE_PERFORM_GET_USAGE, - handle.get(), &gralloc_buffer_usage); - if (ret) { - ALOGE("Failed to get usage for buffer %p (%d)", handle.get(), ret); - return ret; - } - - return 0; -} - static void hwc_dump(struct hwc_composer_device_1 *dev, char *buff, int buff_len) { struct hwc_context_t *ctx = (struct hwc_context_t *)&dev->common; |