diff options
Diffstat (limited to 'kernel-headers/media/msm_media_info.h')
-rw-r--r-- | kernel-headers/media/msm_media_info.h | 305 |
1 files changed, 276 insertions, 29 deletions
diff --git a/kernel-headers/media/msm_media_info.h b/kernel-headers/media/msm_media_info.h index 8297787..ae72558 100644 --- a/kernel-headers/media/msm_media_info.h +++ b/kernel-headers/media/msm_media_info.h @@ -1,37 +1,284 @@ -/**************************************************************************** - **************************************************************************** - *** - *** This header was automatically generated from a Linux kernel header - *** of the same name, to make information necessary for userspace to - *** call into the kernel available to libc. It contains only constants, - *** structures, and macros generated from the original header, and thus, - *** contains no copyrightable information. - *** - *** To edit the content of this header, modify the corresponding - *** source file (e.g. under external/kernel-headers/original/) then - *** run bionic/libc/kernel/tools/update_all.py - *** - *** Any manual change here will be lost the next time this script will - *** be run. You've been warned! - *** - **************************************************************************** - ****************************************************************************/ #ifndef __MEDIA_INFO_H__ #define __MEDIA_INFO_H__ + #ifndef MSM_MEDIA_ALIGN #define MSM_MEDIA_ALIGN(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1))) -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #endif + enum color_fmts { - COLOR_FMT_NV12, - COLOR_FMT_NV21, -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ + /* Venus NV12: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * U V U V U V U V U V U V X X X X ^ + * U V U V U V U V U V U V X X X X | + * U V U V U V U V U V U V X X X X | + * U V U V U V U V U V U V X X X X UV_Scanlines + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * X X X X X X X X X X X X X X X X --> Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * Total size = align((Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines + 4096), 4096) + */ + COLOR_FMT_NV12, + + /* Venus NV21: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved V/U plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * V U V U V U V U V U V U X X X X ^ + * V U V U V U V U V U V U X X X X | + * V U V U V U V U V U V U X X X X | + * V U V U V U V U V U V U X X X X UV_Scanlines + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * X X X X X X X X X X X X X X X X --> Padding & Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * Total size = align((Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines + 4096), 4096) + */ + COLOR_FMT_NV21, + /* Venus NV12_MVTB: + * Two YUV 4:2:0 images/views one after the other + * in a top-bottom layout, same as NV12 + * with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | | + * X X X X X X X X X X X X X X X X | View_1 + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V | + * U V U V U V U V U V U V X X X X ^ | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X UV_Scanlines | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V V + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | | + * X X X X X X X X X X X X X X X X | View_2 + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V | + * U V U V U V U V U V U V X X X X ^ | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X UV_Scanlines | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V V + * X X X X X X X X X X X X X X X X --> Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * View_1 begin at: 0 (zero) + * View_2 begin at: Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines + * Total size = align((2*(Y_Stride * Y_Scanlines) + * + 2*(UV_Stride * UV_Scanlines) + 4096), 4096) + */ + COLOR_FMT_NV12_MVTB, }; -#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; }) -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#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 +static inline unsigned int VENUS_Y_STRIDE(int color_fmt, int width) +{ + unsigned int alignment, stride = 0; + if (!width) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +static inline unsigned int VENUS_UV_STRIDE(int color_fmt, int width) +{ + unsigned int alignment, stride = 0; + if (!width) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +static inline unsigned int VENUS_Y_SCANLINES(int color_fmt, int height) +{ + unsigned int alignment, sclines = 0; + if (!height) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 32; + sclines = MSM_MEDIA_ALIGN(height, alignment); + break; + default: + break; + } +invalid_input: + return sclines; +} + +static inline unsigned int VENUS_UV_SCANLINES(int color_fmt, int height) +{ + unsigned int alignment, sclines = 0; + if (!height) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 16; + sclines = MSM_MEDIA_ALIGN(((height + 1) >> 1), alignment); + break; + default: + break; + } +invalid_input: + return sclines; +} + +static inline unsigned int VENUS_BUFFER_SIZE( + int color_fmt, int width, int 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) + goto invalid_input; + + 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_NV21: + 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; + case COLOR_FMT_NV12_MVTB: + uv_alignment = 4096; + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines; + size = y_plane + uv_plane; + size = 2 * size + uv_alignment; + size = MSM_MEDIA_ALIGN(size, 4096); + break; + default: + break; + } +invalid_input: + return size; +} + +static inline unsigned int VENUS_VIEW2_OFFSET( + int color_fmt, int width, int height) +{ + unsigned int offset = 0; + unsigned int y_plane, uv_plane, y_stride, + uv_stride, y_sclines, uv_sclines; + if (!width || !height) + goto invalid_input; + + 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_MVTB: + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines; + offset = y_plane + uv_plane; + break; + default: + break; + } +invalid_input: + return offset; +} + +#endif |