Commit | Line | Data |
---|---|---|
20c51683 JC |
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 | */ | |
31 | ||
32 | #ifndef EXYNOS_BUFFER_H_ | |
33 | #define EXYNOS_BUFFER_H_ | |
34 | ||
35 | #include <sys/types.h> | |
36 | ||
37 | //! Buffer information | |
38 | /*! | |
39 | * \ingroup Exynos | |
40 | */ | |
41 | struct ExynosBuffer | |
42 | { | |
43 | public: | |
44 | //! Buffer type | |
45 | enum BUFFER_TYPE | |
46 | { | |
47 | BUFFER_TYPE_BASE = 0, | |
48 | BUFFER_TYPE_VIRT = 1, //!< virtual address | |
49 | BUFFER_TYPE_PHYS = 1 << 1, //!< physical address | |
50 | BUFFER_TYPE_RESERVED = 1 << 2, //!< reserved type | |
471812b7 | 51 | BUFFER_TYPE_FD = 1 << 3, //!< physical address |
20c51683 JC |
52 | BUFFER_TYPE_MAX, |
53 | }; | |
54 | ||
55 | //! Buffer virtual address | |
56 | union { | |
57 | char *p; //! single address. | |
58 | char *extP[3]; //! Y Cb Cr. | |
59 | } virt; | |
60 | ||
61 | //! Buffer physical address | |
62 | union { | |
63 | unsigned int p; //! single address. | |
64 | unsigned int extP[3]; //! Y Cb Cr. | |
65 | } phys; | |
66 | ||
471812b7 RSZ |
67 | //! Buffer file descriptors |
68 | union { | |
69 | int fd; | |
70 | int extFd[3]; | |
71 | } fd; | |
72 | ||
20c51683 JC |
73 | //! Buffer reserved id |
74 | union { | |
75 | unsigned int p; //! \n | |
76 | unsigned int extP[3]; //! \n | |
77 | } reserved; | |
78 | ||
79 | //! Buffer size | |
80 | union { | |
81 | unsigned int s; | |
82 | unsigned int extS[3]; | |
83 | } size; | |
84 | ||
85 | #ifdef __cplusplus | |
86 | //! Constructor | |
87 | ExynosBuffer() | |
88 | { | |
89 | for (int i = 0; i < 3; i++) { | |
90 | virt. extP[i] = NULL; | |
91 | phys. extP[i] = 0; | |
471812b7 | 92 | fd. extFd[i] = -1; |
20c51683 JC |
93 | reserved.extP[i] = 0; |
94 | size. extS[i] = 0; | |
95 | } | |
96 | } | |
97 | ||
98 | //! Constructor | |
99 | ExynosBuffer(const ExynosBuffer *other) | |
100 | { | |
101 | for (int i = 0; i < 3; i++) { | |
102 | virt. extP[i] = other->virt.extP[i]; | |
103 | phys. extP[i] = other->phys.extP[i]; | |
471812b7 | 104 | fd. extFd[i] = other->fd.extFd[i]; |
20c51683 JC |
105 | reserved.extP[i] = other->reserved.extP[i]; |
106 | size. extS[i] = other->size.extS[i]; | |
107 | } | |
108 | } | |
109 | ||
110 | //! Operator(=) override | |
111 | ExynosBuffer& operator =(const ExynosBuffer &other) | |
112 | { | |
113 | for (int i = 0; i < 3; i++) { | |
114 | virt. extP[i] = other.virt.extP[i]; | |
115 | phys. extP[i] = other.phys.extP[i]; | |
471812b7 | 116 | fd. extFd[i] = other.fd.extFd[i]; |
20c51683 JC |
117 | reserved.extP[i] = other.reserved.extP[i]; |
118 | size. extS[i] = other.size.extS[i]; | |
119 | } | |
120 | return *this; | |
121 | } | |
122 | ||
123 | //! Operator(==) override | |
124 | bool operator ==(const ExynosBuffer &other) const | |
125 | { | |
126 | return ( virt. extP[0] == other.virt.extP[0] | |
127 | && virt. extP[1] == other.virt.extP[1] | |
128 | && virt. extP[2] == other.virt.extP[2] | |
129 | && phys. extP[0] == other.phys.extP[0] | |
130 | && phys. extP[1] == other.phys.extP[1] | |
131 | && phys. extP[2] == other.phys.extP[2] | |
471812b7 RSZ |
132 | && fd. extFd[0] == other.fd.extFd[0] |
133 | && fd. extFd[1] == other.fd.extFd[1] | |
134 | && fd. extFd[2] == other.fd.extFd[2] | |
20c51683 JC |
135 | && reserved.extP[0] == other.reserved.extP[0] |
136 | && reserved.extP[1] == other.reserved.extP[1] | |
137 | && reserved.extP[2] == other.reserved.extP[2] | |
138 | && size. extS[0] == other.size.extS[0] | |
139 | && size. extS[1] == other.size.extS[1] | |
140 | && size. extS[2] == other.size.extS[2]); | |
141 | } | |
142 | ||
143 | //! Operator(!=) override | |
144 | bool operator !=(const ExynosBuffer &other) const | |
145 | { | |
146 | // use operator(==) | |
147 | return !(*this == other); | |
148 | } | |
149 | ||
150 | //! Get Buffer type | |
151 | static int BUFFER_TYPE(ExynosBuffer *buf) | |
152 | { | |
153 | int type = BUFFER_TYPE_BASE; | |
154 | if (buf->virt.p) | |
155 | type |= BUFFER_TYPE_VIRT; | |
156 | if (buf->phys.p) | |
157 | type |= BUFFER_TYPE_PHYS; | |
471812b7 RSZ |
158 | if (buf->fd.fd >= 0) |
159 | type |= BUFFER_TYPE_FD; | |
20c51683 JC |
160 | if (buf->reserved.p) |
161 | type |= BUFFER_TYPE_RESERVED; | |
162 | ||
163 | return type; | |
164 | } | |
165 | #endif | |
166 | }; | |
167 | ||
168 | #endif //EXYNOS_BUFFER_H_ |