1 #ifndef __MEDIA_INFO_H__
2 #define __MEDIA_INFO_H__
4 #ifndef MSM_MEDIA_ALIGN
5 #define MSM_MEDIA_ALIGN(__sz, __align) (((__align) & ((__align) - 1)) ?\
6 ((((__sz) + (__align) - 1) / (__align)) * (__align)) :\
7 (((__sz) + (__align) - 1) & (~((__align) - 1))))
10 #ifndef MSM_MEDIA_ROUNDUP
11 #define MSM_MEDIA_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1)) / (__r))
15 #define MSM_MEDIA_MAX(__a, __b) ((__a) > (__b)?(__a):(__b))
20 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
21 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
22 * colour difference samples.
24 * <-------- Y/UV_Stride -------->
25 * <------- Width ------->
26 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
27 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
28 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
29 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
30 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
31 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
32 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
33 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
34 * . . . . . . . . . . . . . . . . |
35 * . . . . . . . . . . . . . . . . |
36 * . . . . . . . . . . . . . . . . |
37 * . . . . . . . . . . . . . . . . V
38 * U V U V U V U V U V U V . . . . ^
39 * U V U V U V U V U V U V . . . . |
40 * U V U V U V U V U V U V . . . . |
41 * U V U V U V U V U V U V . . . . UV_Scanlines
42 * . . . . . . . . . . . . . . . . |
43 * . . . . . . . . . . . . . . . . V
44 * . . . . . . . . . . . . . . . . --> Buffer size alignment
46 * Y_Stride : Width aligned to 128
47 * UV_Stride : Width aligned to 128
48 * Y_Scanlines: Height aligned to 32
49 * UV_Scanlines: Height/2 aligned to 16
50 * Extradata: Arbitrary (software-imposed) padding
51 * Total size = align((Y_Stride * Y_Scanlines
52 * + UV_Stride * UV_Scanlines
53 * + max(Extradata, Y_Stride * 8), 4096)
58 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
59 * by an interleaved V/U plane containing 8 bit 2x2 subsampled
60 * colour difference samples.
62 * <-------- Y/UV_Stride -------->
63 * <------- Width ------->
64 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
65 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
66 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
67 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
68 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
69 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
70 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
71 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
72 * . . . . . . . . . . . . . . . . |
73 * . . . . . . . . . . . . . . . . |
74 * . . . . . . . . . . . . . . . . |
75 * . . . . . . . . . . . . . . . . V
76 * V U V U V U V U V U V U . . . . ^
77 * V U V U V U V U V U V U . . . . |
78 * V U V U V U V U V U V U . . . . |
79 * V U V U V U V U V U V U . . . . UV_Scanlines
80 * . . . . . . . . . . . . . . . . |
81 * . . . . . . . . . . . . . . . . V
82 * . . . . . . . . . . . . . . . . --> Padding & Buffer size alignment
84 * Y_Stride : Width aligned to 128
85 * UV_Stride : Width aligned to 128
86 * Y_Scanlines: Height aligned to 32
87 * UV_Scanlines: Height/2 aligned to 16
88 * Extradata: Arbitrary (software-imposed) padding
89 * Total size = align((Y_Stride * Y_Scanlines
90 * + UV_Stride * UV_Scanlines
91 * + max(Extradata, Y_Stride * 8), 4096)
95 * Two YUV 4:2:0 images/views one after the other
96 * in a top-bottom layout, same as NV12
97 * with a plane of 8 bit Y samples followed
98 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
99 * colour difference samples.
102 * <-------- Y/UV_Stride -------->
103 * <------- Width ------->
104 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ ^
105 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
106 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | |
107 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines |
108 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
109 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
110 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
111 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | |
112 * . . . . . . . . . . . . . . . . | View_1
113 * . . . . . . . . . . . . . . . . | |
114 * . . . . . . . . . . . . . . . . | |
115 * . . . . . . . . . . . . . . . . V |
116 * U V U V U V U V U V U V . . . . ^ |
117 * U V U V U V U V U V U V . . . . | |
118 * U V U V U V U V U V U V . . . . | |
119 * U V U V U V U V U V U V . . . . UV_Scanlines |
120 * . . . . . . . . . . . . . . . . | |
121 * . . . . . . . . . . . . . . . . V V
122 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ ^
123 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
124 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | |
125 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines |
126 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
127 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
128 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
129 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | |
130 * . . . . . . . . . . . . . . . . | View_2
131 * . . . . . . . . . . . . . . . . | |
132 * . . . . . . . . . . . . . . . . | |
133 * . . . . . . . . . . . . . . . . V |
134 * U V U V U V U V U V U V . . . . ^ |
135 * U V U V U V U V U V U V . . . . | |
136 * U V U V U V U V U V U V . . . . | |
137 * U V U V U V U V U V U V . . . . UV_Scanlines |
138 * . . . . . . . . . . . . . . . . | |
139 * . . . . . . . . . . . . . . . . V V
140 * . . . . . . . . . . . . . . . . --> Buffer size alignment
142 * Y_Stride : Width aligned to 128
143 * UV_Stride : Width aligned to 128
144 * Y_Scanlines: Height aligned to 32
145 * UV_Scanlines: Height/2 aligned to 16
146 * View_1 begin at: 0 (zero)
147 * View_2 begin at: Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines
148 * Extradata: Arbitrary (software-imposed) padding
149 * Total size = align((2*(Y_Stride * Y_Scanlines)
150 * + 2*(UV_Stride * UV_Scanlines) + Extradata), 4096)
154 * The buffer can be of 2 types:
155 * (1) Venus NV12 UBWC Progressive
156 * (2) Venus NV12 UBWC Interlaced
158 * (1) Venus NV12 UBWC Progressive Buffer Format:
159 * Compressed Macro-tile format for NV12.
160 * Contains 4 planes in the following order -
166 * Y_Meta_Plane consists of meta information to decode compressed
167 * tile data in Y_UBWC_Plane.
168 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
169 * UBWC decoder block will use the Y_Meta_Plane data together with
170 * Y_UBWC_Plane data to produce loss-less uncompressed 8 bit Y samples.
172 * UV_Meta_Plane consists of meta information to decode compressed
173 * tile data in UV_UBWC_Plane.
174 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
175 * UBWC decoder block will use UV_Meta_Plane data together with
176 * UV_UBWC_Plane data to produce loss-less uncompressed 8 bit 2x2
177 * subsampled color difference samples.
179 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
180 * and randomly accessible. There is no dependency between tiles.
182 * <----- Y_Meta_Stride ---->
183 * <-------- Width ------>
184 * M M M M M M M M M M M M . . ^ ^
185 * M M M M M M M M M M M M . . | |
186 * M M M M M M M M M M M M . . Height |
187 * M M M M M M M M M M M M . . | Meta_Y_Scanlines
188 * M M M M M M M M M M M M . . | |
189 * M M M M M M M M M M M M . . | |
190 * M M M M M M M M M M M M . . | |
191 * M M M M M M M M M M M M . . V |
192 * . . . . . . . . . . . . . . |
193 * . . . . . . . . . . . . . . |
194 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
195 * . . . . . . . . . . . . . . V
196 * <--Compressed tile Y Stride--->
197 * <------- Width ------->
198 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^
199 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
200 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height |
201 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines
202 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
203 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
204 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
205 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V |
206 * . . . . . . . . . . . . . . . . |
207 * . . . . . . . . . . . . . . . . |
208 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
209 * . . . . . . . . . . . . . . . . V
210 * <----- UV_Meta_Stride ---->
211 * M M M M M M M M M M M M . . ^
212 * M M M M M M M M M M M M . . |
213 * M M M M M M M M M M M M . . |
214 * M M M M M M M M M M M M . . M_UV_Scanlines
215 * . . . . . . . . . . . . . . |
216 * . . . . . . . . . . . . . . V
217 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
218 * <--Compressed tile UV Stride--->
219 * U* V* U* V* U* V* U* V* . . . . ^
220 * U* V* U* V* U* V* U* V* . . . . |
221 * U* V* U* V* U* V* U* V* . . . . |
222 * U* V* U* V* U* V* U* V* . . . . UV_Scanlines
223 * . . . . . . . . . . . . . . . . |
224 * . . . . . . . . . . . . . . . . V
225 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
227 * Y_Stride = align(Width, 128)
228 * UV_Stride = align(Width, 128)
229 * Y_Scanlines = align(Height, 32)
230 * UV_Scanlines = align(Height/2, 16)
231 * Y_UBWC_Plane_size = align(Y_Stride * Y_Scanlines, 4096)
232 * UV_UBWC_Plane_size = align(UV_Stride * UV_Scanlines, 4096)
233 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
234 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
235 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
236 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
237 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
238 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
241 * Total size = align( Y_UBWC_Plane_size + UV_UBWC_Plane_size +
242 * Y_Meta_Plane_size + UV_Meta_Plane_size
243 * + max(Extradata, Y_Stride * 48), 4096)
246 * (2) Venus NV12 UBWC Interlaced Buffer Format:
247 * Compressed Macro-tile format for NV12 interlaced.
248 * Contains 8 planes in the following order -
249 * (A) Y_Meta_Top_Field_Plane
250 * (B) Y_UBWC_Top_Field_Plane
251 * (C) UV_Meta_Top_Field_Plane
252 * (D) UV_UBWC_Top_Field_Plane
253 * (E) Y_Meta_Bottom_Field_Plane
254 * (F) Y_UBWC_Bottom_Field_Plane
255 * (G) UV_Meta_Bottom_Field_Plane
256 * (H) UV_UBWC_Bottom_Field_Plane
257 * Y_Meta_Top_Field_Plane consists of meta information to decode
258 * compressed tile data for Y_UBWC_Top_Field_Plane.
259 * Y_UBWC_Top_Field_Plane consists of Y data in compressed macro-tile
260 * format for top field of an interlaced frame.
261 * UBWC decoder block will use the Y_Meta_Top_Field_Plane data together
262 * with Y_UBWC_Top_Field_Plane data to produce loss-less uncompressed
263 * 8 bit Y samples for top field of an interlaced frame.
265 * UV_Meta_Top_Field_Plane consists of meta information to decode
266 * compressed tile data in UV_UBWC_Top_Field_Plane.
267 * UV_UBWC_Top_Field_Plane consists of UV data in compressed macro-tile
268 * format for top field of an interlaced frame.
269 * UBWC decoder block will use UV_Meta_Top_Field_Plane data together
270 * with UV_UBWC_Top_Field_Plane data to produce loss-less uncompressed
271 * 8 bit subsampled color difference samples for top field of an
274 * Each tile in Y_UBWC_Top_Field_Plane/UV_UBWC_Top_Field_Plane is
275 * independently decodable and randomly accessible. There is no
276 * dependency between tiles.
278 * Y_Meta_Bottom_Field_Plane consists of meta information to decode
279 * compressed tile data for Y_UBWC_Bottom_Field_Plane.
280 * Y_UBWC_Bottom_Field_Plane consists of Y data in compressed macro-tile
281 * format for bottom field of an interlaced frame.
282 * UBWC decoder block will use the Y_Meta_Bottom_Field_Plane data
283 * together with Y_UBWC_Bottom_Field_Plane data to produce loss-less
284 * uncompressed 8 bit Y samples for bottom field of an interlaced frame.
286 * UV_Meta_Bottom_Field_Plane consists of meta information to decode
287 * compressed tile data in UV_UBWC_Bottom_Field_Plane.
288 * UV_UBWC_Bottom_Field_Plane consists of UV data in compressed
289 * macro-tile format for bottom field of an interlaced frame.
290 * UBWC decoder block will use UV_Meta_Bottom_Field_Plane data together
291 * with UV_UBWC_Bottom_Field_Plane data to produce loss-less
292 * uncompressed 8 bit subsampled color difference samples for bottom
293 * field of an interlaced frame.
295 * Each tile in Y_UBWC_Bottom_Field_Plane/UV_UBWC_Bottom_Field_Plane is
296 * independently decodable and randomly accessible. There is no
297 * dependency between tiles.
299 * <-----Y_TF_Meta_Stride---->
300 * <-------- Width ------>
301 * M M M M M M M M M M M M . . ^ ^
302 * M M M M M M M M M M M M . . | |
303 * M M M M M M M M M M M M . . Half_height |
304 * M M M M M M M M M M M M . . | Meta_Y_TF_Scanlines
305 * M M M M M M M M M M M M . . | |
306 * M M M M M M M M M M M M . . | |
307 * M M M M M M M M M M M M . . | |
308 * M M M M M M M M M M M M . . V |
309 * . . . . . . . . . . . . . . |
310 * . . . . . . . . . . . . . . |
311 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
312 * . . . . . . . . . . . . . . V
313 * <-Compressed tile Y_TF Stride->
314 * <------- Width ------->
315 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^
316 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
317 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height |
318 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_TF_Scanlines
319 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
320 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
321 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
322 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V |
323 * . . . . . . . . . . . . . . . . |
324 * . . . . . . . . . . . . . . . . |
325 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
326 * . . . . . . . . . . . . . . . . V
327 * <----UV_TF_Meta_Stride---->
328 * M M M M M M M M M M M M . . ^
329 * M M M M M M M M M M M M . . |
330 * M M M M M M M M M M M M . . |
331 * M M M M M M M M M M M M . . M_UV_TF_Scanlines
332 * . . . . . . . . . . . . . . |
333 * . . . . . . . . . . . . . . V
334 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
335 * <-Compressed tile UV_TF Stride->
336 * U* V* U* V* U* V* U* V* . . . . ^
337 * U* V* U* V* U* V* U* V* . . . . |
338 * U* V* U* V* U* V* U* V* . . . . |
339 * U* V* U* V* U* V* U* V* . . . . UV_TF_Scanlines
340 * . . . . . . . . . . . . . . . . |
341 * . . . . . . . . . . . . . . . . V
342 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
343 * <-----Y_BF_Meta_Stride---->
344 * <-------- Width ------>
345 * M M M M M M M M M M M M . . ^ ^
346 * M M M M M M M M M M M M . . | |
347 * M M M M M M M M M M M M . . Half_height |
348 * M M M M M M M M M M M M . . | Meta_Y_BF_Scanlines
349 * M M M M M M M M M M M M . . | |
350 * M M M M M M M M M M M M . . | |
351 * M M M M M M M M M M M M . . | |
352 * M M M M M M M M M M M M . . V |
353 * . . . . . . . . . . . . . . |
354 * . . . . . . . . . . . . . . |
355 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
356 * . . . . . . . . . . . . . . V
357 * <-Compressed tile Y_BF Stride->
358 * <------- Width ------->
359 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^
360 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
361 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height |
362 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_BF_Scanlines
363 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
364 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
365 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
366 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V |
367 * . . . . . . . . . . . . . . . . |
368 * . . . . . . . . . . . . . . . . |
369 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
370 * . . . . . . . . . . . . . . . . V
371 * <----UV_BF_Meta_Stride---->
372 * M M M M M M M M M M M M . . ^
373 * M M M M M M M M M M M M . . |
374 * M M M M M M M M M M M M . . |
375 * M M M M M M M M M M M M . . M_UV_BF_Scanlines
376 * . . . . . . . . . . . . . . |
377 * . . . . . . . . . . . . . . V
378 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
379 * <-Compressed tile UV_BF Stride->
380 * U* V* U* V* U* V* U* V* . . . . ^
381 * U* V* U* V* U* V* U* V* . . . . |
382 * U* V* U* V* U* V* U* V* . . . . |
383 * U* V* U* V* U* V* U* V* . . . . UV_BF_Scanlines
384 * . . . . . . . . . . . . . . . . |
385 * . . . . . . . . . . . . . . . . V
386 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
388 * Half_height = (Height+1)>>1
389 * Y_TF_Stride = align(Width, 128)
390 * UV_TF_Stride = align(Width, 128)
391 * Y_TF_Scanlines = align(Half_height, 32)
392 * UV_TF_Scanlines = align((Half_height+1)/2, 32)
393 * Y_UBWC_TF_Plane_size = align(Y_TF_Stride * Y_TF_Scanlines, 4096)
394 * UV_UBWC_TF_Plane_size = align(UV_TF_Stride * UV_TF_Scanlines, 4096)
395 * Y_TF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
396 * Y_TF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16)
397 * Y_TF_Meta_Plane_size =
398 * align(Y_TF_Meta_Stride * Y_TF_Meta_Scanlines, 4096)
399 * UV_TF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
400 * UV_TF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16)
401 * UV_TF_Meta_Plane_size =
402 * align(UV_TF_Meta_Stride * UV_TF_Meta_Scanlines, 4096)
403 * Y_BF_Stride = align(Width, 128)
404 * UV_BF_Stride = align(Width, 128)
405 * Y_BF_Scanlines = align(Half_height, 32)
406 * UV_BF_Scanlines = align((Half_height+1)/2, 32)
407 * Y_UBWC_BF_Plane_size = align(Y_BF_Stride * Y_BF_Scanlines, 4096)
408 * UV_UBWC_BF_Plane_size = align(UV_BF_Stride * UV_BF_Scanlines, 4096)
409 * Y_BF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
410 * Y_BF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16)
411 * Y_BF_Meta_Plane_size =
412 * align(Y_BF_Meta_Stride * Y_BF_Meta_Scanlines, 4096)
413 * UV_BF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
414 * UV_BF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16)
415 * UV_BF_Meta_Plane_size =
416 * align(UV_BF_Meta_Stride * UV_BF_Meta_Scanlines, 4096)
419 * Total size = align( Y_UBWC_TF_Plane_size + UV_UBWC_TF_Plane_size +
420 * Y_TF_Meta_Plane_size + UV_TF_Meta_Plane_size +
421 * Y_UBWC_BF_Plane_size + UV_UBWC_BF_Plane_size +
422 * Y_BF_Meta_Plane_size + UV_BF_Meta_Plane_size +
423 * + max(Extradata, Y_TF_Stride * 48), 4096)
426 /* Venus NV12 10-bit UBWC:
427 * Compressed Macro-tile format for NV12.
428 * Contains 4 planes in the following order -
434 * Y_Meta_Plane consists of meta information to decode compressed
435 * tile data in Y_UBWC_Plane.
436 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
437 * UBWC decoder block will use the Y_Meta_Plane data together with
438 * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples.
440 * UV_Meta_Plane consists of meta information to decode compressed
441 * tile data in UV_UBWC_Plane.
442 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
443 * UBWC decoder block will use UV_Meta_Plane data together with
444 * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2
445 * subsampled color difference samples.
447 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
448 * and randomly accessible. There is no dependency between tiles.
450 * <----- Y_Meta_Stride ----->
451 * <-------- Width ------>
452 * M M M M M M M M M M M M . . ^ ^
453 * M M M M M M M M M M M M . . | |
454 * M M M M M M M M M M M M . . Height |
455 * M M M M M M M M M M M M . . | Meta_Y_Scanlines
456 * M M M M M M M M M M M M . . | |
457 * M M M M M M M M M M M M . . | |
458 * M M M M M M M M M M M M . . | |
459 * M M M M M M M M M M M M . . V |
460 * . . . . . . . . . . . . . . |
461 * . . . . . . . . . . . . . . |
462 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
463 * . . . . . . . . . . . . . . V
464 * <--Compressed tile Y Stride--->
465 * <------- Width ------->
466 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^
467 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
468 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height |
469 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines
470 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
471 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
472 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
473 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V |
474 * . . . . . . . . . . . . . . . . |
475 * . . . . . . . . . . . . . . . . |
476 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
477 * . . . . . . . . . . . . . . . . V
478 * <----- UV_Meta_Stride ---->
479 * M M M M M M M M M M M M . . ^
480 * M M M M M M M M M M M M . . |
481 * M M M M M M M M M M M M . . |
482 * M M M M M M M M M M M M . . M_UV_Scanlines
483 * . . . . . . . . . . . . . . |
484 * . . . . . . . . . . . . . . V
485 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
486 * <--Compressed tile UV Stride--->
487 * U* V* U* V* U* V* U* V* . . . . ^
488 * U* V* U* V* U* V* U* V* . . . . |
489 * U* V* U* V* U* V* U* V* . . . . |
490 * U* V* U* V* U* V* U* V* . . . . UV_Scanlines
491 * . . . . . . . . . . . . . . . . |
492 * . . . . . . . . . . . . . . . . V
493 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
496 * Y_Stride = align(Width * 4/3, 128)
497 * UV_Stride = align(Width * 4/3, 128)
498 * Y_Scanlines = align(Height, 32)
499 * UV_Scanlines = align(Height/2, 16)
500 * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096)
501 * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096)
502 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
503 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
504 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
505 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
506 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
507 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
510 * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size +
511 * Y_Meta_Plane_size + UV_Meta_Plane_size
512 * + max(Extradata, Y_Stride * 48), 4096)
514 COLOR_FMT_NV12_BPP10_UBWC
,
515 /* Venus RGBA8888 format:
516 * Contains 1 plane in the following order -
519 * <-------- RGB_Stride -------->
520 * <------- Width ------->
521 * R R R R R R R R R R R R . . . . ^ ^
522 * R R R R R R R R R R R R . . . . | |
523 * R R R R R R R R R R R R . . . . Height |
524 * R R R R R R R R R R R R . . . . | RGB_Scanlines
525 * R R R R R R R R R R R R . . . . | |
526 * R R R R R R R R R R R R . . . . | |
527 * R R R R R R R R R R R R . . . . | |
528 * R R R R R R R R R R R R . . . . V |
529 * . . . . . . . . . . . . . . . . |
530 * . . . . . . . . . . . . . . . . |
531 * . . . . . . . . . . . . . . . . |
532 * . . . . . . . . . . . . . . . . V
534 * RGB_Stride = align(Width * 4, 128)
535 * RGB_Scanlines = align(Height, 32)
536 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
539 * Total size = align(RGB_Plane_size + Extradata, 4096)
542 /* Venus RGBA8888 UBWC format:
543 * Contains 2 planes in the following order -
547 * <--- RGB_Meta_Stride ---->
548 * <-------- Width ------>
549 * M M M M M M M M M M M M . . ^ ^
550 * M M M M M M M M M M M M . . | |
551 * M M M M M M M M M M M M . . Height |
552 * M M M M M M M M M M M M . . | Meta_RGB_Scanlines
553 * M M M M M M M M M M M M . . | |
554 * M M M M M M M M M M M M . . | |
555 * M M M M M M M M M M M M . . | |
556 * M M M M M M M M M M M M . . V |
557 * . . . . . . . . . . . . . . |
558 * . . . . . . . . . . . . . . |
559 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
560 * . . . . . . . . . . . . . . V
561 * <-------- RGB_Stride -------->
562 * <------- Width ------->
563 * R R R R R R R R R R R R . . . . ^ ^
564 * R R R R R R R R R R R R . . . . | |
565 * R R R R R R R R R R R R . . . . Height |
566 * R R R R R R R R R R R R . . . . | RGB_Scanlines
567 * R R R R R R R R R R R R . . . . | |
568 * R R R R R R R R R R R R . . . . | |
569 * R R R R R R R R R R R R . . . . | |
570 * R R R R R R R R R R R R . . . . V |
571 * . . . . . . . . . . . . . . . . |
572 * . . . . . . . . . . . . . . . . |
573 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
574 * . . . . . . . . . . . . . . . . V
576 * RGB_Stride = align(Width * 4, 128)
577 * RGB_Scanlines = align(Height, 32)
578 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
579 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
580 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
581 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
582 * RGB_Meta_Scanlines, 4096)
585 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
588 COLOR_FMT_RGBA8888_UBWC
,
589 /* Venus RGBA1010102 UBWC format:
590 * Contains 2 planes in the following order -
594 * <--- RGB_Meta_Stride ---->
595 * <-------- Width ------>
596 * M M M M M M M M M M M M . . ^ ^
597 * M M M M M M M M M M M M . . | |
598 * M M M M M M M M M M M M . . Height |
599 * M M M M M M M M M M M M . . | Meta_RGB_Scanlines
600 * M M M M M M M M M M M M . . | |
601 * M M M M M M M M M M M M . . | |
602 * M M M M M M M M M M M M . . | |
603 * M M M M M M M M M M M M . . V |
604 * . . . . . . . . . . . . . . |
605 * . . . . . . . . . . . . . . |
606 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
607 * . . . . . . . . . . . . . . V
608 * <-------- RGB_Stride -------->
609 * <------- Width ------->
610 * R R R R R R R R R R R R . . . . ^ ^
611 * R R R R R R R R R R R R . . . . | |
612 * R R R R R R R R R R R R . . . . Height |
613 * R R R R R R R R R R R R . . . . | RGB_Scanlines
614 * R R R R R R R R R R R R . . . . | |
615 * R R R R R R R R R R R R . . . . | |
616 * R R R R R R R R R R R R . . . . | |
617 * R R R R R R R R R R R R . . . . V |
618 * . . . . . . . . . . . . . . . . |
619 * . . . . . . . . . . . . . . . . |
620 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
621 * . . . . . . . . . . . . . . . . V
623 * RGB_Stride = align(Width * 4, 256)
624 * RGB_Scanlines = align(Height, 16)
625 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
626 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
627 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
628 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
629 * RGB_Meta_Scanlines, 4096)
632 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
635 COLOR_FMT_RGBA1010102_UBWC
,
636 /* Venus RGB565 UBWC format:
637 * Contains 2 planes in the following order -
641 * <--- RGB_Meta_Stride ---->
642 * <-------- Width ------>
643 * M M M M M M M M M M M M . . ^ ^
644 * M M M M M M M M M M M M . . | |
645 * M M M M M M M M M M M M . . Height |
646 * M M M M M M M M M M M M . . | Meta_RGB_Scanlines
647 * M M M M M M M M M M M M . . | |
648 * M M M M M M M M M M M M . . | |
649 * M M M M M M M M M M M M . . | |
650 * M M M M M M M M M M M M . . V |
651 * . . . . . . . . . . . . . . |
652 * . . . . . . . . . . . . . . |
653 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
654 * . . . . . . . . . . . . . . V
655 * <-------- RGB_Stride -------->
656 * <------- Width ------->
657 * R R R R R R R R R R R R . . . . ^ ^
658 * R R R R R R R R R R R R . . . . | |
659 * R R R R R R R R R R R R . . . . Height |
660 * R R R R R R R R R R R R . . . . | RGB_Scanlines
661 * R R R R R R R R R R R R . . . . | |
662 * R R R R R R R R R R R R . . . . | |
663 * R R R R R R R R R R R R . . . . | |
664 * R R R R R R R R R R R R . . . . V |
665 * . . . . . . . . . . . . . . . . |
666 * . . . . . . . . . . . . . . . . |
667 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
668 * . . . . . . . . . . . . . . . . V
670 * RGB_Stride = align(Width * 2, 128)
671 * RGB_Scanlines = align(Height, 16)
672 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
673 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
674 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
675 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
676 * RGB_Meta_Scanlines, 4096)
679 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
682 COLOR_FMT_RGB565_UBWC
,
684 * Compressed Macro-tile format for NV12.
685 * Contains 4 planes in the following order -
691 * Y_Meta_Plane consists of meta information to decode compressed
692 * tile data in Y_UBWC_Plane.
693 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
694 * UBWC decoder block will use the Y_Meta_Plane data together with
695 * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples.
697 * UV_Meta_Plane consists of meta information to decode compressed
698 * tile data in UV_UBWC_Plane.
699 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
700 * UBWC decoder block will use UV_Meta_Plane data together with
701 * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2
702 * subsampled color difference samples.
704 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
705 * and randomly accessible. There is no dependency between tiles.
707 * <----- Y_Meta_Stride ----->
708 * <-------- Width ------>
709 * M M M M M M M M M M M M . . ^ ^
710 * M M M M M M M M M M M M . . | |
711 * M M M M M M M M M M M M . . Height |
712 * M M M M M M M M M M M M . . | Meta_Y_Scanlines
713 * M M M M M M M M M M M M . . | |
714 * M M M M M M M M M M M M . . | |
715 * M M M M M M M M M M M M . . | |
716 * M M M M M M M M M M M M . . V |
717 * . . . . . . . . . . . . . . |
718 * . . . . . . . . . . . . . . |
719 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
720 * . . . . . . . . . . . . . . V
721 * <--Compressed tile Y Stride--->
722 * <------- Width ------->
723 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . ^ ^
724 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
725 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Height |
726 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_Scanlines
727 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
728 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
729 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | |
730 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . V |
731 * . . . . . . . . . . . . . . . . |
732 * . . . . . . . . . . . . . . . . |
733 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
734 * . . . . . . . . . . . . . . . . V
735 * <----- UV_Meta_Stride ---->
736 * M M M M M M M M M M M M . . ^
737 * M M M M M M M M M M M M . . |
738 * M M M M M M M M M M M M . . |
739 * M M M M M M M M M M M M . . M_UV_Scanlines
740 * . . . . . . . . . . . . . . |
741 * . . . . . . . . . . . . . . V
742 * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
743 * <--Compressed tile UV Stride--->
744 * U* V* U* V* U* V* U* V* . . . . ^
745 * U* V* U* V* U* V* U* V* . . . . |
746 * U* V* U* V* U* V* U* V* . . . . |
747 * U* V* U* V* U* V* U* V* . . . . UV_Scanlines
748 * . . . . . . . . . . . . . . . . |
749 * . . . . . . . . . . . . . . . . V
750 * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k
753 * Y_Stride = align(Width * 2, 256)
754 * UV_Stride = align(Width * 2, 256)
755 * Y_Scanlines = align(Height, 16)
756 * UV_Scanlines = align(Height/2, 16)
757 * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096)
758 * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096)
759 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
760 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
761 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
762 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
763 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
764 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
767 * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size +
768 * Y_Meta_Plane_size + UV_Meta_Plane_size
769 * + max(Extradata, Y_Stride * 48), 4096)
773 * YUV 4:2:0 image with a plane of 10 bit Y samples followed
774 * by an interleaved U/V plane containing 10 bit 2x2 subsampled
775 * colour difference samples.
777 * <-------- Y/UV_Stride -------->
778 * <------- Width ------->
779 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
780 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
781 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
782 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
783 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
784 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
785 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
786 * Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
787 * . . . . . . . . . . . . . . . . |
788 * . . . . . . . . . . . . . . . . |
789 * . . . . . . . . . . . . . . . . |
790 * . . . . . . . . . . . . . . . . V
791 * U V U V U V U V U V U V . . . . ^
792 * U V U V U V U V U V U V . . . . |
793 * U V U V U V U V U V U V . . . . |
794 * U V U V U V U V U V U V . . . . UV_Scanlines
795 * . . . . . . . . . . . . . . . . |
796 * . . . . . . . . . . . . . . . . V
797 * . . . . . . . . . . . . . . . . --> Buffer size alignment
799 * Y_Stride : Width * 2 aligned to 128
800 * UV_Stride : Width * 2 aligned to 128
801 * Y_Scanlines: Height aligned to 32
802 * UV_Scanlines: Height/2 aligned to 16
803 * Extradata: Arbitrary (software-imposed) padding
804 * Total size = align((Y_Stride * Y_Scanlines
805 * + UV_Stride * UV_Scanlines
806 * + max(Extradata, Y_Stride * 8), 4096)
811 #define COLOR_FMT_RGBA1010102_UBWC COLOR_FMT_RGBA1010102_UBWC
812 #define COLOR_FMT_RGB565_UBWC COLOR_FMT_RGB565_UBWC
813 #define COLOR_FMT_P010_UBWC COLOR_FMT_P010_UBWC
814 #define COLOR_FMT_P010 COLOR_FMT_P010
817 * Function arguments:
823 static unsigned int VENUS_Y_STRIDE(int color_fmt
, int width
)
825 unsigned int stride
= 0;
833 case COLOR_FMT_NV12_MVTB
:
834 case COLOR_FMT_NV12_UBWC
:
835 stride
= MSM_MEDIA_ALIGN(width
, 128);
837 case COLOR_FMT_NV12_BPP10_UBWC
:
838 stride
= MSM_MEDIA_ALIGN(width
, 192);
839 stride
= MSM_MEDIA_ALIGN(stride
* 4 / 3, 256);
841 case COLOR_FMT_P010_UBWC
:
842 stride
= MSM_MEDIA_ALIGN(width
* 2, 256);
845 stride
= MSM_MEDIA_ALIGN(width
* 2, 128);
853 * Function arguments:
859 static unsigned int VENUS_UV_STRIDE(int color_fmt
, int width
)
861 unsigned int stride
= 0;
869 case COLOR_FMT_NV12_MVTB
:
870 case COLOR_FMT_NV12_UBWC
:
871 stride
= MSM_MEDIA_ALIGN(width
, 128);
873 case COLOR_FMT_NV12_BPP10_UBWC
:
874 stride
= MSM_MEDIA_ALIGN(width
, 192);
875 stride
= MSM_MEDIA_ALIGN(stride
* 4 / 3, 256);
877 case COLOR_FMT_P010_UBWC
:
878 stride
= MSM_MEDIA_ALIGN(width
* 2, 256);
881 stride
= MSM_MEDIA_ALIGN(width
* 2, 128);
889 * Function arguments:
892 * Progressive: height
893 * Interlaced: (height+1)>>1
895 static unsigned int VENUS_Y_SCANLINES(int color_fmt
, int height
)
897 unsigned int sclines
= 0;
905 case COLOR_FMT_NV12_MVTB
:
906 case COLOR_FMT_NV12_UBWC
:
908 sclines
= MSM_MEDIA_ALIGN(height
, 32);
910 case COLOR_FMT_NV12_BPP10_UBWC
:
911 case COLOR_FMT_P010_UBWC
:
912 sclines
= MSM_MEDIA_ALIGN(height
, 16);
920 * Function arguments:
923 * Progressive: height
924 * Interlaced: (height+1)>>1
926 static unsigned int VENUS_UV_SCANLINES(int color_fmt
, int height
)
928 unsigned int sclines
= 0;
936 case COLOR_FMT_NV12_MVTB
:
937 case COLOR_FMT_NV12_BPP10_UBWC
:
938 case COLOR_FMT_P010_UBWC
:
940 sclines
= MSM_MEDIA_ALIGN((height
+ 1) >> 1, 16);
942 case COLOR_FMT_NV12_UBWC
:
943 sclines
= MSM_MEDIA_ALIGN((height
+ 1) >> 1, 32);
951 * Function arguments:
957 static unsigned int VENUS_Y_META_STRIDE(int color_fmt
, int width
)
959 int y_tile_width
= 0, y_meta_stride
;
965 case COLOR_FMT_NV12_UBWC
:
966 case COLOR_FMT_P010_UBWC
:
969 case COLOR_FMT_NV12_BPP10_UBWC
:
976 y_meta_stride
= MSM_MEDIA_ROUNDUP(width
, y_tile_width
);
977 return MSM_MEDIA_ALIGN(y_meta_stride
, 64);
981 * Function arguments:
984 * Progressive: height
985 * Interlaced: (height+1)>>1
987 static unsigned int VENUS_Y_META_SCANLINES(int color_fmt
, int height
)
989 int y_tile_height
= 0, y_meta_scanlines
;
995 case COLOR_FMT_NV12_UBWC
:
998 case COLOR_FMT_NV12_BPP10_UBWC
:
999 case COLOR_FMT_P010_UBWC
:
1006 y_meta_scanlines
= MSM_MEDIA_ROUNDUP(height
, y_tile_height
);
1007 return MSM_MEDIA_ALIGN(y_meta_scanlines
, 16);
1011 * Function arguments:
1014 * Progressive: width
1017 static unsigned int VENUS_UV_META_STRIDE(int color_fmt
, int width
)
1019 int uv_tile_width
= 0, uv_meta_stride
;
1024 switch (color_fmt
) {
1025 case COLOR_FMT_NV12_UBWC
:
1026 case COLOR_FMT_P010_UBWC
:
1029 case COLOR_FMT_NV12_BPP10_UBWC
:
1036 uv_meta_stride
= MSM_MEDIA_ROUNDUP((width
+1)>>1, uv_tile_width
);
1037 return MSM_MEDIA_ALIGN(uv_meta_stride
, 64);
1041 * Function arguments:
1044 * Progressive: height
1045 * Interlaced: (height+1)>>1
1047 static unsigned int VENUS_UV_META_SCANLINES(int color_fmt
, int height
)
1049 int uv_tile_height
= 0, uv_meta_scanlines
;
1054 switch (color_fmt
) {
1055 case COLOR_FMT_NV12_UBWC
:
1058 case COLOR_FMT_NV12_BPP10_UBWC
:
1059 case COLOR_FMT_P010_UBWC
:
1066 uv_meta_scanlines
= MSM_MEDIA_ROUNDUP((height
+1)>>1, uv_tile_height
);
1067 return MSM_MEDIA_ALIGN(uv_meta_scanlines
, 16);
1070 static unsigned int VENUS_RGB_STRIDE(int color_fmt
, int width
)
1072 unsigned int alignment
= 0, bpp
= 4;
1077 switch (color_fmt
) {
1078 case COLOR_FMT_RGBA8888
:
1081 case COLOR_FMT_RGB565_UBWC
:
1085 case COLOR_FMT_RGBA8888_UBWC
:
1086 case COLOR_FMT_RGBA1010102_UBWC
:
1093 return MSM_MEDIA_ALIGN(width
* bpp
, alignment
);
1096 static unsigned int VENUS_RGB_SCANLINES(int color_fmt
, int height
)
1098 unsigned int alignment
= 0;
1103 switch (color_fmt
) {
1104 case COLOR_FMT_RGBA8888
:
1107 case COLOR_FMT_RGBA8888_UBWC
:
1108 case COLOR_FMT_RGBA1010102_UBWC
:
1109 case COLOR_FMT_RGB565_UBWC
:
1116 return MSM_MEDIA_ALIGN(height
, alignment
);
1119 static unsigned int VENUS_RGB_META_STRIDE(int color_fmt
, int width
)
1121 int rgb_meta_stride
;
1126 switch (color_fmt
) {
1127 case COLOR_FMT_RGBA8888_UBWC
:
1128 case COLOR_FMT_RGBA1010102_UBWC
:
1129 case COLOR_FMT_RGB565_UBWC
:
1130 rgb_meta_stride
= MSM_MEDIA_ROUNDUP(width
, 16);
1131 return MSM_MEDIA_ALIGN(rgb_meta_stride
, 64);
1137 static unsigned int VENUS_RGB_META_SCANLINES(int color_fmt
, int height
)
1139 int rgb_meta_scanlines
;
1144 switch (color_fmt
) {
1145 case COLOR_FMT_RGBA8888_UBWC
:
1146 case COLOR_FMT_RGBA1010102_UBWC
:
1147 case COLOR_FMT_RGB565_UBWC
:
1148 rgb_meta_scanlines
= MSM_MEDIA_ROUNDUP(height
, 4);
1149 return MSM_MEDIA_ALIGN(rgb_meta_scanlines
, 16);