Initialize buffer manager only once 63/169863/1 accepted/tizen/unified/20180220.064115 submit/tizen/20180219.073606
authorSejun Park <sejun79.park@samsung.com>
Wed, 7 Feb 2018 01:13:27 +0000 (10:13 +0900)
committerSejun Park <sejun79.park@samsung.com>
Mon, 12 Feb 2018 01:49:11 +0000 (10:49 +0900)
Change-Id: Icab3fd0ad3637de634e7d69ed61bb3f90ef6c9da

packaging/nx-video-api.spec
src/nx_video_alloc.c
src/nx_video_alloc.h
src/nx_video_dec.c

index ff97136..5410dad 100644 (file)
@@ -1,5 +1,5 @@
 Name:    nx-video-api
-Version: 1.0.4
+Version: 1.0.5
 Release: 0
 License: LGPLv2+
 Summary: Nexell video APIs
index 193239e..330e58d 100644 (file)
@@ -220,7 +220,7 @@ NX_FreeMemory (NX_MEMORY_INFO * pMem)
 //                      3 Plane : I420
 //
 NX_VID_MEMORY_INFO *
-NX_AllocateVideoMemory (int width, int height, int32_t planes, uint32_t format,
+NX_AllocateVideoMemory (void *bufmgr, int width, int height, int32_t planes, uint32_t format,
     int align)
 {
   int gemFd[NX_MAX_PLANES] = { 0, };
@@ -358,13 +358,6 @@ NX_AllocateVideoMemory (int width, int height, int32_t planes, uint32_t format,
   if (!pVidMem)
     goto ErrorExit;
 
-#ifdef TIZEN_FEATURE_ARTIK530
-  pVidMem->bufmgr = tbm_bufmgr_init (drmFd);
-  _D ("bufmgr = %p", pVidMem->bufmgr);
-  if (!pVidMem->bufmgr)
-    goto ErrorExit;
-#endif
-
   pVidMem->width = width;
   pVidMem->height = height;
   pVidMem->align = align;
@@ -377,7 +370,7 @@ NX_AllocateVideoMemory (int width, int height, int32_t planes, uint32_t format,
     pVidMem->size[i] = size[i];
     pVidMem->stride[i] = stride[i];
 #ifdef TIZEN_FEATURE_ARTIK530
-    pVidMem->bo[i] = tbm_bo_import_fd (pVidMem->bufmgr, dmaFd[i]);
+    pVidMem->bo[i] = tbm_bo_import_fd (bufmgr, dmaFd[i]);
     _D ("bo[%d] = %p", i, pVidMem->bo[i]);
     if (!pVidMem->bo[i])
       goto alloc_bo_fail;
@@ -403,10 +396,6 @@ ErrorExit:
     }
   }
   if (pVidMem) {
-#ifdef TIZEN_FEATURE_ARTIK530
-    if (pVidMem->bufmgr)
-      tbm_bufmgr_deinit (pVidMem->bufmgr);
-#endif
     free(pVidMem);
   }
   if (drmFd > 0)
@@ -431,10 +420,6 @@ NX_FreeVideoMemory (NX_VID_MEMORY_INFO * pMem)
       free_gem (pMem->drmFd, pMem->gemFd[i]);
       close (pMem->dmaFd[i]);
     }
-#ifdef TIZEN_FEATURE_ARTIK530
-    if (pMem->bufmgr)
-      tbm_bufmgr_deinit (pMem->bufmgr);
-#endif
     close (pMem->drmFd);
     free (pMem);
   }
index 1049437..d1fcc70 100644 (file)
@@ -52,7 +52,6 @@ extern "C"
     void *pBuffer[NX_MAX_PLANES];       //      virtual address.
     uint32_t reserved[NX_MAX_PLANES];   //      for debugging or future user.
 #ifdef TIZEN_FEATURE_ARTIK530
-    void *bufmgr;
     void *bo[NX_MAX_PLANES]; // tbm bo
 #endif
   } NX_VID_MEMORY_INFO, *NX_VID_MEMORY_HANDLE;
@@ -62,7 +61,7 @@ extern "C"
   void NX_FreeMemory (NX_MEMORY_INFO * pMem);
 
 //      Video Specific Allocator Wrapper
-  NX_VID_MEMORY_INFO *NX_AllocateVideoMemory (int width, int height,
+  NX_VID_MEMORY_INFO *NX_AllocateVideoMemory (void *bufmgr, int width, int height,
       int32_t planes, uint32_t format, int align);
   void NX_FreeVideoMemory (NX_VID_MEMORY_INFO * pMem);
 
index 0dddd6d..9acaebf 100644 (file)
@@ -65,6 +65,11 @@ struct NX_V4L2DEC_INFO
 
   /* For VC1 */
   int32_t iInterlace;
+
+#ifdef TIZEN_FEATURE_ARTIK530
+  /* buffer manager */
+  void *bufmgr;
+#endif
 };
 
 
@@ -647,6 +652,10 @@ NX_V4l2DecClose (NX_V4L2DEC_HANDLE hDec)
       }
     }
   }
+#ifdef TIZEN_FEATURE_ARTIK530
+    if (hDec->bufmgr)
+      tbm_bufmgr_deinit (hDec->bufmgr);
+#endif
 
   free (hDec);
 
@@ -900,13 +909,21 @@ NX_V4l2DecInit (NX_V4L2DEC_HANDLE hDec, NX_V4L2DEC_SEQ_IN * pSeqIn)
     buf.length = pSeqIn->imgPlaneNum;
     buf.memory = V4L2_MEMORY_DMABUF;
 
+#ifdef TIZEN_FEATURE_ARTIK530
+  hDec->bufmgr = tbm_bufmgr_init (-1);
+  _D ("bufmgr = %p", hDec->bufmgr);
+  if (!hDec->bufmgr) {
+    _E ("failed to initialize tbm_init");
+    return -1;
+  }
+#endif
     /* Allocate Buffer(Internal or External) */
     for (i = 0; i < imgBuffCnt; i++) {
       if (true == hDec->useExternalFrameBuffer) {
         hDec->hImage[i] = pSeqIn->pMemHandle[i];
       } else {
         hDec->hImage[i] =
-            NX_AllocateVideoMemory (pSeqIn->width, pSeqIn->height,
+            NX_AllocateVideoMemory (hDec->bufmgr, pSeqIn->width, pSeqIn->height,
             pSeqIn->imgPlaneNum, pSeqIn->imgFormat, 4096);
         if (hDec->hImage[i] == NULL) {
           _E ("Failed to allocate image buffer(%d, %d, %d)\n", i,