Commit | Line | Data |
---|---|---|
5763fb39 T |
1 | /* |
2 | * Copyright@ Samsung Electronics Co. LTD | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | ||
17 | /*! | |
18 | * \file ExynosBuffer.h | |
19 | * \brief header file for ExynosBuffer | |
20 | * \author Sangwoo, Park(sw5771.park@samsung.com) | |
21 | * \date 2011/06/02 | |
22 | * | |
23 | * <b>Revision History: </b> | |
24 | * - 2010/06/03 : Sangwoo, Park(sw5771.park@samsung.com) \n | |
25 | * Initial version | |
26 | * | |
27 | * - 2012/03/14 : sangwoo.park(sw5771.park@samsung.com) \n | |
28 | * Change file, struct name to ExynosXXX. | |
29 | * | |
30 | * - 2012/10/08 : sangwoo.park(sw5771.park@samsung.com) \n | |
31 | * Add BUFFER_PLANE_NUM_DEFAULT, and, Increase Buffer as 4. | |
32 | * | |
33 | */ | |
34 | ||
35 | #ifndef EXYNOS_BUFFER_H_ | |
36 | #define EXYNOS_BUFFER_H_ | |
37 | ||
38 | #include <sys/types.h> | |
39 | ||
40 | //! Buffer information | |
41 | /*! | |
42 | * \ingroup Exynos | |
43 | */ | |
44 | struct ExynosBuffer | |
45 | { | |
46 | public: | |
47 | //! Buffer type | |
48 | enum BUFFER_TYPE | |
49 | { | |
50 | BUFFER_TYPE_BASE = 0, | |
51 | BUFFER_TYPE_VIRT = 1 << 0, //!< virtual address | |
52 | BUFFER_TYPE_PHYS = 1 << 1, //!< physical address | |
53 | BUFFER_TYPE_FD = 1 << 2, //!< fd address | |
54 | BUFFER_TYPE_RESERVED = 1 << 3, //!< reserved type | |
55 | BUFFER_TYPE_MAX, | |
56 | }; | |
57 | ||
58 | //! Buffer plane number | |
59 | enum BUFFER_PLANE_NUM | |
60 | { | |
61 | BUFFER_PLANE_NUM_DEFAULT = 4, | |
62 | }; | |
63 | ||
64 | //! Buffer virtual address | |
65 | union { | |
66 | char *p; //! single address. | |
67 | char *extP[BUFFER_PLANE_NUM_DEFAULT]; //! Y Cb Cr. | |
68 | } virt; | |
69 | ||
70 | //! Buffer physical address | |
71 | union { | |
72 | unsigned int p; //! single address. | |
73 | unsigned int extP[BUFFER_PLANE_NUM_DEFAULT]; //! Y Cb Cr. | |
74 | } phys; | |
75 | ||
76 | //! Buffer file descriptors | |
77 | union { | |
78 | int fd; //! single address. | |
79 | int extFd[BUFFER_PLANE_NUM_DEFAULT]; //! Y Cb Cr. | |
80 | } fd; | |
81 | ||
82 | //! Buffer reserved id | |
83 | union { | |
84 | int p; //! \n | |
85 | int extP[BUFFER_PLANE_NUM_DEFAULT]; //! \n | |
86 | } reserved; | |
87 | ||
88 | //! Buffer size | |
89 | union { | |
90 | unsigned int s; | |
91 | unsigned int extS[BUFFER_PLANE_NUM_DEFAULT]; | |
92 | } size; | |
93 | ||
94 | #ifdef __cplusplus | |
95 | //! Constructor | |
96 | ExynosBuffer() | |
97 | { | |
98 | for (int i = 0; i < BUFFER_PLANE_NUM_DEFAULT; i++) { | |
99 | virt. extP [i] = NULL; | |
100 | phys. extP [i] = 0; | |
101 | fd. extFd[i] = -1; | |
102 | reserved.extP [i] = 0; | |
103 | size. extS [i] = 0; | |
104 | } | |
105 | } | |
106 | ||
107 | //! Constructor | |
108 | ExynosBuffer(const ExynosBuffer *other) | |
109 | { | |
110 | for (int i = 0; i < BUFFER_PLANE_NUM_DEFAULT; i++) { | |
111 | virt. extP [i] = other->virt.extP[i]; | |
112 | phys. extP [i] = other->phys.extP[i]; | |
113 | fd. extFd[i] = other->fd.extFd[i]; | |
114 | reserved.extP [i] = other->reserved.extP[i]; | |
115 | size. extS [i] = other->size.extS[i]; | |
116 | } | |
117 | } | |
118 | ||
119 | //! Operator(=) override | |
120 | ExynosBuffer& operator =(const ExynosBuffer &other) | |
121 | { | |
122 | for (int i = 0; i < BUFFER_PLANE_NUM_DEFAULT; i++) { | |
123 | virt. extP [i] = other.virt.extP[i]; | |
124 | phys. extP [i] = other.phys.extP[i]; | |
125 | fd. extFd[i] = other.fd.extFd[i]; | |
126 | reserved.extP [i] = other.reserved.extP[i]; | |
127 | size. extS [i] = other.size.extS[i]; | |
128 | } | |
129 | return *this; | |
130 | } | |
131 | ||
132 | //! Operator(==) override | |
133 | bool operator ==(const ExynosBuffer &other) const | |
134 | { | |
135 | bool ret = true; | |
136 | ||
137 | for (int i = 0; i < BUFFER_PLANE_NUM_DEFAULT; i++) { | |
138 | if ( virt. extP [i] != other.virt. extP[i] | |
139 | || phys. extP [i] != other.phys. extP[i] | |
140 | || fd. extFd[i] != other.fd. extFd[i] | |
141 | || reserved.extP [i] != other.reserved.extP[i] | |
142 | || size. extS [i] != other.size. extS[i]) { | |
143 | ret = false; | |
144 | break; | |
145 | } | |
146 | } | |
147 | ||
148 | return ret; | |
149 | } | |
150 | ||
151 | //! Operator(!=) override | |
152 | bool operator !=(const ExynosBuffer &other) const | |
153 | { | |
154 | // use operator(==) | |
155 | return !(*this == other); | |
156 | } | |
157 | ||
158 | //! Get Buffer type | |
159 | static int BUFFER_TYPE(ExynosBuffer *buf) | |
160 | { | |
161 | int type = BUFFER_TYPE_BASE; | |
162 | if (buf->virt.p) | |
163 | type |= BUFFER_TYPE_VIRT; | |
164 | if (buf->phys.p) | |
165 | type |= BUFFER_TYPE_PHYS; | |
166 | if (buf->fd.fd >= 0) | |
167 | type |= BUFFER_TYPE_FD; | |
168 | if (buf->reserved.p) | |
169 | type |= BUFFER_TYPE_RESERVED; | |
170 | ||
171 | return type; | |
172 | } | |
173 | #endif | |
174 | }; | |
175 | ||
176 | #endif //EXYNOS_BUFFER_H_ |