Add tag INDEX_AFTER_EOS = 0xE05.
In the case of after EOS,
1. MFC DD will return INDEX_AFTER_EOS tag.
2. OpenMAX will detect INDEX_AFTER_EOS tag.
3. OpenMAX will return buffer(with timestame = 0x0 and flags = 0x0).
< Without patch >
Sometimes, OpenMAX will return EOS flag twice when using ACodec.
Depends On
- Change I57265bc8: MFC: MEDIA: EXYNOS: Change default tag of EOS
Change-Id: I5090887eb626fba14d5cba946ff71e3709ec4cfe
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
- pDstOutputData->timeStamp = pExynosComponent->timeStamp[pH264Dec->hMFCH264Handle.outputIndexTimestamp];
- pDstOutputData->nFlags = pExynosComponent->nFlags[pH264Dec->hMFCH264Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ if (indexTimestamp == INDEX_AFTER_EOS) {
+ pDstOutputData->timeStamp = 0x00;
+ pDstOutputData->nFlags = 0x00;
+ } else {
+ pDstOutputData->timeStamp = pExynosComponent->timeStamp[pH264Dec->hMFCH264Handle.outputIndexTimestamp];
+ pDstOutputData->nFlags = pExynosComponent->nFlags[pH264Dec->hMFCH264Handle.outputIndexTimestamp];
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ }
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
- pDstOutputData->timeStamp = pExynosComponent->timeStamp[pMpeg2Dec->hMFCMpeg2Handle.outputIndexTimestamp];
- pDstOutputData->nFlags = pExynosComponent->nFlags[pMpeg2Dec->hMFCMpeg2Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ if (indexTimestamp == INDEX_AFTER_EOS) {
+ pDstOutputData->timeStamp = 0x00;
+ pDstOutputData->nFlags = 0x00;
+ } else {
+ pDstOutputData->timeStamp = pExynosComponent->timeStamp[pMpeg2Dec->hMFCMpeg2Handle.outputIndexTimestamp];
+ pDstOutputData->nFlags = pExynosComponent->nFlags[pMpeg2Dec->hMFCMpeg2Handle.outputIndexTimestamp];
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ }
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
- pDstOutputData->timeStamp = pExynosComponent->timeStamp[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
- pDstOutputData->nFlags = pExynosComponent->nFlags[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ if (indexTimestamp == INDEX_AFTER_EOS) {
+ pDstOutputData->timeStamp = 0x00;
+ pDstOutputData->nFlags = 0x00;
+ } else {
+ pDstOutputData->timeStamp = pExynosComponent->timeStamp[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
+ pDstOutputData->nFlags = pExynosComponent->nFlags[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ }
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
- pDstOutputData->timeStamp = pExynosComponent->timeStamp[pWmvDec->hMFCWmvHandle.outputIndexTimestamp];
- pDstOutputData->nFlags = pExynosComponent->nFlags[pWmvDec->hMFCWmvHandle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ if (indexTimestamp == INDEX_AFTER_EOS) {
+ pDstOutputData->timeStamp = 0x00;
+ pDstOutputData->nFlags = 0x00;
+ } else {
+ pDstOutputData->timeStamp = pExynosComponent->timeStamp[pWmvDec->hMFCWmvHandle.outputIndexTimestamp];
+ pDstOutputData->nFlags = pExynosComponent->nFlags[pWmvDec->hMFCWmvHandle.outputIndexTimestamp];
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ }
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
- pDstOutputData->timeStamp = pExynosComponent->timeStamp[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
- pDstOutputData->nFlags = pExynosComponent->nFlags[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ if (indexTimestamp == INDEX_AFTER_EOS) {
+ pDstOutputData->timeStamp = 0x00;
+ pDstOutputData->nFlags = 0x00;
+ } else {
+ pDstOutputData->timeStamp = pExynosComponent->timeStamp[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
+ pDstOutputData->nFlags = pExynosComponent->nFlags[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
+ }
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
#define MAX_BUFFER_PLANE 3
+#define INDEX_AFTER_EOS 0xE05
+
#define EXYNOS_OMX_INSTALL_PATH "/system/lib/omx/"
typedef enum _EXYNOS_CODEC_TYPE