mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
383 lines
16 KiB
383 lines
16 KiB
/* |
|
Copyright (c) 2012, Broadcom Europe Ltd |
|
All rights reserved. |
|
|
|
Redistribution and use in source and binary forms, with or without |
|
modification, are permitted provided that the following conditions are met: |
|
* Redistributions of source code must retain the above copyright |
|
notice, this list of conditions and the following disclaimer. |
|
* Redistributions in binary form must reproduce the above copyright |
|
notice, this list of conditions and the following disclaimer in the |
|
documentation and/or other materials provided with the distribution. |
|
* Neither the name of the copyright holder nor the |
|
names of its contributors may be used to endorse or promote products |
|
derived from this software without specific prior written permission. |
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
*/ |
|
|
|
#ifndef KHRN_INT_IMAGE_H |
|
#define KHRN_INT_IMAGE_H |
|
|
|
#include "interface/khronos/common/khrn_int_util.h" |
|
|
|
/****************************************************************************** |
|
formats |
|
******************************************************************************/ |
|
|
|
typedef enum { |
|
/* |
|
layout of KHRN_IMAGE_FORMAT_T bits |
|
|
|
When changing this, remember to change |
|
middleware/khronos/common/2708/khrn_image_4.inc too |
|
*/ |
|
|
|
IMAGE_FORMAT_MEM_LAYOUT_MASK = 0x7 << 0, |
|
IMAGE_FORMAT_MEM_LAYOUT_SHIFT = 0, |
|
IMAGE_FORMAT_MEM_LAYOUT_BC = 3, |
|
|
|
IMAGE_FORMAT_RSO = 0 << 0, /* raster scan order */ |
|
IMAGE_FORMAT_BRCM1 = 1 << 0, |
|
IMAGE_FORMAT_BRCM2 = 2 << 0, |
|
IMAGE_FORMAT_BRCM3 = 3 << 0, |
|
IMAGE_FORMAT_BRCM4 = 4 << 0, |
|
|
|
IMAGE_FORMAT_COMP_MASK = 0x3 << 6, |
|
|
|
IMAGE_FORMAT_UNCOMP = 0 << 6, |
|
IMAGE_FORMAT_ETC1 = 1 << 6, |
|
IMAGE_FORMAT_YUYV = 3 << 6, |
|
|
|
/* uncomp */ |
|
|
|
IMAGE_FORMAT_PIXEL_SIZE_MASK = 0x7 << 3, |
|
IMAGE_FORMAT_PIXEL_SIZE_SHIFT = 3, |
|
|
|
IMAGE_FORMAT_1 = 0 << 3, |
|
IMAGE_FORMAT_4 = 1 << 3, |
|
IMAGE_FORMAT_8 = 2 << 3, |
|
IMAGE_FORMAT_16 = 3 << 3, |
|
IMAGE_FORMAT_24 = 4 << 3, |
|
IMAGE_FORMAT_32 = 5 << 3, |
|
IMAGE_FORMAT_64 = 6 << 3, |
|
|
|
IMAGE_FORMAT_PIXEL_TYPE_MASK = 0x3 << 8, |
|
|
|
IMAGE_FORMAT_COLOR = 0 << 8, |
|
IMAGE_FORMAT_PALETTE = 1 << 8, |
|
IMAGE_FORMAT_SAMPLE = 2 << 8, |
|
IMAGE_FORMAT_DEPTH = 3 << 8, /* packed z and stencil */ |
|
|
|
/* uncomp, color */ |
|
|
|
IMAGE_FORMAT_RGB = 1 << 10, |
|
IMAGE_FORMAT_L = 1 << 11, |
|
IMAGE_FORMAT_A = 1 << 12, |
|
|
|
IMAGE_FORMAT_XBGRX = 0 << 13, /* r in low bits */ |
|
IMAGE_FORMAT_XRGBX = 1 << 13, /* r in high bits */ |
|
|
|
IMAGE_FORMAT_YUYV_STD = 0 << 13, /* Standard ordering */ |
|
IMAGE_FORMAT_YUYV_REV = 1 << 13, /* Reversed (UYVY) ordering */ |
|
|
|
IMAGE_FORMAT_AX = 0 << 14, /* alpha/x in high bits */ |
|
IMAGE_FORMAT_XA = 1 << 14, /* alpha/x in low bits */ |
|
|
|
IMAGE_FORMAT_PIXEL_LAYOUT_MASK = 0x7 << 15, |
|
|
|
/* pixel size used to differentiate between eg 4444 and 8888 */ |
|
/* unspecified (0) means one channel occupying entire pixel */ |
|
/* IMAGE_FORMAT_32 */ |
|
IMAGE_FORMAT_8888 = 1 << 15, |
|
/* IMAGE_FORMAT_24 */ |
|
IMAGE_FORMAT_888 = 1 << 15, |
|
/* IMAGE_FORMAT_16 */ |
|
IMAGE_FORMAT_4444 = 1 << 15, |
|
IMAGE_FORMAT_5551 = 2 << 15, /* (or 1555) */ |
|
IMAGE_FORMAT_565 = 3 << 15, |
|
IMAGE_FORMAT_88 = 4 << 15, |
|
|
|
IMAGE_FORMAT_PRE = 1 << 18, /* premultiplied (for vg) */ |
|
IMAGE_FORMAT_LIN = 1 << 19, /* linear (for vg) */ |
|
|
|
/* uncomp, depth */ |
|
|
|
IMAGE_FORMAT_Z = 1 << 10, |
|
IMAGE_FORMAT_STENCIL = 1 << 11, |
|
|
|
/* |
|
some IMAGE_FORMAT_Ts |
|
|
|
Components are listed with the most significant bits first. |
|
|
|
On little-endian systems, it is as if a pixel was loaded as a little-endian |
|
integer. This means they are in the *opposite* order to how they appear in memory (e.g. in ABGR_8888 |
|
format, the first byte would be the red component of the first pixel). |
|
|
|
On big-endian systems, it is as if a pixel was loaded as a big-endian integer. |
|
This means that the components are written in the same order that they appear in |
|
memory (e.g. in ABGR_8888 format, the first byte would be alpha). |
|
*/ |
|
|
|
#define IMAGE_FORMAT_PACK(A, B, C, D, E, F, G, H, I) \ |
|
(IMAGE_FORMAT_##A | IMAGE_FORMAT_##B | IMAGE_FORMAT_##C | IMAGE_FORMAT_##D | IMAGE_FORMAT_##E | \ |
|
IMAGE_FORMAT_##F | IMAGE_FORMAT_##G | IMAGE_FORMAT_##H | IMAGE_FORMAT_##I) |
|
#define IMAGE_FORMAT__ 0 |
|
|
|
RGBA_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, A, XRGBX, XA, 8888), |
|
BGRA_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, A, XBGRX, XA, 8888), |
|
ARGB_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, A, XRGBX, AX, 8888), |
|
ABGR_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, A, XBGRX, AX, 8888), |
|
RGBX_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, _, XRGBX, XA, 8888), |
|
BGRX_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, _, XBGRX, XA, 8888), |
|
XRGB_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, _, XRGBX, AX, 8888), |
|
XBGR_8888 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, COLOR , RGB, _, XBGRX, AX, 8888), |
|
RGB_888 = IMAGE_FORMAT_PACK(_, UNCOMP, 24, COLOR , RGB, _, XRGBX, _ , 888 ), |
|
BGR_888 = IMAGE_FORMAT_PACK(_, UNCOMP, 24, COLOR , RGB, _, XBGRX, _ , 888 ), |
|
RGBA_4444 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XRGBX, XA, 4444), |
|
BGRA_4444 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XBGRX, XA, 4444), |
|
ARGB_4444 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XRGBX, AX, 4444), |
|
ABGR_4444 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XBGRX, AX, 4444), |
|
RGBA_5551 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XRGBX, XA, 5551), |
|
BGRA_5551 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XBGRX, XA, 5551), |
|
ARGB_1555 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XRGBX, AX, 5551), |
|
ABGR_1555 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, A, XBGRX, AX, 5551), |
|
RGB_565 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, _, XRGBX, _ , 565 ), |
|
BGR_565 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , RGB, _, XBGRX, _ , 565 ), |
|
LA_88 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , L , A, _ , XA, 88 ), |
|
AL_88 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, COLOR , L , A, _ , AX, 88 ), |
|
L_8 = IMAGE_FORMAT_PACK(_, UNCOMP, 8 , COLOR , L , _, _ , _ , _ ), |
|
L_1 = IMAGE_FORMAT_PACK(_, UNCOMP, 1 , COLOR , L , _, _ , _ , _ ), |
|
A_8 = IMAGE_FORMAT_PACK(_, UNCOMP, 8 , COLOR , _ , A, _ , _ , _ ), |
|
A_4 = IMAGE_FORMAT_PACK(_, UNCOMP, 4 , COLOR , _ , A, _ , _ , _ ), |
|
A_1 = IMAGE_FORMAT_PACK(_, UNCOMP, 1 , COLOR , _ , A, _ , _ , _ ), |
|
PALETTE_4 = IMAGE_FORMAT_PACK(_, UNCOMP, 4 , PALETTE, _ , _, _ , _ , _ ), |
|
SAMPLE_16 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, SAMPLE , _ , _, _ , _ , _ ), |
|
SAMPLE_8 = IMAGE_FORMAT_PACK(_, UNCOMP, 8 , SAMPLE , _ , _, _ , _ , _ ), |
|
DEPTH_32 = IMAGE_FORMAT_PACK(_, UNCOMP, 32, DEPTH , Z, STENCIL, _, _ , _ ), |
|
DEPTH_16 = IMAGE_FORMAT_PACK(_, UNCOMP, 16, DEPTH , Z, _ , _, _ , _ ), |
|
ETC1 = IMAGE_FORMAT_PACK(_, ETC1 , _ , _ , _ , _, _ , _ , _ ), |
|
DEPTH_64 = IMAGE_FORMAT_PACK(_, UNCOMP, 64, DEPTH , Z, STENCIL, _, _ , _ ), |
|
YUV_422 = IMAGE_FORMAT_PACK(_, YUYV , _ , _ , _ , _, YUYV_STD , _ , _ ), |
|
YUV_422_REV = IMAGE_FORMAT_PACK(_, YUYV , _ , _ , _ , _, YUYV_REV , _ , _ ), |
|
|
|
#undef IMAGE_FORMAT__ |
|
#undef IMAGE_FORMAT_PACK |
|
|
|
/* texture unit formats */ |
|
ABGR_8888_TF = ABGR_8888 | IMAGE_FORMAT_BRCM1, |
|
ARGB_8888_TF = ARGB_8888 | IMAGE_FORMAT_BRCM1, |
|
RGBA_8888_TF = RGBA_8888 | IMAGE_FORMAT_BRCM1, |
|
XBGR_8888_TF = XBGR_8888 | IMAGE_FORMAT_BRCM1, |
|
XRGB_8888_TF = XRGB_8888 | IMAGE_FORMAT_BRCM1, |
|
RGBX_8888_TF = RGBX_8888 | IMAGE_FORMAT_BRCM1, |
|
RGBA_4444_TF = RGBA_4444 | IMAGE_FORMAT_BRCM1, |
|
RGBA_5551_TF = RGBA_5551 | IMAGE_FORMAT_BRCM1, |
|
RGB_565_TF = RGB_565 | IMAGE_FORMAT_BRCM1, |
|
BGR_565_TF = BGR_565 | IMAGE_FORMAT_BRCM1, |
|
L_8_TF = L_8 | IMAGE_FORMAT_BRCM1, |
|
A_8_TF = A_8 | IMAGE_FORMAT_BRCM1, |
|
AL_88_TF = AL_88 | IMAGE_FORMAT_BRCM1, |
|
LA_88_TF = LA_88 | IMAGE_FORMAT_BRCM1, |
|
ETC1_TF = ETC1 | IMAGE_FORMAT_BRCM1, |
|
PALETTE_4_TF = PALETTE_4 | IMAGE_FORMAT_BRCM1, |
|
SAMPLE_8_TF = SAMPLE_8 | IMAGE_FORMAT_BRCM1, |
|
SAMPLE_16_TF = SAMPLE_16 | IMAGE_FORMAT_BRCM1, |
|
L_1_TF = L_1 | IMAGE_FORMAT_BRCM1, |
|
A_4_TF = A_4 | IMAGE_FORMAT_BRCM1, |
|
A_1_TF = A_1 | IMAGE_FORMAT_BRCM1, |
|
DEPTH_16_TF = DEPTH_16 | IMAGE_FORMAT_BRCM1, |
|
DEPTH_32_TF = DEPTH_32 | IMAGE_FORMAT_BRCM1, |
|
|
|
/* their linear T equivalents */ |
|
ABGR_8888_LT = ABGR_8888 | IMAGE_FORMAT_BRCM2, |
|
ARGB_8888_LT = ARGB_8888 | IMAGE_FORMAT_BRCM2, |
|
RGBA_8888_LT = RGBA_8888 | IMAGE_FORMAT_BRCM2, |
|
XBGR_8888_LT = XBGR_8888 | IMAGE_FORMAT_BRCM2, |
|
XRGB_8888_LT = XRGB_8888 | IMAGE_FORMAT_BRCM2, |
|
RGBX_8888_LT = RGBX_8888 | IMAGE_FORMAT_BRCM2, |
|
RGBA_4444_LT = RGBA_4444 | IMAGE_FORMAT_BRCM2, |
|
RGBA_5551_LT = RGBA_5551 | IMAGE_FORMAT_BRCM2, |
|
RGB_565_LT = RGB_565 | IMAGE_FORMAT_BRCM2, |
|
L_8_LT = L_8 | IMAGE_FORMAT_BRCM2, |
|
A_8_LT = A_8 | IMAGE_FORMAT_BRCM2, |
|
AL_88_LT = AL_88 | IMAGE_FORMAT_BRCM2, |
|
LA_88_LT = LA_88 | IMAGE_FORMAT_BRCM2, |
|
ETC1_LT = ETC1 | IMAGE_FORMAT_BRCM2, |
|
PALETTE_4_LT = PALETTE_4 | IMAGE_FORMAT_BRCM2, |
|
SAMPLE_8_LT = SAMPLE_8 | IMAGE_FORMAT_BRCM2, |
|
SAMPLE_16_LT = SAMPLE_16 | IMAGE_FORMAT_BRCM2, |
|
L_1_LT = L_1 | IMAGE_FORMAT_BRCM2, |
|
A_4_LT = A_4 | IMAGE_FORMAT_BRCM2, |
|
A_1_LT = A_1 | IMAGE_FORMAT_BRCM2, |
|
DEPTH_16_LT = DEPTH_16 | IMAGE_FORMAT_BRCM2, |
|
DEPTH_32_LT = DEPTH_32 | IMAGE_FORMAT_BRCM2, |
|
|
|
/* some raster order formats */ |
|
RGBA_8888_RSO = RGBA_8888 | IMAGE_FORMAT_RSO, |
|
BGRA_8888_RSO = BGRA_8888 | IMAGE_FORMAT_RSO, |
|
ARGB_8888_RSO = ARGB_8888 | IMAGE_FORMAT_RSO, |
|
ABGR_8888_RSO = ABGR_8888 | IMAGE_FORMAT_RSO, |
|
RGBX_8888_RSO = RGBX_8888 | IMAGE_FORMAT_RSO, |
|
BGRX_8888_RSO = BGRX_8888 | IMAGE_FORMAT_RSO, |
|
XRGB_8888_RSO = XRGB_8888 | IMAGE_FORMAT_RSO, |
|
XBGR_8888_RSO = XBGR_8888 | IMAGE_FORMAT_RSO, |
|
BGR_888_RSO = BGR_888 | IMAGE_FORMAT_RSO, |
|
RGB_888_RSO = RGB_888 | IMAGE_FORMAT_RSO, |
|
RGBA_4444_RSO = RGBA_4444 | IMAGE_FORMAT_RSO, |
|
BGRA_4444_RSO = BGRA_4444 | IMAGE_FORMAT_RSO, |
|
ARGB_4444_RSO = ARGB_4444 | IMAGE_FORMAT_RSO, |
|
ABGR_4444_RSO = ABGR_4444 | IMAGE_FORMAT_RSO, |
|
RGBA_5551_RSO = RGBA_5551 | IMAGE_FORMAT_RSO, |
|
BGRA_5551_RSO = BGRA_5551 | IMAGE_FORMAT_RSO, |
|
ARGB_1555_RSO = ARGB_1555 | IMAGE_FORMAT_RSO, |
|
ABGR_1555_RSO = ABGR_1555 | IMAGE_FORMAT_RSO, |
|
RGB_565_RSO = RGB_565 | IMAGE_FORMAT_RSO, |
|
BGR_565_RSO = BGR_565 | IMAGE_FORMAT_RSO, |
|
AL_88_RSO = AL_88 | IMAGE_FORMAT_RSO, |
|
LA_88_RSO = LA_88 | IMAGE_FORMAT_RSO, |
|
L_8_RSO = L_8 | IMAGE_FORMAT_RSO, |
|
L_1_RSO = L_1 | IMAGE_FORMAT_RSO, |
|
A_8_RSO = A_8 | IMAGE_FORMAT_RSO, |
|
A_4_RSO = A_4 | IMAGE_FORMAT_RSO, |
|
A_1_RSO = A_1 | IMAGE_FORMAT_RSO, |
|
|
|
YUV_422_RSO = YUV_422 | IMAGE_FORMAT_RSO, |
|
YUV_422_REV_RSO = YUV_422_REV | IMAGE_FORMAT_RSO, |
|
|
|
ARGB_8888_PRE = ARGB_8888 | IMAGE_FORMAT_PRE, |
|
|
|
/* TLB dump formats */ |
|
DEPTH_32_TLBD = DEPTH_32 | IMAGE_FORMAT_BRCM4, |
|
DEPTH_COL_64_TLBD = DEPTH_64 | IMAGE_FORMAT_BRCM4, |
|
COL_32_TLBD = BGRA_8888 | IMAGE_FORMAT_BRCM4, |
|
|
|
IMAGE_FORMAT_INVALID = 0xffffffff |
|
} KHRN_IMAGE_FORMAT_T; |
|
|
|
static INLINE bool khrn_image_is_rso(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_MEM_LAYOUT_MASK) == IMAGE_FORMAT_RSO; |
|
} |
|
|
|
static INLINE bool khrn_image_is_brcm1(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_MEM_LAYOUT_MASK) == IMAGE_FORMAT_BRCM1; |
|
} |
|
|
|
static INLINE bool khrn_image_is_brcm2(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_MEM_LAYOUT_MASK) == IMAGE_FORMAT_BRCM2; |
|
} |
|
|
|
static INLINE KHRN_IMAGE_FORMAT_T khrn_image_to_rso_format(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (KHRN_IMAGE_FORMAT_T)((format & ~IMAGE_FORMAT_MEM_LAYOUT_MASK) | IMAGE_FORMAT_RSO); |
|
} |
|
|
|
static INLINE KHRN_IMAGE_FORMAT_T khrn_image_to_tf_format(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (KHRN_IMAGE_FORMAT_T)((format & ~IMAGE_FORMAT_MEM_LAYOUT_MASK) | IMAGE_FORMAT_BRCM1); |
|
} |
|
|
|
static INLINE KHRN_IMAGE_FORMAT_T khrn_image_to_lt_format(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (KHRN_IMAGE_FORMAT_T)((format & ~IMAGE_FORMAT_MEM_LAYOUT_MASK) | IMAGE_FORMAT_BRCM2); |
|
} |
|
|
|
static INLINE bool khrn_image_is_uncomp(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_COMP_MASK) == IMAGE_FORMAT_UNCOMP; |
|
} |
|
|
|
static INLINE bool khrn_image_is_color(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & (IMAGE_FORMAT_COMP_MASK | IMAGE_FORMAT_PIXEL_TYPE_MASK)) == (IMAGE_FORMAT_UNCOMP | IMAGE_FORMAT_COLOR); |
|
} |
|
|
|
static INLINE bool khrn_image_is_gray(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & (IMAGE_FORMAT_L)) != 0; |
|
} |
|
|
|
static INLINE bool khrn_image_is_paletted(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & (IMAGE_FORMAT_COMP_MASK | IMAGE_FORMAT_PIXEL_TYPE_MASK)) == (IMAGE_FORMAT_UNCOMP | IMAGE_FORMAT_PALETTE); |
|
} |
|
|
|
static INLINE bool khrn_image_is_depth(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & (IMAGE_FORMAT_COMP_MASK | IMAGE_FORMAT_PIXEL_TYPE_MASK)) == (IMAGE_FORMAT_UNCOMP | IMAGE_FORMAT_DEPTH); |
|
} |
|
|
|
static INLINE bool khrn_image_is_etc1(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_COMP_MASK) == IMAGE_FORMAT_ETC1; |
|
} |
|
|
|
static INLINE bool khrn_image_is_yuv422(KHRN_IMAGE_FORMAT_T format) |
|
{ |
|
vcos_assert(format != IMAGE_FORMAT_INVALID); |
|
return (format & IMAGE_FORMAT_COMP_MASK) == IMAGE_FORMAT_YUYV; |
|
} |
|
|
|
extern uint32_t khrn_image_get_bpp(KHRN_IMAGE_FORMAT_T format); |
|
|
|
extern uint32_t khrn_image_get_red_size(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_green_size(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_blue_size(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_alpha_size(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_z_size(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_stencil_size(KHRN_IMAGE_FORMAT_T format); |
|
|
|
extern uint32_t khrn_image_get_log2_brcm2_width(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_log2_brcm2_height(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_log2_brcm1_width(KHRN_IMAGE_FORMAT_T format); |
|
extern uint32_t khrn_image_get_log2_brcm1_height(KHRN_IMAGE_FORMAT_T format); |
|
|
|
/****************************************************************************** |
|
image handling |
|
******************************************************************************/ |
|
|
|
typedef struct { |
|
KHRN_IMAGE_FORMAT_T format; |
|
|
|
uint16_t width; |
|
uint16_t height; |
|
|
|
int32_t stride; /* in bytes */ |
|
|
|
void *aux; |
|
void *storage; |
|
} KHRN_IMAGE_WRAP_T; |
|
|
|
extern uint32_t khrn_image_pad_width(KHRN_IMAGE_FORMAT_T format, uint32_t width); |
|
extern uint32_t khrn_image_pad_height(KHRN_IMAGE_FORMAT_T format, uint32_t height); |
|
extern uint32_t khrn_image_get_stride(KHRN_IMAGE_FORMAT_T format, uint32_t width); |
|
extern uint32_t khrn_image_get_size(KHRN_IMAGE_FORMAT_T format, uint32_t width, uint32_t height); |
|
|
|
extern void khrn_image_wrap(KHRN_IMAGE_WRAP_T *wrap, KHRN_IMAGE_FORMAT_T format, uint32_t width, uint32_t height, int32_t stride, void *storage); |
|
|
|
#endif
|
|
|