forked from Qortal/Brooklyn
384 lines
16 KiB
C
384 lines
16 KiB
C
/*
|
|
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
|