Apply tizen buffer pool to decoder 05/182805/3
authorSejun Park <sejun79.park@samsung.com>
Thu, 28 Jun 2018 06:06:25 +0000 (15:06 +0900)
committerSejun Park <sejun79.park@samsung.com>
Thu, 28 Jun 2018 06:42:49 +0000 (15:42 +0900)
Change-Id: I2dbe041a561d2ffabf50b84bb2e738305e8bd67e

configure.ac
openmax/component/video/dec/Exynos_OMX_VdecControl.c
openmax/osal/Exynos_OSAL_Platform_Specific.c
openmax/osal/Makefile.am
packaging/libomxil-e54xx.spec

index 6d68149ce78fb274b2d885cd064cd9db636637c4..b22777d95de461c4fbe6140af61c495a42cd26a9 100755 (executable)
@@ -13,6 +13,10 @@ PKG_CHECK_MODULES(MM_COMMON, mm-common)
 AC_SUBST(MM_COMMON_CFLAGS)
 AC_SUBST(MM_COMMON_LIBS)
 
+PKG_CHECK_MODULES(TBM, libtbm)
+AC_SUBST(TBM_CFLAGS)
+AC_SUBST(TBM_LIBS)
+
 AC_CONFIG_FILES([
     omxil-e54xx.pc
     srp.pc
index 049e85161d70251cf94c41db6b67307f3147936c..96272adadef1b4f41774b84655ef42631ecfe111 100755 (executable)
@@ -40,6 +40,9 @@
 #include "Exynos_OSAL_SharedMemory.h"
 #include "Exynos_OMX_Baseport.h"
 
+#include <tbm_bufmgr.h>
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
 #ifdef USE_PB
 #include "Exynos_OSAL_Platform_Specific.h"
 #endif
@@ -124,22 +127,24 @@ OMX_ERRORTYPE Exynos_OMX_UseBuffer(
                 temp_bufferHeader->nOutputPortIndex = OUTPUT_PORT_INDEX;
 #ifdef TIZEN_FEATURE_E54XX
             if (nPortIndex == OUTPUT_PORT_INDEX) {
-                MMVideoBuffer * pSlpOutBuf = (MMVideoBuffer *)pBuffer;
+                tbm_bo bo[2];
+                tbm_surface_h surface = (tbm_surface_h)pBuffer;
+                bo[0] = tbm_surface_internal_get_bo(surface, 0);
+                bo[1] = tbm_surface_internal_get_bo(surface, 1);
 
-                Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "fd[0] =%d, fd[1] =%d, vaddr[0] =%p, vaddr[1] = %p, y_size=%d, uv_size=%d\n",
-                        pSlpOutBuf->handle.dmabuf_fd[0], pSlpOutBuf->handle.dmabuf_fd[1], pSlpOutBuf->data[0], pSlpOutBuf->data[1],
-                        pSlpOutBuf->size[0],pSlpOutBuf->size[1]);
+                Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "fd[0] =%p, fd[1] =%p",
+                        bo[0], bo[1]);
 
-                pExynosPort->extendBufferHeader[i].buf_fd[0] = pSlpOutBuf->handle.dmabuf_fd[0];
-                pExynosPort->extendBufferHeader[i].buf_fd[1] = pSlpOutBuf->handle.dmabuf_fd[1];
+                pExynosPort->extendBufferHeader[i].buf_fd[0] = tbm_bo_get_handle (bo[0], TBM_DEVICE_MM).u32;;
+                pExynosPort->extendBufferHeader[i].buf_fd[1] = tbm_bo_get_handle (bo[1], TBM_DEVICE_MM).u32;;
                 pExynosPort->extendBufferHeader[i].buf_fd[2] = 0;
 
-                pExynosPort->extendBufferHeader[i].pYUVBuf[0] = pSlpOutBuf->data[0];
-                pExynosPort->extendBufferHeader[i].pYUVBuf[1] = pSlpOutBuf->data[1];
+                pExynosPort->extendBufferHeader[i].pYUVBuf[0] = tbm_bo_get_handle (bo[0], TBM_DEVICE_CPU).ptr;;
+                pExynosPort->extendBufferHeader[i].pYUVBuf[1] = tbm_bo_get_handle (bo[1], TBM_DEVICE_CPU).ptr;;
                 pExynosPort->extendBufferHeader[i].pYUVBuf[2] = NULL;
 
-                pExynosPort->extendBufferHeader[i].tbm_bo[0] = pSlpOutBuf->handle.bo[0];
-                pExynosPort->extendBufferHeader[i].tbm_bo[1] = pSlpOutBuf->handle.bo[1];
+                pExynosPort->extendBufferHeader[i].tbm_bo[0] = bo[0];
+                pExynosPort->extendBufferHeader[i].tbm_bo[1] = bo[1];
                 pExynosPort->extendBufferHeader[i].tbm_bo[2] = NULL;
 
                 Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "\nPlatformBuffer: buf %d pYUVBuf[0]:0x%x , pYUVBuf[1]:0x%x ",
@@ -147,8 +152,9 @@ OMX_ERRORTYPE Exynos_OMX_UseBuffer(
             } else if ((pVideoDec->bDRMPlayerMode == OMX_TRUE) && (nPortIndex == INPUT_PORT_INDEX)) {
                 pExynosPort->extendBufferHeader[i].buf_fd[0] = (int)pBuffer;
             } else if(nPortIndex == INPUT_PORT_INDEX) {
-                MMVideoBuffer * pSlpOutBuf = (MMVideoBuffer *)pBuffer;
-                temp_bufferHeader->pBuffer  = pSlpOutBuf->data[0];
+                //tbm_surface_h surface = (tbm_surface_h) pBuffer;
+                //temp_bufferHeader->pBuffer  = tbm_bo_get_handle (tbm_surface_internal_get_bo(surface, 0), TBM_DEVICE_CPU).ptr;;
+                temp_bufferHeader->pBuffer  = pBuffer;
             }
 #endif
             *ppBufferHdr = temp_bufferHeader;
index f91e901628008ca9729bf33b32918d2104fb43af..1fdad234dd18ef0bfbc1f12986d71d6164acd1b9 100755 (executable)
@@ -30,6 +30,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <mm_types.h>
+#include <tbm_bufmgr.h>
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
 
 #include "Exynos_OSAL_Semaphore.h"
 #include "Exynos_OMX_Baseport.h"
@@ -154,24 +157,27 @@ OMX_ERRORTYPE Exynos_OSAL_LockPB(
 
     OMX_ERRORTYPE ret = OMX_ErrorNone;
 #ifdef TIZEN_FEATURE_E54XX
-
+    tbm_bo bo[2];
     ExynosVideoPlane *vplanes = (ExynosVideoPlane *) planes;
-    MMVideoBuffer *buffer = (MMVideoBuffer *) pBuffer;
+    tbm_surface_h surface = (tbm_surface_h) pBuffer;
 
+    bo[0] = tbm_surface_internal_get_bo(surface, 0);
+    bo[1] = tbm_surface_internal_get_bo(surface, 1);
 
-    vplanes[0].fd = buffer->handle.dmabuf_fd[0];
+    vplanes[0].fd = tbm_bo_get_handle (bo[0], TBM_DEVICE_MM).u32;;
     vplanes[0].offset = 0;
-    vplanes[1].fd = buffer->handle.dmabuf_fd[1];
+
+    vplanes[1].fd = tbm_bo_get_handle (bo, TBM_DEVICE_MM).u32;
     vplanes[1].offset = 0; //priv_hnd->uoffset;
     vplanes[2].fd = 0; //priv_hnd->v_fd;
     vplanes[2].offset = 0; //priv_hnd->voffset;
 
-    vplanes[0].addr = buffer->data[0]; //vaddr[0];
-    vplanes[1].addr = buffer->data[1]; //vaddr[1];
+    vplanes[0].addr = tbm_bo_get_handle (bo[0], TBM_DEVICE_CPU).ptr; //vaddr[0];
+    vplanes[1].addr = tbm_bo_get_handle (bo[1], TBM_DEVICE_CPU).ptr;
     vplanes[2].addr = NULL; //vaddr[2];
 
-    Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "Exynos_OSAL_LockPB:fd[0](%d)  fd[1](%d)  a[0](%p)  a[1](%p)", 
-        buffer->handle.dmabuf_fd[0], buffer->handle.dmabuf_fd[1], buffer->data[0], buffer->data[1]);
+    Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "Exynos_OSAL_LockPB:fd[0](%d)  fd[1](%d)  a[0](%p)  a[1](%p)",
+        vplanes[0].fd, vplanes[1].fd, vplanes[0].addr, vplanes[1].addr);
 #else
     android_native_buffer_t *pANB = (android_native_buffer_t *) pBuffer;
 
@@ -194,76 +200,7 @@ OMX_ERRORTYPE Exynos_OSAL_UnlockPB(OMX_IN OMX_PTR pBuffer, EXYNOS_OMX_DATA *pDat
 
     OMX_ERRORTYPE ret = OMX_ErrorNone;
 #ifdef TIZEN_FEATURE_E54XX
-    MMVideoBuffer *pSlpOutBuf = NULL;
-    DECODE_CODEC_EXTRA_BUFFERINFO *pBufferInfo = NULL;
-
-    pSlpOutBuf = (MMVideoBuffer *)pBuffer;
-    if (pSlpOutBuf == NULL) {
-      Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "pBuffer is NULL!");
-      ret = OMX_ErrorInsufficientResources;
-      goto EXIT;
-    }
-    memset(pSlpOutBuf, 0, sizeof(MMVideoBuffer));
-
-    pBufferInfo = (DECODE_CODEC_EXTRA_BUFFERINFO *)pData->extInfo;
-
-    if (pExynosPort->cropRectangle.nWidth != 0 && pExynosPort->cropRectangle.nHeight != 0) {
-        /* modify for h264 trim */
-        Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "this has cropRectangle(h264).crop.nWidth = %d, crop.nHeight = %d",
-            pExynosPort->cropRectangle.nWidth, pExynosPort->cropRectangle.nWidth);
-        pSlpOutBuf->width[0] = pExynosPort->cropRectangle.nWidth;
-        pSlpOutBuf->width[1] = pExynosPort->cropRectangle.nWidth;
-        pSlpOutBuf->height[0] = pExynosPort->cropRectangle.nHeight;
-        pSlpOutBuf->height[1] = pExynosPort->cropRectangle.nHeight/2;
-    } else {
-        pSlpOutBuf->width[0] = pBufferInfo->imageWidth;
-        pSlpOutBuf->width[1] = pBufferInfo->imageWidth;
-        pSlpOutBuf->height[0] = pBufferInfo->imageHeight;
-        pSlpOutBuf->height[1] = pBufferInfo->imageHeight/2;
-    }
-    pSlpOutBuf->stride_width[0] = ALIGN(pBufferInfo->imageWidth, S5P_FIMV_NV12M_HALIGN);
-    pSlpOutBuf->stride_width[1] = ALIGN(pBufferInfo->imageWidth, S5P_FIMV_NV12M_HALIGN);
-    pSlpOutBuf->stride_height[0] = ALIGN(pBufferInfo->imageHeight, S5P_FIMV_NV12M_HALIGN);
-    pSlpOutBuf->stride_height[1] = ALIGN(pBufferInfo->imageHeight/2, S5P_FIMV_NV12M_HALIGN);
-
-
-/*
-    if (pVideoDec->bDRMPlayerMode == OMX_TRUE) {
-        pSlpOutBuf->a[0] = 0;
-        pSlpOutBuf->a[1] = 0;
-    } else {
-*/
-        pSlpOutBuf->data[0] = pData->buffer.multiPlaneBuffer.dataBuffer[0];
-        pSlpOutBuf->data[1] = pData->buffer.multiPlaneBuffer.dataBuffer[1];
-//    }
-    pSlpOutBuf->data[2] = 0; /* omx do not use this plane */
-
-    pSlpOutBuf->handle.dmabuf_fd[0] = pData->buffer.multiPlaneBuffer.fd[0];
-    pSlpOutBuf->handle.dmabuf_fd[1] = pData->buffer.multiPlaneBuffer.fd[1];
-    pSlpOutBuf->handle.dmabuf_fd[2] = 0;
-
-    pSlpOutBuf->handle.bo[0] = pData->buffer.multiPlaneBuffer.tbm_bo[0];
-    pSlpOutBuf->handle.bo[1] = pData->buffer.multiPlaneBuffer.tbm_bo[1];
-    pSlpOutBuf->handle.bo[2] = NULL;
-
-    if(pExynosInPort->portDefinition.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC)
-    {
-        pSlpOutBuf->size[0] = CHOOSE_MAX_SIZE(calc_plane(pBufferInfo->imageWidth,pBufferInfo->imageHeight), new_calc_plane(pBufferInfo->imageWidth,pBufferInfo->imageHeight));
-        pSlpOutBuf->size[1] = CHOOSE_MAX_SIZE(calc_plane(pBufferInfo->imageWidth,(pBufferInfo->imageHeight) / 2), new_calc_plane(pBufferInfo->imageWidth,(pBufferInfo->imageHeight) / 2));
-        Exynos_OSAL_Log(EXYNOS_LOG_TRACE,"H264 foramt and y_size=%d, uv_size=%d",pSlpOutBuf->size[0],pSlpOutBuf->size[1]);
-    } else {
-        pSlpOutBuf->size[0]= CHOOSE_MAX_SIZE(calc_yplane(pBufferInfo->imageWidth,pBufferInfo->imageHeight), new_calc_yplane(pBufferInfo->imageWidth,pBufferInfo->imageHeight));
-        pSlpOutBuf->size[1] = CHOOSE_MAX_SIZE(calc_uvplane(pBufferInfo->imageWidth,(pBufferInfo->imageHeight) / 2), new_calc_uvplane(pBufferInfo->imageWidth,(pBufferInfo->imageHeight) / 2));
-        Exynos_OSAL_Log(EXYNOS_LOG_TRACE,"foramt is %d, and y_size=%d, uv_size=%d",pExynosInPort->portDefinition.format.video.eCompressionFormat ,
-                        pSlpOutBuf->size[0],pSlpOutBuf->size[1]);
-    }
-
-
-    pSlpOutBuf->type = MM_VIDEO_BUFFER_TYPE_TBM_BO; /* use fd mode */
-    pSlpOutBuf->handle_num = 2;
-    pSlpOutBuf->plane_num = 2;
-
-    Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "fd (%d, %d, %d) received from MFC", pSlpOutBuf->handle.dmabuf_fd[0], pSlpOutBuf->handle.dmabuf_fd[1], pSlpOutBuf->handle.dmabuf_fd[2]);
+    Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "surface %p received from MFC", pBuffer);
 #else
     android_native_buffer_t *pANB = (android_native_buffer_t *) pBuffer;
 
