summaryrefslogtreecommitdiff
path: root/libc2dcolorconvert
diff options
context:
space:
mode:
authorPraveen Chavan <pchavan@codeaurora.org>2014-09-15 17:05:54 -0700
committerPraveen Chavan <pchavan@codeaurora.org>2014-09-15 18:48:17 -0700
commit16e7fc0b29f2042fd356e383222fe2c7fb64adf4 (patch)
treed37ee8cc41d9fe6af9e3d79bf5e2604d2795bca1 /libc2dcolorconvert
parentccd09d8f74c4aa7e4570242e7d288f46994126fd (diff)
downloadmedia-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.cpp55
-rw-r--r--libc2dcolorconvert/C2DColorConverter.h6
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 {