diff --git a/libhwjpeg/ExynosJpegBase.cpp b/libhwjpeg/ExynosJpegBase.cpp
index eb565d6..5f58515 100644
--- a/libhwjpeg/ExynosJpegBase.cpp
+++ b/libhwjpeg/ExynosJpegBase.cpp
@@ -194,43 +194,6 @@
     return iRet;
 }
 
-int ExynosJpegBase::t_v4l2Querybuf(int iFd, struct BUF_INFO *pstBufInfo, struct BUFFER *pstBuf)
-{
-    struct v4l2_buffer v4l2_buf;
-    struct v4l2_plane plane[JPEG_MAX_PLANE_CNT];
-    int iRet = ERROR_NONE;
-    int i;
-
-    memset(plane, 0, (int)JPEG_MAX_PLANE_CNT * sizeof(struct v4l2_plane));
-
-    v4l2_buf.index = 0;
-    v4l2_buf.type = pstBufInfo->buf_type;
-    v4l2_buf.memory = pstBufInfo->memory;
-    v4l2_buf.length = pstBufInfo->numOfPlanes;
-    v4l2_buf.m.planes = plane;
-
-    iRet = ioctl(iFd, VIDIOC_QUERYBUF, &v4l2_buf);
-    if (iRet < 0) {
-        JPEG_ERROR_LOG("[%s:%d]: VIDIOC_QUERYBUF failed\n", __func__, iRet);
-        return iRet;
-    }
-
-    for (i= 0; i < v4l2_buf.length; i++) {
-        pstBuf->size[i] = v4l2_buf.m.planes[i].length;
-        pstBuf->addr[i] = (char *) mmap(0,
-            pstBuf->size[i],
-            PROT_READ | PROT_WRITE, MAP_SHARED, iFd,
-            v4l2_buf.m.planes[i].m.mem_offset);
-
-        if ((pstBuf->addr[i] == MAP_FAILED) || (pstBuf->size[i] <= 0)) {
-            JPEG_ERROR_LOG("[%s]: mmap failed\n", __func__);
-            return ERROR_MMAP_FAILED;
-        }
-    }
-
-    return iRet;
-}
-
 int ExynosJpegBase::t_v4l2Qbuf(int iFd, struct BUF_INFO *pstBufInfo, struct BUFFER *pstBuf)
 {
     struct v4l2_buffer v4l2_buf;
@@ -248,9 +211,9 @@
     v4l2_buf.length = pstBufInfo->numOfPlanes;
     v4l2_buf.m.planes = plane;
 
-    if (pstBufInfo->memory == V4L2_MEMORY_USERPTR) {
+    if (pstBufInfo->memory == V4L2_MEMORY_DMABUF) {
         for (i = 0; i < pstBufInfo->numOfPlanes; i++) {
-            v4l2_buf.m.planes[i].m.userptr = (unsigned long)pstBuf->addr[i];
+            v4l2_buf.m.planes[i].m.fd = (unsigned long)pstBuf->addr[i];
             v4l2_buf.m.planes[i].length = pstBuf->size[i];
         }
     }
@@ -480,11 +443,7 @@
     case MODE_ENCODE:
         switch (t_stJpegConfig.pix.enc_fmt.in_fmt) {
         case V4L2_PIX_FMT_YUV420:
-            t_iPlaneNum = 3;
-            break;
         case V4L2_PIX_FMT_NV16:
-            t_iPlaneNum = 2;
-            break;
         case V4L2_PIX_FMT_YUYV:
         case V4L2_PIX_FMT_RGB565X:
         case V4L2_PIX_FMT_BGR32:
@@ -500,11 +459,7 @@
     case MODE_DECODE:
         switch (t_stJpegConfig.pix.dec_fmt.out_fmt) {
         case V4L2_PIX_FMT_YUV420:
-            t_iPlaneNum = 3;
-            break;
         case V4L2_PIX_FMT_NV16:
-            t_iPlaneNum = 2;
-            break;
         case V4L2_PIX_FMT_YUYV:
         case V4L2_PIX_FMT_RGB565X:
         case V4L2_PIX_FMT_BGR32:
@@ -535,7 +490,7 @@
     return &t_stJpegConfig;
 }
 
-int ExynosJpegBase::getBuf(bool bCreateBuf, struct BUFFER *pstBuf, char **pcBuf, int *iBufSize, int iSize, int iPlaneNum)
+int ExynosJpegBase::getBuf(bool bCreateBuf, struct BUFFER *pstBuf, int *piBuf, int *iBufSize, int iSize, int iPlaneNum)
 {
     if (t_bFlagCreate == false) {
         return ERROR_JPEG_DEVICE_NOT_CREATE_YET;
@@ -545,7 +500,7 @@
         return ERROR_BUF_NOT_SET_YET;
     }
 
-     if ((pcBuf == NULL) || (iSize == 0)) {
+     if ((piBuf == NULL) || (iSize == 0)) {
         return ERROR_BUFFR_IS_NULL;
      }
 
@@ -554,7 +509,7 @@
      }
 
     for (int i=0;i<iPlaneNum;i++) {
-        pcBuf[i] = pstBuf->addr[i];
+        piBuf[i] = pstBuf->addr[i];
     }
 
     for (int i=0;i<iPlaneNum;i++) {
@@ -564,7 +519,7 @@
     return ERROR_NONE;
 }
 
-int ExynosJpegBase::setBuf(struct BUFFER *pstBuf, char **pcBuf, int *iSize, int iPlaneNum)
+int ExynosJpegBase::setBuf(struct BUFFER *pstBuf, int *piBuf, int *iSize, int iPlaneNum)
 {
     if (t_bFlagCreate == false) {
         return ERROR_JPEG_DEVICE_NOT_CREATE_YET;
@@ -575,7 +530,7 @@
     }
 
     for(int i=0;i<iPlaneNum;i++) {
-        if (pcBuf[i] == NULL) {
+        if (piBuf[i] == NULL) {
             memset(pstBuf, 0, sizeof(struct BUFFER));
             return ERROR_BUFFR_IS_NULL;
         }
@@ -583,7 +538,7 @@
             memset(pstBuf, 0, sizeof(struct BUFFER));
             return ERROR_BUFFER_TOO_SMALL;
         }
-        pstBuf->addr[i] = pcBuf[i];
+        pstBuf->addr[i] = piBuf[i];
         pstBuf->size[i] = iSize[i];
     }
 
@@ -640,11 +595,7 @@
 
     switch (iV4l2ColorFormat) {
     case V4L2_PIX_FMT_YUV420:
-        t_iPlaneNum = 3;
-        break;
     case V4L2_PIX_FMT_NV16:
-        t_iPlaneNum = 2;
-        break;
     case V4L2_PIX_FMT_YUYV:
     case V4L2_PIX_FMT_RGB565X:
     case V4L2_PIX_FMT_BGR32:
@@ -721,6 +672,7 @@
     switch (iFormat) {
     case V4L2_PIX_FMT_YUYV:
     case V4L2_PIX_FMT_RGB565X:
+    case V4L2_PIX_FMT_NV16:
         pBufSize[0] = width*height*2;
         pBufSize[1] = 0;
         pBufSize[2] = 0;
@@ -731,15 +683,10 @@
         pBufSize[1] = 0;
         pBufSize[2] = 0;
         break;
-    case V4L2_PIX_FMT_NV16:
-        pBufSize[0] = width*height;
-        pBufSize[1] = width*height;
-        pBufSize[2] = 0;
-        break;
     case V4L2_PIX_FMT_YUV420:
-        pBufSize[0] = width*height;
-        pBufSize[1] = width*height/4;
-        pBufSize[2] = width*height/4;
+        pBufSize[0] = (width*height*3)/2;
+        pBufSize[1] = 0;
+        pBufSize[2] = 0;
         break;
     default:
         pBufSize[0] = width*height*4;
@@ -782,7 +729,7 @@
 
     stBufInfo.numOfPlanes = iInBufs;
     stBufInfo.buf_type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
-    stBufInfo.memory = V4L2_MEMORY_USERPTR;
+    stBufInfo.memory = V4L2_MEMORY_DMABUF;
 
     iRet = t_v4l2Reqbufs(t_iJpegFd, iInBufs, &stBufInfo);
     if (iRet < 0) {
@@ -823,7 +770,7 @@
     stBufInfo.numOfPlanes = iInBufPlanes;
     stBufInfo.buf_type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
 
-    stBufInfo.memory = V4L2_MEMORY_USERPTR;
+    stBufInfo.memory = V4L2_MEMORY_DMABUF;
 
     iRet = t_v4l2Qbuf(t_iJpegFd, &stBufInfo, &t_stJpegInbuf);
     if (iRet < 0) {
diff --git a/libhwjpeg/ExynosJpegDecoder.cpp b/libhwjpeg/ExynosJpegDecoder.cpp
index bb3dbc5..a9e4139 100644
--- a/libhwjpeg/ExynosJpegDecoder.cpp
+++ b/libhwjpeg/ExynosJpegDecoder.cpp
@@ -75,21 +75,21 @@
     return ExynosJpegBase::setJpegConfig(MODE_DECODE, pConfig);
 }
 
-int ExynosJpegDecoder::getInBuf(char **pcBuf, int *piInputSize)
+int ExynosJpegDecoder::getInBuf(int *piBuf, int *piInputSize)
 {
-    return getBuf(t_bFlagCreateInBuf, &t_stJpegInbuf, pcBuf, piInputSize, \
+    return getBuf(t_bFlagCreateInBuf, &t_stJpegInbuf, piBuf, piInputSize, \
                         NUM_JPEG_DEC_IN_PLANES, NUM_JPEG_DEC_IN_PLANES);
 }
 
-int ExynosJpegDecoder::getOutBuf(char **pcBuf, int *piOutputSize, int iSize)
+int ExynosJpegDecoder::getOutBuf(int *piBuf, int *piOutputSize, int iSize)
 {
-    return getBuf(t_bFlagCreateOutBuf, &t_stJpegOutbuf, pcBuf, piOutputSize, iSize, t_iPlaneNum);
+    return getBuf(t_bFlagCreateOutBuf, &t_stJpegOutbuf, piBuf, piOutputSize, iSize, t_iPlaneNum);
 }
 
-int  ExynosJpegDecoder::setInBuf(char *pcBuf, int iSize)
+int  ExynosJpegDecoder::setInBuf(int iBuf, int iSize)
 {
     int iRet = ERROR_NONE;
-    iRet = setBuf(&t_stJpegInbuf, &pcBuf, &iSize, NUM_JPEG_DEC_IN_PLANES);
+    iRet = setBuf(&t_stJpegInbuf, &iBuf, &iSize, NUM_JPEG_DEC_IN_PLANES);
 
     if (iRet == ERROR_NONE) {
         t_bFlagCreateInBuf = true;
@@ -98,10 +98,10 @@
     return iRet;
 }
 
-int  ExynosJpegDecoder::setOutBuf(char **pcBuf, int *iSize)
+int  ExynosJpegDecoder::setOutBuf(int *piBuf, int *iSize)
 {
     int iRet = ERROR_NONE;
-    iRet = setBuf(&t_stJpegOutbuf, pcBuf, iSize, t_iPlaneNum);
+    iRet = setBuf(&t_stJpegOutbuf, piBuf, iSize, t_iPlaneNum);
 
     if (iRet == ERROR_NONE) {
         t_bFlagCreateOutBuf = true;
diff --git a/libhwjpeg/ExynosJpegEncoder.cpp b/libhwjpeg/ExynosJpegEncoder.cpp
index 7aaba12..f99affd 100644
--- a/libhwjpeg/ExynosJpegEncoder.cpp
+++ b/libhwjpeg/ExynosJpegEncoder.cpp
@@ -72,21 +72,21 @@
     return ExynosJpegBase::setJpegConfig(MODE_ENCODE, pConfig);
 }
 
- int ExynosJpegEncoder::getInBuf(char **pcBuf, int *piInputSize, int iSize)
+ int ExynosJpegEncoder::getInBuf(int *piBuf, int *piInputSize, int iSize)
 {
-    return getBuf(t_bFlagCreateInBuf, &t_stJpegInbuf, pcBuf, piInputSize, iSize, t_iPlaneNum);
+    return getBuf(t_bFlagCreateInBuf, &t_stJpegInbuf, piBuf, piInputSize, iSize, t_iPlaneNum);
 }
 
-int ExynosJpegEncoder::getOutBuf(char **pcBuf, int *piOutputSize)
+int ExynosJpegEncoder::getOutBuf(int *piBuf, int *piOutputSize)
 {
-    return getBuf(t_bFlagCreateOutBuf, &t_stJpegOutbuf, pcBuf, piOutputSize, \
+    return getBuf(t_bFlagCreateOutBuf, &t_stJpegOutbuf, piBuf, piOutputSize, \
         NUM_JPEG_ENC_OUT_PLANES, NUM_JPEG_ENC_OUT_PLANES);
 }
 
-int ExynosJpegEncoder::setInBuf(char **pcBuf, int *iSize)
+int ExynosJpegEncoder::setInBuf(int *piBuf, int *iSize)
 {
     int iRet = ERROR_NONE;
-    iRet = setBuf(&t_stJpegInbuf, pcBuf, iSize, t_iPlaneNum);
+    iRet = setBuf(&t_stJpegInbuf, piBuf, iSize, t_iPlaneNum);
 
     if (iRet == ERROR_NONE) {
         t_bFlagCreateInBuf = true;
@@ -95,10 +95,10 @@
     return iRet;
 }
 
-int  ExynosJpegEncoder::setOutBuf(char *pcBuf, int iSize)
+int  ExynosJpegEncoder::setOutBuf(int iBuf, int iSize)
 {
     int iRet = ERROR_NONE;
-    iRet = setBuf(&t_stJpegOutbuf, &pcBuf, &iSize, NUM_JPEG_ENC_OUT_PLANES);
+    iRet = setBuf(&t_stJpegOutbuf, &iBuf, &iSize, NUM_JPEG_ENC_OUT_PLANES);
 
     if (iRet == ERROR_NONE) {
         t_bFlagCreateOutBuf = true;
