MFC_OUTPUT_BUFFER_PLANE, pDstInputData->bufferHeader);
if (codecReturn != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
+ if (codecReturn != VIDEO_ERROR_WRONGBUFFERSIZE) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
+ }
goto EXIT;
}
Mpeg4CodecStart(pOMXComponent, OUTPUT_PORT_INDEX);
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "timestamp %lld us (%.2f secs), indexTimestamp: %d, nFlags: 0x%x", pDstOutputData->timeStamp, pDstOutputData->timeStamp / 1E6, indexTimestamp, pDstOutputData->nFlags);
}
- if ((displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
- (displayStatus == VIDEO_FRAME_STATUS_DECODING_FINISHED) ||
+ if ((displayStatus == VIDEO_FRAME_STATUS_DECODING_FINISHED) ||
((pDstOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "displayStatus:%d, nFlags0x%x", displayStatus, pDstOutputData->nFlags);
pDstOutputData->remainDataLen = 0;
pVideoDec->exynos_codec_getCodecInputPrivateData = &GetCodecInputPrivateData;
pVideoDec->exynos_codec_getCodecOutputPrivateData = &GetCodecOutputPrivateData;
- pVideoDec->exynos_codec_reconfigAllBuffers = &Mpeg4CodecCheckResolutionChange;
+ pVideoDec->exynos_codec_reconfigAllBuffers = &Mpeg4CodecReconfigAllBuffers;
pVideoDec->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoDec->hSharedMemory == NULL) {
(unsigned int *)nAllocLen, (unsigned int *)dataLen,
MFC_OUTPUT_BUFFER_PLANE, pDstInputData->bufferHeader);
if (codecReturn != VIDEO_ERROR_NONE) {
- Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
+ if (codecReturn != VIDEO_ERROR_WRONGBUFFERSIZE) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
+ }
goto EXIT;
}
VP8CodecStart(pOMXComponent, OUTPUT_PORT_INDEX);
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "timestamp %lld us (%.2f secs), indexTimestamp: %d, nFlags: 0x%x", pDstOutputData->timeStamp, pDstOutputData->timeStamp / 1E6, indexTimestamp, pDstOutputData->nFlags);
}
- if ((displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
- (displayStatus == VIDEO_FRAME_STATUS_DECODING_FINISHED) ||
+ if ((displayStatus == VIDEO_FRAME_STATUS_DECODING_FINISHED) ||
((pDstOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "displayStatus:%d, nFlags0x%x", displayStatus, pDstOutputData->nFlags);
pDstOutputData->remainDataLen = 0;
/*************/
/* TBD */
/*************/
+ ExynosVideoErrorType codecReturn = VIDEO_ERROR_NONE;
ExynosVideoPlane plane;
for (i = 0; i < pExynosOutputPort->portDefinition.nBufferCountActual; i++) {
plane.addr = pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer;
ret = OMX_ErrorInsufficientResources;
goto EXIT;
}
- pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)&pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer,
+ codecReturn = pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)&pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer,
(unsigned int *)dataLen, MFC_OUTPUT_BUFFER_PLANE, NULL);
+ if (codecReturn != VIDEO_ERROR_NONE) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Output buffer that has been entered is invalid.");
+ ret = OMX_ErrorUndefined;
+ goto EXIT;
+ }
}
}
}
if (pH264Enc->hMFCH264Handle.bConfiguredMFCDst == OMX_FALSE) {
ret = H264CodecDstSetup(pOMXComponent);
+ if (ret != OMX_ErrorNone) {
+ goto EXIT;
+ }
}
if (pVideoEnc->configChange == OMX_TRUE) {
(unsigned int *)dataLen, MFC_OUTPUT_BUFFER_PLANE, NULL);
}
} else if ((pExynosOutputPort->bufferProcessType & BUFFER_SHARE) == BUFFER_SHARE) {
- /* Register input buffer */
+ /* Register output buffer */
/*************/
/* TBD */
/*************/
+ ExynosVideoErrorType codecReturn = VIDEO_ERROR_NONE;
ExynosVideoPlane plane;
for (i = 0; i < pExynosOutputPort->portDefinition.nBufferCountActual; i++) {
plane.addr = pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer;
ret = OMX_ErrorInsufficientResources;
goto EXIT;
}
- pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)&pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer,
+ codecReturn = pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)&pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer,
(unsigned int *)dataLen, MFC_OUTPUT_BUFFER_PLANE, NULL);
+ if (codecReturn != VIDEO_ERROR_NONE) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Output buffer that has been entered is invalid.");
+ ret = OMX_ErrorUndefined;
+ goto EXIT;
+ }
}
}
}
if (pMpeg4Enc->hMFCMpeg4Handle.bConfiguredMFCDst == OMX_FALSE) {
ret = Mpeg4CodecDstSetup(pOMXComponent);
+ if (ret != OMX_ErrorNone) {
+ goto EXIT;
+ }
}
if (pVideoEnc->configChange == OMX_TRUE) {
for (i = 0; i < MAX_BUFFER_REF; i++) {
if (phREF->SharedBuffer[i].BufferFd == BufferFd) {
- ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle);
- ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle1);
- ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle2);
+ if (phREF->SharedBuffer[i].BufferFd > -1)
+ ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle);
+ if (phREF->SharedBuffer[i].BufferFd1 > -1)
+ ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle1);
+ if (phREF->SharedBuffer[i].BufferFd2 > -1)
+ ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle2);
phREF->SharedBuffer[i].cnt--;
if (phREF->SharedBuffer[i].cnt == 0) {
phREF->SharedBuffer[i].BufferFd = -1;
namespace android {
+int32_t SUPPORT_THUMBNAIL_REAR_SIZE[3][2] =
+{
+ {160, 120},
+ {160, 90},
+ {144, 96}
+};
+
+int32_t SUPPORT_THUMBNAIL_FRONT_SIZE[4][2] =
+{
+ {160, 120},
+ {160, 160},
+ {160, 90},
+ {144, 96}
+};
+
class Sensor {
public:
/**
// android.jpeg
- static const int32_t jpegThumbnailSizes[] = {
- 160, 120,
- 160, 160,
- 160, 90,
- 144, 96,
- 0, 0
- };
+ size_t sizeOfThumbnailList = (cameraId) ? sizeof(SUPPORT_THUMBNAIL_FRONT_SIZE) /
+ sizeof(int32_t) : sizeof(SUPPORT_THUMBNAIL_REAR_SIZE) / sizeof(int32_t);
+
+ // Copy sizes from front or back camera
+ int32_t jpegThumbnailSizes[sizeOfThumbnailList + 2];
+
+ if (cameraId) {
+ memcpy(jpegThumbnailSizes, SUPPORT_THUMBNAIL_FRONT_SIZE,
+ sizeof(int32_t) * sizeOfThumbnailList);
+ } else {
+ memcpy(jpegThumbnailSizes, SUPPORT_THUMBNAIL_REAR_SIZE,
+ sizeof(int32_t) * sizeOfThumbnailList);
+ }
+
+ // Always include 0,0 size in list
+ jpegThumbnailSizes[sizeOfThumbnailList] = 0;
+ jpegThumbnailSizes[sizeOfThumbnailList + 1] = 0;
ADD_OR_SIZE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t));
*
*/
+#ifndef EXYNOS_CAMERA_2_H
+#define EXYNOS_CAMERA_2_H
+
#include <hardware/camera2.h>
#include <camera/Camera.h>
#include <camera/CameraParameters.h>
namespace android {
+extern int32_t SUPPORT_THUMBNAIL_REAR_SIZE[3][2];
+extern int32_t SUPPORT_THUMBNAIL_FRONT_SIZE[4][2];
+
struct ExynosCamera2Info
{
public:
int m_cameraId;
};
}
+
+#endif
//REAR Camera
if(this->getCameraId() == 0) {
- sizeOfSupportList = sizeof(SUPPORT_THUMBNAIL_REAR_SIZE) / (sizeof(int)*2);
+ sizeOfSupportList = sizeof(SUPPORT_THUMBNAIL_REAR_SIZE) / (sizeof(int32_t)*2);
for(int i = 0; i < sizeOfSupportList; i++) {
if((SUPPORT_THUMBNAIL_REAR_SIZE[i][0] == w) &&(SUPPORT_THUMBNAIL_REAR_SIZE[i][1] == h))
}
else {
- sizeOfSupportList = sizeof(SUPPORT_THUMBNAIL_FRONT_SIZE) / (sizeof(int)*2);
+ sizeOfSupportList = sizeof(SUPPORT_THUMBNAIL_FRONT_SIZE) / (sizeof(int32_t)*2);
for(int i = 0; i < sizeOfSupportList; i++) {
if((SUPPORT_THUMBNAIL_FRONT_SIZE[i][0] == w) &&(SUPPORT_THUMBNAIL_FRONT_SIZE[i][1] == h))
ISS_SUB_END
};
-int SUPPORT_THUMBNAIL_REAR_SIZE[][2] =
-{
- {160, 120},
- {160, 90},
- {144, 96}
-};
-
-int SUPPORT_THUMBNAIL_FRONT_SIZE[][2] =
-{
- {160, 120},
- {160, 160},
- {160, 90},
- {144, 96}
-};
-
enum is_set_flash_command_state {
IS_FLASH_STATE_NONE = 0,
IS_FLASH_STATE_ON = 1,