summaryrefslogtreecommitdiff
path: root/msm8998/libc2dcolorconvert
diff options
context:
space:
mode:
authorThierry Strudel <tstrudel@google.com>2017-06-24 18:07:02 -0700
committerThierry Strudel <tstrudel@google.com>2017-06-24 18:17:11 -0700
commit68225548f6c5dc8d87ecd8c71a802534fe1d0f5f (patch)
tree66a8ff38813054c419d29926957ef8c06f76072d /msm8998/libc2dcolorconvert
parent53801229e1ba91c204f0cfc11574a79c5a2bb582 (diff)
downloadmedia-68225548f6c5dc8d87ecd8c71a802534fe1d0f5f.tar.gz
msm8998: Update to 07.00.00.279.240
msm8998: from hardware/qcom/media 9290486d video: add vendor prefix to properties 19da8f80 Merge "mm-video-v4l2: vdec: Fix reporting change in color-space to the client" fa17158f Merge "libc2dcolorconvert: Fix address in unmap call" ffdc4909 Merge "mm-video-v4l2: venc: WA: ignore colorspace set by client when executing" ebedc974 mm-video-v4l2: vdec: Fix reporting change in color-space to the client 2d4e855a libc2dcolorconvert: Fix address in unmap call bb45d359 mm-video-v4l2: venc: WA: ignore colorspace set by client when executing aa97b82e mm-video-v4l2: vdec: Allocate input(bitstream) buffers as uncached Test: build, boot, sanity checks Bug: 62817801 Change-Id: I98cb6b897cda51363c807ae0365c2139e7d578e9 Signed-off-by: Thierry Strudel <tstrudel@google.com>
Diffstat (limited to 'msm8998/libc2dcolorconvert')
-rw-r--r--msm8998/libc2dcolorconvert/C2DColorConverter.cpp53
1 files changed, 30 insertions, 23 deletions
diff --git a/msm8998/libc2dcolorconvert/C2DColorConverter.cpp b/msm8998/libc2dcolorconvert/C2DColorConverter.cpp
index c9681c7..de726a5 100644
--- a/msm8998/libc2dcolorconvert/C2DColorConverter.cpp
+++ b/msm8998/libc2dcolorconvert/C2DColorConverter.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012 - 2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012 - 2017, The Linux Foundation. All rights reserved.
*
* redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -65,8 +65,8 @@ protected:
private:
bool isYUVSurface(ColorConvertFormat format);
void *getDummySurfaceDef(ColorConvertFormat format, size_t width, size_t height, bool isSource);
- C2D_STATUS updateYUVSurfaceDef(int fd, void *base, void * data, bool isSource);
- C2D_STATUS updateRGBSurfaceDef(int fd, void * data, bool isSource);
+ C2D_STATUS updateYUVSurfaceDef(uint8_t *addr, void *base, void * data, bool isSource);
+ C2D_STATUS updateRGBSurfaceDef(uint8_t *addr, void * data, bool isSource);
uint32_t getC2DFormat(ColorConvertFormat format);
size_t calcStride(ColorConvertFormat format, size_t width);
size_t calcYSize(ColorConvertFormat format, size_t width, size_t height);
@@ -222,6 +222,8 @@ C2DColorConverter::~C2DColorConverter()
int C2DColorConverter::convertC2D(int srcFd, void *srcBase, void * srcData, int dstFd, void *dstBase, void * dstData)
{
C2D_STATUS ret;
+ uint8_t *srcMappedGpuAddr = nullptr;
+ uint8_t *dstMappedGpuAddr = nullptr;
if (mError) {
ALOGE("C2D library initialization failed\n");
@@ -233,25 +235,38 @@ int C2DColorConverter::convertC2D(int srcFd, void *srcBase, void * srcData, int
return -1;
}
+ srcMappedGpuAddr = (uint8_t *)getMappedGPUAddr(srcFd, srcData, mSrcSize);
+ if (!srcMappedGpuAddr)
+ return -1;
+
if (isYUVSurface(mSrcFormat)) {
- ret = updateYUVSurfaceDef(srcFd, srcBase, srcData, true);
+ ret = updateYUVSurfaceDef(srcMappedGpuAddr, srcBase, srcData, true);
} else {
- ret = updateRGBSurfaceDef(srcFd, srcData, true);
+ ret = updateRGBSurfaceDef(srcMappedGpuAddr, srcData, true);
}
if (ret != C2D_STATUS_OK) {
ALOGE("Update src surface def failed\n");
+ unmapGPUAddr((unsigned long)srcMappedGpuAddr);
return -ret;
}
+ dstMappedGpuAddr = (uint8_t *)getMappedGPUAddr(dstFd, dstData, mDstSize);
+ if (!dstMappedGpuAddr) {
+ unmapGPUAddr((unsigned long)srcMappedGpuAddr);
+ return -1;
+ }
+
if (isYUVSurface(mDstFormat)) {
- ret = updateYUVSurfaceDef(dstFd, dstBase, dstData, false);
+ ret = updateYUVSurfaceDef(dstMappedGpuAddr, dstBase, dstData, false);
} else {
- ret = updateRGBSurfaceDef(dstFd, dstData, false);
+ ret = updateRGBSurfaceDef(dstMappedGpuAddr, dstData, false);
}
if (ret != C2D_STATUS_OK) {
ALOGE("Update dst surface def failed\n");
+ unmapGPUAddr((unsigned long)srcMappedGpuAddr);
+ unmapGPUAddr((unsigned long)dstMappedGpuAddr);
return -ret;
}
@@ -260,18 +275,10 @@ int C2DColorConverter::convertC2D(int srcFd, void *srcBase, void * srcData, int
mC2DFinish(mDstSurface);
bool unmappedSrcSuccess;
- if (isYUVSurface(mSrcFormat)) {
- unmappedSrcSuccess = unmapGPUAddr((unsigned long)((C2D_YUV_SURFACE_DEF *)mSrcSurfaceDef)->phys0);
- } else {
- unmappedSrcSuccess = unmapGPUAddr((unsigned long)((C2D_RGB_SURFACE_DEF *)mSrcSurfaceDef)->phys);
- }
+ unmappedSrcSuccess = unmapGPUAddr((unsigned long)srcMappedGpuAddr);
bool unmappedDstSuccess;
- if (isYUVSurface(mDstFormat)) {
- unmappedDstSuccess = unmapGPUAddr((unsigned long)((C2D_YUV_SURFACE_DEF *)mDstSurfaceDef)->phys0);
- } else {
- unmappedDstSuccess = unmapGPUAddr((unsigned long)((C2D_RGB_SURFACE_DEF *)mDstSurfaceDef)->phys);
- }
+ unmappedDstSuccess = unmapGPUAddr((unsigned long)dstMappedGpuAddr);
if (ret != C2D_STATUS_OK) {
ALOGE("C2D Draw failed\n");
@@ -348,12 +355,12 @@ void* C2DColorConverter::getDummySurfaceDef(ColorConvertFormat format, size_t wi
}
}
-C2D_STATUS C2DColorConverter::updateYUVSurfaceDef(int fd, void *base, void *data, bool isSource)
+C2D_STATUS C2DColorConverter::updateYUVSurfaceDef(uint8_t *gpuAddr, void *base, void *data, bool isSource)
{
if (isSource) {
C2D_YUV_SURFACE_DEF * srcSurfaceDef = (C2D_YUV_SURFACE_DEF *)mSrcSurfaceDef;
srcSurfaceDef->plane0 = data;
- srcSurfaceDef->phys0 = (uint8_t *)getMappedGPUAddr(fd, data, mSrcSize) + ((uint8_t *)data - (uint8_t *)base);
+ srcSurfaceDef->phys0 = gpuAddr + ((uint8_t *)data - (uint8_t *)base);
srcSurfaceDef->plane1 = (uint8_t *)data + mSrcYSize;
srcSurfaceDef->phys1 = (uint8_t *)srcSurfaceDef->phys0 + mSrcYSize;
if (srcSurfaceDef->format & C2D_COLOR_FORMAT_420_I420 ||
@@ -367,7 +374,7 @@ C2D_STATUS C2DColorConverter::updateYUVSurfaceDef(int fd, void *base, void *data
} else {
C2D_YUV_SURFACE_DEF * dstSurfaceDef = (C2D_YUV_SURFACE_DEF *)mDstSurfaceDef;
dstSurfaceDef->plane0 = data;
- dstSurfaceDef->phys0 = (uint8_t *)getMappedGPUAddr(fd, data, mDstSize) + ((uint8_t *)data - (uint8_t *)base);
+ dstSurfaceDef->phys0 = gpuAddr + ((uint8_t *)data - (uint8_t *)base);
dstSurfaceDef->plane1 = (uint8_t *)data + mDstYSize;
dstSurfaceDef->phys1 = (uint8_t *)dstSurfaceDef->phys0 + mDstYSize;
if (dstSurfaceDef->format & C2D_COLOR_FORMAT_420_I420 ||
@@ -382,12 +389,12 @@ C2D_STATUS C2DColorConverter::updateYUVSurfaceDef(int fd, void *base, void *data
}
}
-C2D_STATUS C2DColorConverter::updateRGBSurfaceDef(int fd, void * data, bool isSource)
+C2D_STATUS C2DColorConverter::updateRGBSurfaceDef(uint8_t *gpuAddr, void * data, bool isSource)
{
if (isSource) {
C2D_RGB_SURFACE_DEF * srcSurfaceDef = (C2D_RGB_SURFACE_DEF *)mSrcSurfaceDef;
srcSurfaceDef->buffer = data;
- srcSurfaceDef->phys = getMappedGPUAddr(fd, data, mSrcSize);
+ srcSurfaceDef->phys = gpuAddr;
return mC2DUpdateSurface(mSrcSurface, C2D_SOURCE,
(C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST | C2D_SURFACE_WITH_PHYS),
&(*srcSurfaceDef));
@@ -395,7 +402,7 @@ C2D_STATUS C2DColorConverter::updateRGBSurfaceDef(int fd, void * data, bool isSo
C2D_RGB_SURFACE_DEF * dstSurfaceDef = (C2D_RGB_SURFACE_DEF *)mDstSurfaceDef;
dstSurfaceDef->buffer = data;
ALOGV("dstSurfaceDef->buffer = %p\n", data);
- dstSurfaceDef->phys = getMappedGPUAddr(fd, data, mDstSize);
+ dstSurfaceDef->phys = gpuAddr;
return mC2DUpdateSurface(mDstSurface, C2D_TARGET,
(C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST | C2D_SURFACE_WITH_PHYS),
&(*dstSurfaceDef));