root/drivers/gpu/drm/msm/disp/dpu1/msm_media_info.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. VENUS_Y_STRIDE
  2. VENUS_UV_STRIDE
  3. VENUS_Y_SCANLINES
  4. VENUS_UV_SCANLINES
  5. VENUS_Y_META_STRIDE
  6. VENUS_Y_META_SCANLINES
  7. VENUS_UV_META_STRIDE
  8. VENUS_UV_META_SCANLINES
  9. VENUS_RGB_STRIDE
  10. VENUS_RGB_SCANLINES
  11. VENUS_RGB_META_STRIDE
  12. VENUS_RGB_META_SCANLINES

   1 #ifndef __MEDIA_INFO_H__
   2 #define __MEDIA_INFO_H__
   3 
   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))))
   8 #endif
   9 
  10 #ifndef MSM_MEDIA_ROUNDUP
  11 #define MSM_MEDIA_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1)) / (__r))
  12 #endif
  13 
  14 #ifndef MSM_MEDIA_MAX
  15 #define MSM_MEDIA_MAX(__a, __b) ((__a) > (__b)?(__a):(__b))
  16 #endif
  17 
  18 enum color_fmts {
  19         /* Venus NV12:
  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.
  23          *
  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
  45          *
  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)
  54          */
  55         COLOR_FMT_NV12,
  56 
  57         /* Venus NV21:
  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.
  61          *
  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
  83          *
  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)
  92          */
  93         COLOR_FMT_NV21,
  94         /* Venus NV12_MVTB:
  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.
 100          *
 101          *
 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
 141          *
 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)
 151          */
 152         COLOR_FMT_NV12_MVTB,
 153         /*
 154          * The buffer can be of 2 types:
 155          * (1) Venus NV12 UBWC Progressive
 156          * (2) Venus NV12 UBWC Interlaced
 157          *
 158          * (1) Venus NV12 UBWC Progressive Buffer Format:
 159          * Compressed Macro-tile format for NV12.
 160          * Contains 4 planes in the following order -
 161          * (A) Y_Meta_Plane
 162          * (B) Y_UBWC_Plane
 163          * (C) UV_Meta_Plane
 164          * (D) UV_UBWC_Plane
 165          *
 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.
 171          *
 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.
 178          *
 179          * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
 180          * and randomly accessible. There is no dependency between tiles.
 181          *
 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
 226          *
 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)
 239          * Extradata = 8k
 240          *
 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)
 244          *
 245          *
 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.
 264          *
 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
 272          * interlaced frame.
 273          *
 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.
 277          *
 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.
 285          *
 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.
 294          *
 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.
 298          *
 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
 387          *
 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)
 417          * Extradata = 8k
 418          *
 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)
 424          */
 425         COLOR_FMT_NV12_UBWC,
 426         /* Venus NV12 10-bit UBWC:
 427          * Compressed Macro-tile format for NV12.
 428          * Contains 4 planes in the following order -
 429          * (A) Y_Meta_Plane
 430          * (B) Y_UBWC_Plane
 431          * (C) UV_Meta_Plane
 432          * (D) UV_UBWC_Plane
 433          *
 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.
 439          *
 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.
 446          *
 447          * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
 448          * and randomly accessible. There is no dependency between tiles.
 449          *
 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
 494          *
 495          *
 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)
 508          * Extradata = 8k
 509          *
 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)
 513          */
 514         COLOR_FMT_NV12_BPP10_UBWC,
 515         /* Venus RGBA8888 format:
 516          * Contains 1 plane in the following order -
 517          * (A) RGBA plane
 518          *
 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
 533          *
 534          * RGB_Stride = align(Width * 4, 128)
 535          * RGB_Scanlines = align(Height, 32)
 536          * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
 537          * Extradata = 8k
 538          *
 539          * Total size = align(RGB_Plane_size + Extradata, 4096)
 540          */
 541         COLOR_FMT_RGBA8888,
 542         /* Venus RGBA8888 UBWC format:
 543          * Contains 2 planes in the following order -
 544          * (A) Meta plane
 545          * (B) RGBA plane
 546          *
 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
 575          *
 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)
 583          * Extradata = 8k
 584          *
 585          * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
 586          *              Extradata, 4096)
 587          */
 588         COLOR_FMT_RGBA8888_UBWC,
 589         /* Venus RGBA1010102 UBWC format:
 590          * Contains 2 planes in the following order -
 591          * (A) Meta plane
 592          * (B) RGBA plane
 593          *
 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
 622          *
 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)
 630          * Extradata = 8k
 631          *
 632          * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
 633          *              Extradata, 4096)
 634          */
 635         COLOR_FMT_RGBA1010102_UBWC,
 636         /* Venus RGB565 UBWC format:
 637          * Contains 2 planes in the following order -
 638          * (A) Meta plane
 639          * (B) RGB plane
 640          *
 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
 669          *
 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)
 677          * Extradata = 8k
 678          *
 679          * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
 680          *              Extradata, 4096)
 681          */
 682         COLOR_FMT_RGB565_UBWC,
 683         /* P010 UBWC:
 684          * Compressed Macro-tile format for NV12.
 685          * Contains 4 planes in the following order -
 686          * (A) Y_Meta_Plane
 687          * (B) Y_UBWC_Plane
 688          * (C) UV_Meta_Plane
 689          * (D) UV_UBWC_Plane
 690          *
 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.
 696          *
 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.
 703          *
 704          * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
 705          * and randomly accessible. There is no dependency between tiles.
 706          *
 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
 751          *
 752          *
 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)
 765          * Extradata = 8k
 766          *
 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)
 770          */
 771         COLOR_FMT_P010_UBWC,
 772         /* Venus P010:
 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.
 776          *
 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
 798          *
 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)
 807          */
 808         COLOR_FMT_P010,
 809 };
 810 
 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
 815 
 816 /*
 817  * Function arguments:
 818  * @color_fmt
 819  * @width
 820  * Progressive: width
 821  * Interlaced: width
 822  */
 823 static unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
 824 {
 825         unsigned int stride = 0;
 826 
 827         if (!width)
 828                 return 0;
 829 
 830         switch (color_fmt) {
 831         case COLOR_FMT_NV21:
 832         case COLOR_FMT_NV12:
 833         case COLOR_FMT_NV12_MVTB:
 834         case COLOR_FMT_NV12_UBWC:
 835                 stride = MSM_MEDIA_ALIGN(width, 128);
 836                 break;
 837         case COLOR_FMT_NV12_BPP10_UBWC:
 838                 stride = MSM_MEDIA_ALIGN(width, 192);
 839                 stride = MSM_MEDIA_ALIGN(stride * 4 / 3, 256);
 840                 break;
 841         case COLOR_FMT_P010_UBWC:
 842                 stride = MSM_MEDIA_ALIGN(width * 2, 256);
 843                 break;
 844         case COLOR_FMT_P010:
 845                 stride = MSM_MEDIA_ALIGN(width * 2, 128);
 846                 break;
 847         }
 848 
 849         return stride;
 850 }
 851 
 852 /*
 853  * Function arguments:
 854  * @color_fmt
 855  * @width
 856  * Progressive: width
 857  * Interlaced: width
 858  */
 859 static unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
 860 {
 861         unsigned int stride = 0;
 862 
 863         if (!width)
 864                 return 0;
 865 
 866         switch (color_fmt) {
 867         case COLOR_FMT_NV21:
 868         case COLOR_FMT_NV12:
 869         case COLOR_FMT_NV12_MVTB:
 870         case COLOR_FMT_NV12_UBWC:
 871                 stride = MSM_MEDIA_ALIGN(width, 128);
 872                 break;
 873         case COLOR_FMT_NV12_BPP10_UBWC:
 874                 stride = MSM_MEDIA_ALIGN(width, 192);
 875                 stride = MSM_MEDIA_ALIGN(stride * 4 / 3, 256);
 876                 break;
 877         case COLOR_FMT_P010_UBWC:
 878                 stride = MSM_MEDIA_ALIGN(width * 2, 256);
 879                 break;
 880         case COLOR_FMT_P010:
 881                 stride = MSM_MEDIA_ALIGN(width * 2, 128);
 882                 break;
 883         }
 884 
 885         return stride;
 886 }
 887 
 888 /*
 889  * Function arguments:
 890  * @color_fmt
 891  * @height
 892  * Progressive: height
 893  * Interlaced: (height+1)>>1
 894  */
 895 static unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
 896 {
 897         unsigned int sclines = 0;
 898 
 899         if (!height)
 900                 return 0;
 901 
 902         switch (color_fmt) {
 903         case COLOR_FMT_NV21:
 904         case COLOR_FMT_NV12:
 905         case COLOR_FMT_NV12_MVTB:
 906         case COLOR_FMT_NV12_UBWC:
 907         case COLOR_FMT_P010:
 908                 sclines = MSM_MEDIA_ALIGN(height, 32);
 909                 break;
 910         case COLOR_FMT_NV12_BPP10_UBWC:
 911         case COLOR_FMT_P010_UBWC:
 912                 sclines = MSM_MEDIA_ALIGN(height, 16);
 913                 break;
 914         }
 915 
 916         return sclines;
 917 }
 918 
 919 /*
 920  * Function arguments:
 921  * @color_fmt
 922  * @height
 923  * Progressive: height
 924  * Interlaced: (height+1)>>1
 925  */
 926 static unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
 927 {
 928         unsigned int sclines = 0;
 929 
 930         if (!height)
 931                 return 0;
 932 
 933         switch (color_fmt) {
 934         case COLOR_FMT_NV21:
 935         case COLOR_FMT_NV12:
 936         case COLOR_FMT_NV12_MVTB:
 937         case COLOR_FMT_NV12_BPP10_UBWC:
 938         case COLOR_FMT_P010_UBWC:
 939         case COLOR_FMT_P010:
 940                 sclines = MSM_MEDIA_ALIGN((height + 1) >> 1, 16);
 941                 break;
 942         case COLOR_FMT_NV12_UBWC:
 943                 sclines = MSM_MEDIA_ALIGN((height + 1) >> 1, 32);
 944                 break;
 945         }
 946 
 947         return sclines;
 948 }
 949 
 950 /*
 951  * Function arguments:
 952  * @color_fmt
 953  * @width
 954  * Progressive: width
 955  * Interlaced: width
 956  */
 957 static unsigned int VENUS_Y_META_STRIDE(int color_fmt, int width)
 958 {
 959         int y_tile_width = 0, y_meta_stride;
 960 
 961         if (!width)
 962                 return 0;
 963 
 964         switch (color_fmt) {
 965         case COLOR_FMT_NV12_UBWC:
 966         case COLOR_FMT_P010_UBWC:
 967                 y_tile_width = 32;
 968                 break;
 969         case COLOR_FMT_NV12_BPP10_UBWC:
 970                 y_tile_width = 48;
 971                 break;
 972         default:
 973                 return 0;
 974         }
 975 
 976         y_meta_stride = MSM_MEDIA_ROUNDUP(width, y_tile_width);
 977         return MSM_MEDIA_ALIGN(y_meta_stride, 64);
 978 }
 979 
 980 /*
 981  * Function arguments:
 982  * @color_fmt
 983  * @height
 984  * Progressive: height
 985  * Interlaced: (height+1)>>1
 986  */
 987 static unsigned int VENUS_Y_META_SCANLINES(int color_fmt, int height)
 988 {
 989         int y_tile_height = 0, y_meta_scanlines;
 990 
 991         if (!height)
 992                 return 0;
 993 
 994         switch (color_fmt) {
 995         case COLOR_FMT_NV12_UBWC:
 996                 y_tile_height = 8;
 997                 break;
 998         case COLOR_FMT_NV12_BPP10_UBWC:
 999         case COLOR_FMT_P010_UBWC:
1000                 y_tile_height = 4;
1001                 break;
1002         default:
1003                 return 0;
1004         }
1005 
1006         y_meta_scanlines = MSM_MEDIA_ROUNDUP(height, y_tile_height);
1007         return MSM_MEDIA_ALIGN(y_meta_scanlines, 16);
1008 }
1009 
1010 /*
1011  * Function arguments:
1012  * @color_fmt
1013  * @width
1014  * Progressive: width
1015  * Interlaced: width
1016  */
1017 static unsigned int VENUS_UV_META_STRIDE(int color_fmt, int width)
1018 {
1019         int uv_tile_width = 0, uv_meta_stride;
1020 
1021         if (!width)
1022                 return 0;
1023 
1024         switch (color_fmt) {
1025         case COLOR_FMT_NV12_UBWC:
1026         case COLOR_FMT_P010_UBWC:
1027                 uv_tile_width = 16;
1028                 break;
1029         case COLOR_FMT_NV12_BPP10_UBWC:
1030                 uv_tile_width = 24;
1031                 break;
1032         default:
1033                 return 0;
1034         }
1035 
1036         uv_meta_stride = MSM_MEDIA_ROUNDUP((width+1)>>1, uv_tile_width);
1037         return MSM_MEDIA_ALIGN(uv_meta_stride, 64);
1038 }
1039 
1040 /*
1041  * Function arguments:
1042  * @color_fmt
1043  * @height
1044  * Progressive: height
1045  * Interlaced: (height+1)>>1
1046  */
1047 static unsigned int VENUS_UV_META_SCANLINES(int color_fmt, int height)
1048 {
1049         int uv_tile_height = 0, uv_meta_scanlines;
1050 
1051         if (!height)
1052                 return 0;
1053 
1054         switch (color_fmt) {
1055         case COLOR_FMT_NV12_UBWC:
1056                 uv_tile_height = 8;
1057                 break;
1058         case COLOR_FMT_NV12_BPP10_UBWC:
1059         case COLOR_FMT_P010_UBWC:
1060                 uv_tile_height = 4;
1061                 break;
1062         default:
1063                 return 0;
1064         }
1065 
1066         uv_meta_scanlines = MSM_MEDIA_ROUNDUP((height+1)>>1, uv_tile_height);
1067         return MSM_MEDIA_ALIGN(uv_meta_scanlines, 16);
1068 }
1069 
1070 static unsigned int VENUS_RGB_STRIDE(int color_fmt, int width)
1071 {
1072         unsigned int alignment = 0, bpp = 4;
1073 
1074         if (!width)
1075                 return 0;
1076 
1077         switch (color_fmt) {
1078         case COLOR_FMT_RGBA8888:
1079                 alignment = 128;
1080                 break;
1081         case COLOR_FMT_RGB565_UBWC:
1082                 alignment = 256;
1083                 bpp = 2;
1084                 break;
1085         case COLOR_FMT_RGBA8888_UBWC:
1086         case COLOR_FMT_RGBA1010102_UBWC:
1087                 alignment = 256;
1088                 break;
1089         default:
1090                 return 0;
1091         }
1092 
1093         return MSM_MEDIA_ALIGN(width * bpp, alignment);
1094 }
1095 
1096 static unsigned int VENUS_RGB_SCANLINES(int color_fmt, int height)
1097 {
1098         unsigned int alignment = 0;
1099 
1100         if (!height)
1101                 return 0;
1102 
1103         switch (color_fmt) {
1104         case COLOR_FMT_RGBA8888:
1105                 alignment = 32;
1106                 break;
1107         case COLOR_FMT_RGBA8888_UBWC:
1108         case COLOR_FMT_RGBA1010102_UBWC:
1109         case COLOR_FMT_RGB565_UBWC:
1110                 alignment = 16;
1111                 break;
1112         default:
1113                 return 0;
1114         }
1115 
1116         return MSM_MEDIA_ALIGN(height, alignment);
1117 }
1118 
1119 static unsigned int VENUS_RGB_META_STRIDE(int color_fmt, int width)
1120 {
1121         int rgb_meta_stride;
1122 
1123         if (!width)
1124                 return 0;
1125 
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);
1132         }
1133 
1134         return 0;
1135 }
1136 
1137 static unsigned int VENUS_RGB_META_SCANLINES(int color_fmt, int height)
1138 {
1139         int rgb_meta_scanlines;
1140 
1141         if (!height)
1142                 return 0;
1143 
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);
1150         }
1151 
1152         return 0;
1153 }
1154 
1155 #endif

/* [<][>][^][v][top][bottom][index][help] */