| #ifndef __MEDIA_INFO_H__ |
| #define __MEDIA_INFO_H__ |
| |
| #ifndef MSM_MEDIA_ALIGN |
| #define MSM_MEDIA_ALIGN(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1))) |
| #endif |
| |
| enum color_fmts { |
| COLOR_FMT_NV12, |
| COLOR_FMT_NV21, |
| }; |
| |
| #define VENUS_Y_STRIDE(__color_fmt, __width) ({\ |
| unsigned int __alignment, __stride = 0; \ |
| if (__width) { \ |
| switch (__color_fmt) { \ |
| case COLOR_FMT_NV12: \ |
| __alignment = 128; \ |
| __stride = MSM_MEDIA_ALIGN(__width, __alignment);\ |
| break;\ |
| default:\ |
| break;\ |
| }\ |
| } \ |
| __stride;\ |
| }) |
| |
| #define VENUS_UV_STRIDE(__color_fmt, __width) ({\ |
| unsigned int __alignment, __stride = 0; \ |
| if (__width) {\ |
| switch (__color_fmt) { \ |
| case COLOR_FMT_NV12: \ |
| __alignment = 128; \ |
| __stride = MSM_MEDIA_ALIGN(__width, __alignment); \ |
| break; \ |
| default: \ |
| break; \ |
| } \ |
| } \ |
| __stride; \ |
| }) |
| |
| #define VENUS_Y_SCANLINES(__color_fmt, __height) ({ \ |
| unsigned int __alignment, __sclines = 0; \ |
| if (__height) {\ |
| switch (__color_fmt) { \ |
| case COLOR_FMT_NV12: \ |
| __alignment = 32; \ |
| __sclines = MSM_MEDIA_ALIGN(__height, __alignment); \ |
| break; \ |
| default: \ |
| break; \ |
| } \ |
| } \ |
| __sclines; \ |
| }) |
| |
| #define VENUS_UV_SCANLINES(__color_fmt, __height) ({\ |
| unsigned int __alignment, __sclines = 0; \ |
| if (__height) {\ |
| switch (__color_fmt) { \ |
| case COLOR_FMT_NV12: \ |
| __alignment = 16; \ |
| __sclines = MSM_MEDIA_ALIGN(((__height + 1) >> 1), __alignment); \ |
| break; \ |
| default: \ |
| break; \ |
| } \ |
| } \ |
| __sclines; \ |
| }) |
| |
| #define VENUS_BUFFER_SIZE( \ |
| __color_fmt, __width, __height) ({ \ |
| unsigned int __uv_alignment; \ |
| unsigned int __size = 0; \ |
| unsigned int __y_plane, __uv_plane, __y_stride, \ |
| __uv_stride, __y_sclines, __uv_sclines; \ |
| if (__width && __height) {\ |
| __y_stride = VENUS_Y_STRIDE(__color_fmt, __width); \ |
| __uv_stride = VENUS_UV_STRIDE(__color_fmt, __width); \ |
| __y_sclines = VENUS_Y_SCANLINES(__color_fmt, __height); \ |
| __uv_sclines = VENUS_UV_SCANLINES(__color_fmt, __height); \ |
| switch (__color_fmt) { \ |
| case COLOR_FMT_NV12: \ |
| __uv_alignment = 4096; \ |
| __y_plane = __y_stride * __y_sclines; \ |
| __uv_plane = __uv_stride * __uv_sclines + __uv_alignment; \ |
| __size = __y_plane + __uv_plane; \ |
| __size = MSM_MEDIA_ALIGN(__size, 4096); \ |
| break; \ |
| default: \ |
| break; \ |
| } \ |
| } \ |
| __size; \ |
| }) |
| |
| #endif |