| #define LOG_TAG "hwc-platform-imagination" |
| |
| #include "platformimagination.h" |
| |
| #include <log/log.h> |
| #include <xf86drm.h> |
| |
| #include "img_gralloc1_public.h" |
| |
| namespace android { |
| |
| Importer *Importer::CreateInstance(DrmDevice *drm) { |
| ImaginationImporter *importer = new ImaginationImporter(drm); |
| if (!importer) |
| return NULL; |
| |
| int ret = importer->Init(); |
| if (ret) { |
| ALOGE("Failed to initialize the Imagination importer %d", ret); |
| delete importer; |
| return NULL; |
| } |
| return importer; |
| } |
| |
| int ImaginationImporter::ConvertBoInfo(buffer_handle_t handle, |
| hwc_drm_bo_t *bo) { |
| IMG_native_handle_t *hnd = (IMG_native_handle_t *)handle; |
| if (!hnd) |
| return -EINVAL; |
| |
| /* Extra bits are responsible for buffer compression and memory layout */ |
| if (hnd->iFormat & ~0x10f) { |
| ALOGV("Special buffer formats are not supported"); |
| return -EINVAL; |
| } |
| |
| bo->width = hnd->iWidth; |
| bo->height = hnd->iHeight; |
| bo->usage = hnd->usage; |
| bo->prime_fds[0] = hnd->fd[0]; |
| bo->pitches[0] = ALIGN(hnd->iWidth, HW_ALIGN) * hnd->uiBpp >> 3; |
| bo->hal_format = hnd->iFormat; |
| bo->pixel_stride = hnd->aiStride[0]; |
| |
| switch (hnd->iFormat) { |
| #ifdef HAL_PIXEL_FORMAT_BGRX_8888 |
| case HAL_PIXEL_FORMAT_BGRX_8888: |
| bo->format = DRM_FORMAT_XRGB8888; |
| break; |
| #endif |
| default: |
| bo->format = ConvertHalFormatToDrm(hnd->iFormat & 0xf); |
| if (bo->format == DRM_FORMAT_INVALID) { |
| ALOGV("Cannot convert hal format to drm format %u", hnd->iFormat); |
| return -EINVAL; |
| } |
| } |
| |
| return 0; |
| } |
| |
| } // namespace android |