1cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#ifndef __MEDIA_INFO_H__
2cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#define __MEDIA_INFO_H__
3cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
4cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#ifndef MSM_MEDIA_ALIGN
5cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#define MSM_MEDIA_ALIGN(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1)))
6cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#endif
7cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
8cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajenum color_fmts {
9cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	/* Venus NV12:
10cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
11cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
12cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * colour difference samples.
13cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
14cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <-------- Y/UV_Stride -------->
15cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <------- Width ------->
16cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  ^           ^
17cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
18cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  Height      |
19cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |          Y_Scanlines
20cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
21cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
22cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
23cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  V           |
24cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
25cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
26cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
27cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              V
28cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  ^
29cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |
30cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |
31cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  UV_Scanlines
32cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  |
33cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  V
34cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  --> Buffer size alignment
35cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
36cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Stride : Width aligned to 128
37cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Stride : Width aligned to 128
38cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Scanlines: Height aligned to 32
39cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Scanlines: Height/2 aligned to 16
40cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Total size = align((Y_Stride * Y_Scanlines
41cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *          + UV_Stride * UV_Scanlines + 4096), 4096)
42cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 */
43cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	COLOR_FMT_NV12,
44cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
45cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	/* Venus NV21:
46cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
47cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * by an interleaved V/U plane containing 8 bit 2x2 subsampled
48cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * colour difference samples.
49cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
50cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <-------- Y/UV_Stride -------->
51cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <------- Width ------->
52cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  ^           ^
53cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
54cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  Height      |
55cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |          Y_Scanlines
56cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
57cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
58cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |
59cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  V           |
60cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
61cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
62cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |
63cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              V
64cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * V U V U V U V U V U V U X X X X  ^
65cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * V U V U V U V U V U V U X X X X  |
66cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * V U V U V U V U V U V U X X X X  |
67cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * V U V U V U V U V U V U X X X X  UV_Scanlines
68cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  |
69cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  V
70cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  --> Padding & Buffer size alignment
71cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
72cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Stride : Width aligned to 128
73cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Stride : Width aligned to 128
74cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Scanlines: Height aligned to 32
75cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Scanlines: Height/2 aligned to 16
76cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Total size = align((Y_Stride * Y_Scanlines
77cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *          + UV_Stride * UV_Scanlines + 4096), 4096)
78cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 */
79cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	COLOR_FMT_NV21,
80cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	/* Venus NV12_MVTB:
81cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Two YUV 4:2:0 images/views one after the other
82cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * in a top-bottom layout, same as NV12
83cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * with a plane of 8 bit Y samples followed
84cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
85cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * colour difference samples.
86cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
87cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
88cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <-------- Y/UV_Stride -------->
89cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * <------- Width ------->
90cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  ^           ^               ^
91cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
92cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  Height      |               |
93cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |          Y_Scanlines      |
94cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
95cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
96cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
97cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  V           |               |
98cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |             View_1
99cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |               |
100cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |               |
101cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              V               |
102cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  ^                           |
103cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |                           |
104cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |                           |
105cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  UV_Scanlines                |
106cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  |                           |
107cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  V                           V
108cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  ^           ^               ^
109cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
110cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  Height      |               |
111cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |          Y_Scanlines      |
112cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
113cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
114cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  |           |               |
115cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y Y Y Y Y Y Y Y Y Y Y Y X X X X  V           |               |
116cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |             View_2
117cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |               |
118cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              |               |
119cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X              V               |
120cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  ^                           |
121cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |                           |
122cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  |                           |
123cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * U V U V U V U V U V U V X X X X  UV_Scanlines                |
124cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  |                           |
125cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  V                           V
126cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * X X X X X X X X X X X X X X X X  --> Buffer size alignment
127cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *
128cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Stride : Width aligned to 128
129cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Stride : Width aligned to 128
130cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Y_Scanlines: Height aligned to 32
131cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * UV_Scanlines: Height/2 aligned to 16
132cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * View_1 begin at: 0 (zero)
133cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * View_2 begin at: Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines
134cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 * Total size = align((2*(Y_Stride * Y_Scanlines)
135cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 *          + 2*(UV_Stride * UV_Scanlines) + 4096), 4096)
136cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	 */
137cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	COLOR_FMT_NV12_MVTB,
138cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj};
139cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
1408364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavanstatic inline unsigned int VENUS_EXTRADATA_SIZE(int width, int height)
1418364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan{
1428364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	(void)height;
1438364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	(void)width;
1448364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan
1458364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	/*
1468364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	 * In the future, calculate the size based on the w/h but just
1478364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	 * hardcode it for now since 8K satisfies all current usecases.
1488364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	 */
1498364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	return 8 * 1024;
1508364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan}
1518364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan
152cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
153cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
154cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int alignment, stride = 0;
155cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!width)
156cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
157cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
158cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
159cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV21:
160cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12:
161cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
162cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		alignment = 128;
163cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		stride = MSM_MEDIA_ALIGN(width, alignment);
164cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
165cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
166cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
167cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
168cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
169cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return stride;
170cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
171cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
172cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
173cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
174cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int alignment, stride = 0;
175cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!width)
176cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
177cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
178cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
179cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV21:
180cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12:
181cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
182cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		alignment = 128;
183cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		stride = MSM_MEDIA_ALIGN(width, alignment);
184cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
185cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
186cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
187cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
188cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
189cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return stride;
190cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
191cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
192cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
193cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
194cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int alignment, sclines = 0;
195cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!height)
196cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
197cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
198cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
199cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV21:
200cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12:
201cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
202cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		alignment = 32;
203cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		sclines = MSM_MEDIA_ALIGN(height, alignment);
204cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
205cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
206cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
207cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
208cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
209cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return sclines;
210cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
211cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
212cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
213cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
214cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int alignment, sclines = 0;
215cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!height)
216cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
217cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
218cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
219cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV21:
220cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12:
221cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
222cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		alignment = 16;
223cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		sclines = MSM_MEDIA_ALIGN(((height + 1) >> 1), alignment);
224cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
225cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
226cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
227cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
228cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
229cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return sclines;
230cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
231cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
232cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_BUFFER_SIZE(
233cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	int color_fmt, int width, int height)
234cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
2358364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan	const unsigned int extra_size = VENUS_EXTRADATA_SIZE(width, height);
236e781791a2525f5d6b444735b2f61b13539f203a9Praveen Chavan	unsigned int uv_alignment = 0, size = 0;
237cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int y_plane, uv_plane, y_stride,
238cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_stride, y_sclines, uv_sclines;
239cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!width || !height)
240cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
241cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
242cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	y_stride = VENUS_Y_STRIDE(color_fmt, width);
243cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	uv_stride = VENUS_UV_STRIDE(color_fmt, width);
244cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	y_sclines = VENUS_Y_SCANLINES(color_fmt, height);
245cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	uv_sclines = VENUS_UV_SCANLINES(color_fmt, height);
246cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
247cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV21:
248cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12:
249cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_alignment = 4096;
250cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		y_plane = y_stride * y_sclines;
251cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_plane = uv_stride * uv_sclines + uv_alignment;
252e781791a2525f5d6b444735b2f61b13539f203a9Praveen Chavan		size = y_plane + uv_plane + extra_size;
253cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		size = MSM_MEDIA_ALIGN(size, 4096);
254cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
255cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
256cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_alignment = 4096;
257cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		y_plane = y_stride * y_sclines;
2588364c0e5af2666f935c7526836ea8b4f67ae5ac3Praveen Chavan		uv_plane = uv_stride * uv_sclines + uv_alignment;
259cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		size = y_plane + uv_plane;
260e781791a2525f5d6b444735b2f61b13539f203a9Praveen Chavan		size = 2 * size + extra_size;
261cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		size = MSM_MEDIA_ALIGN(size, 4096);
262cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
263cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
264cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
265cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
266cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
267cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return size;
268cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
269cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
270cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajstatic inline unsigned int VENUS_VIEW2_OFFSET(
271cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	int color_fmt, int width, int height)
272cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj{
273cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int offset = 0;
274cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	unsigned int y_plane, uv_plane, y_stride,
275cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_stride, y_sclines, uv_sclines;
276cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	if (!width || !height)
277cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		goto invalid_input;
278cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
279cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	y_stride = VENUS_Y_STRIDE(color_fmt, width);
280cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	uv_stride = VENUS_UV_STRIDE(color_fmt, width);
281cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	y_sclines = VENUS_Y_SCANLINES(color_fmt, height);
282cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	uv_sclines = VENUS_UV_SCANLINES(color_fmt, height);
283cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	switch (color_fmt) {
284cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	case COLOR_FMT_NV12_MVTB:
285cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		y_plane = y_stride * y_sclines;
286cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		uv_plane = uv_stride * uv_sclines;
287cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		offset = y_plane + uv_plane;
288cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
289cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	default:
290cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj		break;
291cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	}
292cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramarajinvalid_input:
293cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj	return offset;
294cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj}
295cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj
296cd369140fd7fbed4ea06e15beb5ec45cbbfdd0ffNaveen Ramaraj#endif
297