1#ifndef __MEDIA_INFO_H__ 2#define __MEDIA_INFO_H__ 3 4#ifndef MSM_MEDIA_ALIGN 5#define MSM_MEDIA_ALIGN(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1))) 6#endif 7 8enum color_fmts { 9 COLOR_FMT_NV12, 10 COLOR_FMT_NV21, 11}; 12 13#define VENUS_Y_STRIDE(__color_fmt, __width) ({\ 14 unsigned int __alignment, __stride = 0; \ 15 if (__width) { \ 16 switch (__color_fmt) { \ 17 case COLOR_FMT_NV12: \ 18 __alignment = 128; \ 19 __stride = MSM_MEDIA_ALIGN(__width, __alignment);\ 20 break;\ 21 default:\ 22 break;\ 23 }\ 24 } \ 25 __stride;\ 26}) 27 28#define VENUS_UV_STRIDE(__color_fmt, __width) ({\ 29 unsigned int __alignment, __stride = 0; \ 30 if (__width) {\ 31 switch (__color_fmt) { \ 32 case COLOR_FMT_NV12: \ 33 __alignment = 128; \ 34 __stride = MSM_MEDIA_ALIGN(__width, __alignment); \ 35 break; \ 36 default: \ 37 break; \ 38 } \ 39 } \ 40 __stride; \ 41}) 42 43#define VENUS_Y_SCANLINES(__color_fmt, __height) ({ \ 44 unsigned int __alignment, __sclines = 0; \ 45 if (__height) {\ 46 switch (__color_fmt) { \ 47 case COLOR_FMT_NV12: \ 48 __alignment = 32; \ 49 __sclines = MSM_MEDIA_ALIGN(__height, __alignment); \ 50 break; \ 51 default: \ 52 break; \ 53 } \ 54 } \ 55 __sclines; \ 56}) 57 58#define VENUS_UV_SCANLINES(__color_fmt, __height) ({\ 59 unsigned int __alignment, __sclines = 0; \ 60 if (__height) {\ 61 switch (__color_fmt) { \ 62 case COLOR_FMT_NV12: \ 63 __alignment = 16; \ 64 __sclines = MSM_MEDIA_ALIGN(((__height + 1) >> 1), __alignment); \ 65 break; \ 66 default: \ 67 break; \ 68 } \ 69 } \ 70 __sclines; \ 71}) 72 73#define VENUS_BUFFER_SIZE( \ 74 __color_fmt, __width, __height) ({ \ 75 unsigned int __uv_alignment; \ 76 unsigned int __size = 0; \ 77 unsigned int __y_plane, __uv_plane, __y_stride, \ 78 __uv_stride, __y_sclines, __uv_sclines; \ 79 if (__width && __height) {\ 80 __y_stride = VENUS_Y_STRIDE(__color_fmt, __width); \ 81 __uv_stride = VENUS_UV_STRIDE(__color_fmt, __width); \ 82 __y_sclines = VENUS_Y_SCANLINES(__color_fmt, __height); \ 83 __uv_sclines = VENUS_UV_SCANLINES(__color_fmt, __height); \ 84 switch (__color_fmt) { \ 85 case COLOR_FMT_NV12: \ 86 __uv_alignment = 4096; \ 87 __y_plane = __y_stride * __y_sclines; \ 88 __uv_plane = __uv_stride * __uv_sclines + __uv_alignment; \ 89 __size = __y_plane + __uv_plane; \ 90 __size = MSM_MEDIA_ALIGN(__size, 4096); \ 91 break; \ 92 default: \ 93 break; \ 94 } \ 95 } \ 96 __size; \ 97}) 98 99#endif 100