3b6a0425058bfe3f1818e85e4fed63a0d092a562
[platform/adaptation/nexell/nx-video-api.git] / src / nx_video_alloc.h
1 /*
2  * Copyright (C) 2016  Nexell Co., Ltd.
3  * Author: SeongO, Park <ray@nexell.co.kr>
4  */
5
6 #ifndef __NX_VIDEO_ALLOC_H__
7 #define __NX_VIDEO_ALLOC_H__
8
9
10 #ifdef  __cplusplus
11 extern "C"
12 {
13 #endif
14
15 #include <stdint.h>
16 #include <tbm_surface.h>
17 #include <tbm_surface_internal.h>
18
19 #define NX_MAX_PLANES   4
20
21 //
22 //      Nexell Private Memory Type
23 //
24   typedef struct
25   {
26     int drmFd;                  //      DRM Device Handle
27     int dmaFd;                  //      DMA Memory Handle
28     int gemFd;                  //      GEM Handle
29     uint32_t flink;             //      flink name
30     int32_t size;               //      Allocate Size
31     int32_t align;              //      Start Address Align
32     void *pBuffer;              //      Virtual Address Pointer
33     uint32_t reserved;
34   } NX_MEMORY_INFO, *NX_MEMORY_HANDLE;
35
36
37 //
38 //      Nexell Private Video Memory Type
39 //
40   typedef struct
41   {
42     int32_t width;              //      Video Image's Width
43     int32_t height;             //      Video Image's Height
44     int32_t align;              //      Start address align
45     int32_t planes;             //      Number of valid planes
46     uint32_t format;            //      Pixel Format(N/A)
47
48     int drmFd;                  //      Drm Device Handle
49     int dmaFd[NX_MAX_PLANES];   //      DMA memory Handle
50     int gemFd[NX_MAX_PLANES];   //      GEM Handle
51     uint32_t flink[NX_MAX_PLANES];      //      flink name
52     int32_t size[NX_MAX_PLANES];        //      Each plane's size.
53     int32_t stride[NX_MAX_PLANES];      //      Each plane's stride.
54     void *pBuffer[NX_MAX_PLANES];       //      virtual address.
55     uint32_t reserved[NX_MAX_PLANES];   //      for debugging or future user.
56 #ifdef TIZEN_FEATURE_ARTIK530
57     void *bo[NX_MAX_PLANES];   // tbm bo
58     tbm_surface_h surface;
59 #endif
60   } NX_VID_MEMORY_INFO, *NX_VID_MEMORY_HANDLE;
61
62 //      Nexell Private Memory Allocator
63   NX_MEMORY_INFO *NX_AllocateMemory (int size, int align);
64   void NX_FreeMemory (NX_MEMORY_INFO * pMem);
65
66 //      Video Specific Allocator Wrapper
67   NX_VID_MEMORY_INFO *NX_AllocateVideoMemory (void *bufmgr, int width, int height,
68       int32_t planes, uint32_t format, int align);
69   void NX_FreeVideoMemory (NX_VID_MEMORY_INFO * pMem);
70
71   int NX_MapMemory (NX_MEMORY_INFO * pMem);
72   int NX_UnmapMemory (NX_MEMORY_INFO * pMem);
73
74   int NX_MapVideoMemory (NX_VID_MEMORY_INFO * pMem);
75   int NX_UnmapVideoMemory (NX_VID_MEMORY_INFO * pMem);
76
77   int NX_GetGEMHandles (int drmFd, NX_VID_MEMORY_INFO * pMem,
78       uint32_t handles[NX_MAX_PLANES]);
79   int NX_GetGemHandle (int drmFd, NX_VID_MEMORY_INFO * pMem, int32_t plane);
80
81 #ifdef  __cplusplus
82 };
83 #endif
84
85 #endif //      __NX_VIDEO_ALLOC_H__