diff options
Diffstat (limited to 'gralloc/QtiMapperExtensions.cpp')
-rw-r--r-- | gralloc/QtiMapperExtensions.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/gralloc/QtiMapperExtensions.cpp b/gralloc/QtiMapperExtensions.cpp index 56b747bd..cace7ba6 100644 --- a/gralloc/QtiMapperExtensions.cpp +++ b/gralloc/QtiMapperExtensions.cpp @@ -342,11 +342,46 @@ Return<void> QtiMapperExtensions::getSurfaceMetadata(void *buffer, getSurfaceMet Return<void> QtiMapperExtensions::getFormatLayout(int32_t format, uint64_t usage, int32_t flags, int32_t width, int32_t height, getFormatLayout_cb hidl_cb) { - ALOGD_IF(DEBUG, "%s: Input parameters - wxh: %dx%d usage: 0x%" PRIu64 " format: %d flags: %d", - __FUNCTION__, width, height, usage, format, flags); - auto err = Error::NONE; + ALOGD_IF(DEBUG, "%s: Input parameters - wxh: %dx%d usage: 0x%" PRIu64 " format: %d", __FUNCTION__, + width, height, usage, format); + auto err = Error::BAD_BUFFER; hidl_vec<PlaneLayout> plane_info; + unsigned int alignedw = 0, alignedh = 0; + int plane_count = 0; uint64_t size = 0; + int custom_format = gralloc::GetImplDefinedFormat(usage, format); + BufferInfo info(width, height, custom_format, usage); + gralloc::GetAlignedWidthAndHeight(info, &alignedw, &alignedh); + size = gralloc::GetSize(info, alignedw, alignedh); + ALOGD_IF(DEBUG, "%s: Aligned width and height - wxh: %ux%u custom_format = %d", __FUNCTION__, + alignedw, alignedh, custom_format); + if (gralloc::IsYuvFormat(custom_format)) { + gralloc::PlaneLayoutInfo yuv_plane_info[8] = {}; + gralloc::GetYUVPlaneInfo(info, custom_format, alignedw, alignedh, flags, &plane_count, + yuv_plane_info); + ALOGD_IF(DEBUG, "%s: Number of plane - %d, custom_format - %d", __FUNCTION__, plane_count, + custom_format); + plane_info.resize(plane_count); + for (int i = 0; i < plane_count; i++) { + plane_info[i].component = yuv_plane_info[i].component; + plane_info[i].h_subsampling = yuv_plane_info[i].h_subsampling; + plane_info[i].v_subsampling = yuv_plane_info[i].v_subsampling; + plane_info[i].offset = yuv_plane_info[i].offset; + plane_info[i].pixel_increment = yuv_plane_info[i].step; + plane_info[i].stride = yuv_plane_info[i].stride; + plane_info[i].stride_bytes = yuv_plane_info[i].stride_bytes; + plane_info[i].scanlines = yuv_plane_info[i].scanlines; + plane_info[i].size = yuv_plane_info[i].size; + ALOGD_IF(DEBUG, "%s: plane info: component - %d", __FUNCTION__, plane_info[i].component); + ALOGD_IF(DEBUG, "h_subsampling - %u, v_subsampling - %u, offset - %u, pixel_increment - %d", + plane_info[i].h_subsampling, plane_info[i].v_subsampling, plane_info[i].offset, + plane_info[i].pixel_increment); + ALOGD_IF(DEBUG, "stride_pixel - %d, stride_bytes - %d, scanlines - %d, size - %u", + plane_info[i].stride, plane_info[i].stride_bytes, plane_info[i].scanlines, + plane_info[i].size); + } + err = Error::NONE; + } hidl_cb(err, size, plane_info); return Void(); } |