index 815b1d6a43ed6e97070ed4acefcd46937d1dea8d..6ecb40d21690657901eef6d18e9afd179f4e3120 100755 (executable)
@@ -35,7 +35,7 @@ libExynosOMX_OSAL_la_CFLAGS = -I$(top_srcdir)/exynos4/include \
                               -I$(top_srcdir)/exynos4/libcodec/video/v4l2/include
 
 libExynosOMX_OSAL_la_CFLAGS += $(MM_COMMON_CFLAGS)
-libExynosOMX_OSAL_la_LIBADD += $(MM_COMMON_LIBS)
+libExynosOMX_OSAL_la_LIBADD += $(MM_COMMON_LIBS) $(TBM_LIBS)
 
 if USE_DLOG
 libExynosOMX_OSAL_la_CFLAGS += $(DLOG_CFLAGS) -DUSE_DLOG
index 0d29cff9c6516d9f111b4b5c874e574d675927ee..c7bab363d367d13effe50d7aeb01721bcda6eb0f 100755 (executable)
@@ -1,6 +1,6 @@
 Name: libomxil-e54xx
 Summary: OpenMAX IL for e54xx
-Version: 1.0.5
+Version: 1.1.0
 License: Apache-2.0
 Group: Development/Libraries
 Release: 0
@@ -10,6 +10,7 @@ Requires(postun): /sbin/ldconfig
 BuildRequires: kernel-headers
 BuildRequires: pkgconfig(dlog)
 BuildRequires: pkgconfig(mm-common)
+BuildRequires: pkgconfig(libtbm)
 
 ExclusiveArch: %arm aarch64