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;
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];
}
}
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:
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:
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;
return ERROR_BUF_NOT_SET_YET;
}
- if ((pcBuf == NULL) || (iSize == 0)) {
+ if ((piBuf == NULL) || (iSize == 0)) {
return ERROR_BUFFR_IS_NULL;
}
}
for (int i=0;i<iPlaneNum;i++) {
- pcBuf[i] = pstBuf->addr[i];
+ piBuf[i] = pstBuf->addr[i];
}
for (int i=0;i<iPlaneNum;i++) {
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;
}
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;
}
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];
}
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:
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;
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;
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) {
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) {
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;
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;
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;
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;