diff options
author | Praveen Chavan <pchavan@codeaurora.org> | 2014-09-15 17:05:54 -0700 |
---|---|---|
committer | Praveen Chavan <pchavan@codeaurora.org> | 2014-09-15 18:48:17 -0700 |
commit | 16e7fc0b29f2042fd356e383222fe2c7fb64adf4 (patch) | |
tree | d37ee8cc41d9fe6af9e3d79bf5e2604d2795bca1 /libc2dcolorconvert | |
parent | ccd09d8f74c4aa7e4570242e7d288f46994126fd (diff) | |
download | media-16e7fc0b29f2042fd356e383222fe2c7fb64adf4.tar.gz |
mm-video-v4l2: vdec: Set correct filled-length for color-converted buffers
Query the image-size of color-converted buffer from converter, sans
the padding and alignment.
Change-Id: Ifbe7229b5e963a20538547fe543be019b161db7b
Diffstat (limited to 'libc2dcolorconvert')
-rw-r--r-- | libc2dcolorconvert/C2DColorConverter.cpp | 55 | ||||
-rw-r--r-- | libc2dcolorconvert/C2DColorConverter.h | 6 |
2 files changed, 48 insertions, 13 deletions
diff --git a/libc2dcolorconvert/C2DColorConverter.cpp b/libc2dcolorconvert/C2DColorConverter.cpp index 97763e5b..1d2bdcf2 100644 --- a/libc2dcolorconvert/C2DColorConverter.cpp +++ b/libc2dcolorconvert/C2DColorConverter.cpp @@ -59,18 +59,19 @@ protected: virtual int convertC2D(int srcFd, void *srcBase, void * srcData, int dstFd, void *dstBase, void * dstData); private: - virtual bool isYUVSurface(ColorConvertFormat format); - virtual void *getDummySurfaceDef(ColorConvertFormat format, size_t width, size_t height, bool isSource); - virtual C2D_STATUS updateYUVSurfaceDef(int fd, void *base, void * data, bool isSource); - virtual C2D_STATUS updateRGBSurfaceDef(int fd, void * data, bool isSource); - virtual uint32_t getC2DFormat(ColorConvertFormat format); - virtual size_t calcStride(ColorConvertFormat format, size_t width); - virtual size_t calcYSize(ColorConvertFormat format, size_t width, size_t height); - virtual size_t calcSize(ColorConvertFormat format, size_t width, size_t height); - virtual void *getMappedGPUAddr(int bufFD, void *bufPtr, size_t bufLen); - virtual bool unmapGPUAddr(unsigned long gAddr); - virtual size_t calcLumaAlign(ColorConvertFormat format); - virtual size_t calcSizeAlign(ColorConvertFormat format); + 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); + uint32_t getC2DFormat(ColorConvertFormat format); + size_t calcStride(ColorConvertFormat format, size_t width); + size_t calcYSize(ColorConvertFormat format, size_t width, size_t height); + size_t calcSize(ColorConvertFormat format, size_t width, size_t height); + void *getMappedGPUAddr(int bufFD, void *bufPtr, size_t bufLen); + bool unmapGPUAddr(unsigned long gAddr); + size_t calcLumaAlign(ColorConvertFormat format); + size_t calcSizeAlign(ColorConvertFormat format); + C2DBytesPerPixel calcBytesPerPixel(ColorConvertFormat format); void *mC2DLibHandle; LINK_c2dCreateSurface mC2DCreateSurface; @@ -532,7 +533,7 @@ int32_t C2DColorConverter::getBuffReq(int32_t port, C2DBuffReq *req) { req->lumaAlign = calcLumaAlign(mSrcFormat); req->sizeAlign = calcSizeAlign(mSrcFormat); req->size = calcSize(mSrcFormat, mSrcWidth, mSrcHeight); - //add bpp? + req->bpp = calcBytesPerPixel(mSrcFormat); ALOGV("input req->size = %d\n", req->size); } else if (port == C2D_OUTPUT) { req->width = mDstWidth; @@ -542,6 +543,7 @@ int32_t C2DColorConverter::getBuffReq(int32_t port, C2DBuffReq *req) { req->lumaAlign = calcLumaAlign(mDstFormat); req->sizeAlign = calcSizeAlign(mDstFormat); req->size = calcSize(mDstFormat, mDstWidth, mDstHeight); + req->bpp = calcBytesPerPixel(mDstFormat); ALOGV("output req->size = %d\n", req->size); } return 0; @@ -576,6 +578,33 @@ size_t C2DColorConverter::calcSizeAlign(ColorConvertFormat format) { } } +C2DBytesPerPixel C2DColorConverter::calcBytesPerPixel(ColorConvertFormat format) { + C2DBytesPerPixel bpp; + bpp.numerator = 0; + bpp.denominator = 1; + + switch (format) { + case RGB565: + bpp.numerator = 2; + break; + case RGBA8888: + bpp.numerator = 4; + break; + case YCbCr420SP: + case YCbCr420P: + case YCrCb420P: + case YCbCr420Tile: + case NV12_2K: + case NV12_128m: + bpp.numerator = 3; + bpp.denominator = 2; + break; + default: + break; + } + return bpp; +} + int32_t C2DColorConverter::dumpOutput(char * filename, char mode) { int fd; size_t stride, sliceHeight; diff --git a/libc2dcolorconvert/C2DColorConverter.h b/libc2dcolorconvert/C2DColorConverter.h index 1b485005..f13f919e 100644 --- a/libc2dcolorconvert/C2DColorConverter.h +++ b/libc2dcolorconvert/C2DColorConverter.h @@ -80,6 +80,11 @@ enum ColorConvertFormat { }; typedef struct { + int32_t numerator; + int32_t denominator; +} C2DBytesPerPixel; + +typedef struct { int32_t width; int32_t height; int32_t stride; @@ -87,6 +92,7 @@ typedef struct { int32_t lumaAlign; int32_t sizeAlign; int32_t size; + C2DBytesPerPixel bpp; } C2DBuffReq; typedef enum { |