Blame include/freerdp/primitives.h

Packit 1fb8d4
/* primitives.h
Packit 1fb8d4
 * vi:ts=4 sw=4
Packit 1fb8d4
 *
Packit 1fb8d4
 * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
Packit 1fb8d4
 * not use this file except in compliance with the License. You may obtain
Packit 1fb8d4
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
Packit 1fb8d4
 * or implied. See the License for the specific language governing
Packit 1fb8d4
 * permissions and limitations under the License.  Algorithms used by
Packit 1fb8d4
 * this code may be covered by patents by HP, Microsoft, or other parties.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifdef __GNUC__
Packit 1fb8d4
# pragma once
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_PRIMITIVES_H
Packit 1fb8d4
#define FREERDP_PRIMITIVES_H
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/api.h>
Packit 1fb8d4
#include <freerdp/types.h>
Packit 1fb8d4
#include <freerdp/codec/color.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/platform.h>
Packit 1fb8d4
Packit 1fb8d4
typedef INT32 pstatus_t;				/* match IppStatus. */
Packit 1fb8d4
#define PRIMITIVES_SUCCESS		(0)		/* match ippStsNoErr */
Packit 1fb8d4
Packit 1fb8d4
/* Simple macro for address of an x,y location in 2d 4-byte memory block */
Packit 1fb8d4
#define PIXMAP4_ADDR(_dst_, _x_, _y_, _span_) \
Packit 1fb8d4
	((void *) (((BYTE *) (_dst_)) + (((_x_) + (_y_)*(_span_)) << 2)))
Packit 1fb8d4
Packit 1fb8d4
#define PRIM_X86_MMX_AVAILABLE					(1U<<0)
Packit 1fb8d4
#define PRIM_X86_3DNOW_AVAILABLE				(1U<<1)
Packit 1fb8d4
#define PRIM_X86_3DNOW_PREFETCH_AVAILABLE		(1U<<2)
Packit 1fb8d4
#define PRIM_X86_SSE_AVAILABLE					(1U<<3)
Packit 1fb8d4
#define PRIM_X86_SSE2_AVAILABLE					(1U<<4)
Packit 1fb8d4
#define PRIM_X86_SSE3_AVAILABLE					(1U<<5)
Packit 1fb8d4
#define PRIM_X86_SSSE3_AVAILABLE				(1U<<6)
Packit 1fb8d4
#define PRIM_X86_SSE41_AVAILABLE				(1U<<7)
Packit 1fb8d4
#define PRIM_X86_SSE42_AVAILABLE				(1U<<8)
Packit 1fb8d4
#define PRIM_X86_AVX_AVAILABLE					(1U<<9)
Packit 1fb8d4
#define PRIM_X86_FMA_AVAILABLE					(1U<<10)
Packit 1fb8d4
#define PRIM_X86_AVX_AES_AVAILABLE				(1U<<11)
Packit 1fb8d4
#define PRIM_X86_AVX2_AVAILABLE					(1U<<12)
Packit 1fb8d4
Packit 1fb8d4
#define PRIM_ARM_VFP1_AVAILABLE					(1U<<0)
Packit 1fb8d4
#define PRIM_ARM_VFP2_AVAILABLE					(1U<<1)
Packit 1fb8d4
#define PRIM_ARM_VFP3_AVAILABLE					(1U<<2)
Packit 1fb8d4
#define PRIM_ARM_VFP4_AVAILABLE					(1U<<3)
Packit 1fb8d4
#define PRIM_ARM_FPA_AVAILABLE					(1U<<4)
Packit 1fb8d4
#define PRIM_ARM_FPE_AVAILABLE					(1U<<5)
Packit 1fb8d4
#define PRIM_ARM_IWMMXT_AVAILABLE				(1U<<6)
Packit 1fb8d4
#define PRIM_ARM_NEON_AVAILABLE					(1U<<7)
Packit 1fb8d4
Packit 1fb8d4
/* Structures compatible with IPP */
Packit 1fb8d4
typedef struct
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 width;
Packit 1fb8d4
	UINT32 height;
Packit 1fb8d4
} prim_size_t;		/* like IppiSize */
Packit 1fb8d4
Packit 1fb8d4
typedef enum
Packit 1fb8d4
{
Packit 1fb8d4
	AVC444_LUMA,
Packit 1fb8d4
	AVC444_CHROMAv1,
Packit 1fb8d4
	AVC444_CHROMAv2
Packit 1fb8d4
} avc444_frame_type;
Packit 1fb8d4
Packit 1fb8d4
/* Function prototypes for all of the supported primitives. */
Packit 1fb8d4
typedef pstatus_t (*__copy_t)(
Packit 1fb8d4
    const void* pSrc,
Packit 1fb8d4
    void* pDst,
Packit 1fb8d4
    INT32 bytes);
Packit 1fb8d4
typedef pstatus_t (*__copy_8u_t)(
Packit 1fb8d4
    const BYTE* pSrc,
Packit 1fb8d4
    BYTE* pDst,
Packit 1fb8d4
    INT32 len);
Packit 1fb8d4
typedef pstatus_t (*__copy_8u_AC4r_t)(
Packit 1fb8d4
    const BYTE* pSrc,
Packit 1fb8d4
    INT32 srcStep,	/* bytes */
Packit 1fb8d4
    BYTE* pDst,
Packit 1fb8d4
    INT32 dstStep,	/* bytes */
Packit 1fb8d4
    INT32 width,  INT32 height);	/* pixels */
Packit 1fb8d4
typedef pstatus_t (*__set_8u_t)(
Packit 1fb8d4
    BYTE val,
Packit 1fb8d4
    BYTE* pDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__set_32s_t)(
Packit 1fb8d4
    INT32 val,
Packit 1fb8d4
    INT32* pDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__set_32u_t)(
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    UINT32* pDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__zero_t)(
Packit 1fb8d4
    void* pDst,
Packit 1fb8d4
    size_t bytes);
Packit 1fb8d4
typedef pstatus_t (*__alphaComp_argb_t)(
Packit 1fb8d4
    const BYTE* pSrc1,  UINT32 src1Step,
Packit 1fb8d4
    const BYTE* pSrc2,  UINT32 src2Step,
Packit 1fb8d4
    BYTE* pDst,  UINT32 dstStep,
Packit 1fb8d4
    UINT32 width,  UINT32 height);
Packit 1fb8d4
typedef pstatus_t (*__add_16s_t)(
Packit 1fb8d4
    const INT16* pSrc1,
Packit 1fb8d4
    const INT16* pSrc2,
Packit 1fb8d4
    INT16* pDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__lShiftC_16s_t)(
Packit 1fb8d4
    const INT16* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    INT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__lShiftC_16u_t)(
Packit 1fb8d4
    const UINT16* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    UINT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__rShiftC_16s_t)(
Packit 1fb8d4
    const INT16* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    INT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__rShiftC_16u_t)(
Packit 1fb8d4
    const UINT16* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    UINT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__shiftC_16s_t)(
Packit 1fb8d4
    const INT16* pSrc,
Packit 1fb8d4
    INT32 val,
Packit 1fb8d4
    INT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__shiftC_16u_t)(
Packit 1fb8d4
    const UINT16* pSrc,
Packit 1fb8d4
    INT32 val,
Packit 1fb8d4
    UINT16* pSrcDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__sign_16s_t)(
Packit 1fb8d4
    const INT16* pSrc,
Packit 1fb8d4
    INT16* pDst,
Packit 1fb8d4
    UINT32 len);
Packit 1fb8d4
typedef pstatus_t (*__yCbCrToRGB_16s8u_P3AC4R_t)(
Packit 1fb8d4
    const INT16* pSrc[3], UINT32 srcStep,
Packit 1fb8d4
    BYTE* pDst, UINT32 dstStep, UINT32 DstFormat,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__yCbCrToRGB_16s16s_P3P3_t)(
Packit 1fb8d4
    const INT16* pSrc[3],  INT32 srcStep,
Packit 1fb8d4
    INT16* pDst[3],  INT32 dstStep,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__RGBToYCbCr_16s16s_P3P3_t)(
Packit 1fb8d4
    const INT16* pSrc[3],  INT32 srcStep,
Packit 1fb8d4
    INT16* pDst[3],  INT32 dstStep,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__RGBToRGB_16s8u_P3AC4R_t)(
Packit 1fb8d4
    const INT16* const pSrc[3],  UINT32 srcStep,
Packit 1fb8d4
    BYTE* pDst,  UINT32 dstStep, UINT32 DstFormat,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__YCoCgToRGB_8u_AC4R_t)(
Packit 1fb8d4
    const BYTE* pSrc, INT32 srcStep,
Packit 1fb8d4
    BYTE* pDst, UINT32 DstFormat, INT32 dstStep,
Packit 1fb8d4
    UINT32 width, UINT32 height,
Packit 1fb8d4
    UINT8 shift,
Packit 1fb8d4
    BOOL withAlpha);
Packit 1fb8d4
typedef pstatus_t (*__RGB565ToARGB_16u32u_C3C4_t)(
Packit 1fb8d4
    const UINT16* pSrc, INT32 srcStep,
Packit 1fb8d4
    UINT32* pDst, INT32 dstStep,
Packit 1fb8d4
    UINT32 width, UINT32 height,
Packit 1fb8d4
    UINT32 format);
Packit 1fb8d4
typedef pstatus_t (*__YUV420ToRGB_8u_P3AC4R_t)(
Packit 1fb8d4
    const BYTE* pSrc[3], const UINT32 srcStep[3],
Packit 1fb8d4
    BYTE* pDst, UINT32 dstStep, UINT32 DstFormat,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__YUV444ToRGB_8u_P3AC4R_t)(
Packit 1fb8d4
    const BYTE* pSrc[3], const UINT32 srcStep[3],
Packit 1fb8d4
    BYTE* pDst, UINT32 dstStep, UINT32 DstFormat,
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__RGBToYUV420_8u_P3AC4R_t)(
Packit 1fb8d4
    const BYTE* pSrc, UINT32 SrcFormat, UINT32 srcStep,
Packit 1fb8d4
    BYTE* pDst[3], UINT32 dstStep[3],
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__RGBToYUV444_8u_P3AC4R_t)(
Packit 1fb8d4
    const BYTE* pSrc, UINT32 SrcFormat, UINT32 srcStep,
Packit 1fb8d4
    BYTE* pDst[3], UINT32 dstStep[3],
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__YUV420CombineToYUV444_t)(
Packit 1fb8d4
    avc444_frame_type type,
Packit 1fb8d4
    const BYTE* pSrc[3], const UINT32 srcStep[3],
Packit 1fb8d4
    UINT32 nWidth, UINT32 nHeight,
Packit 1fb8d4
    BYTE* pDst[3], const UINT32 dstStep[3],
Packit 1fb8d4
    const RECTANGLE_16* roi);
Packit 1fb8d4
typedef pstatus_t (*__YUV444SplitToYUV420_t)(
Packit 1fb8d4
    const BYTE* pSrc[3], const UINT32 srcStep[3],
Packit 1fb8d4
    BYTE* pMainDst[3], const UINT32 dstMainStep[3],
Packit 1fb8d4
    BYTE* pAuxDst[3], const UINT32 srcAuxStep[3],
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__RGBToAVC444YUV_t)(
Packit 1fb8d4
    const BYTE* pSrc, UINT32 srcFormat, UINT32 srcStep,
Packit 1fb8d4
    BYTE* pMainDst[3], const UINT32 dstMainStep[3],
Packit 1fb8d4
    BYTE* pAuxDst[3], const UINT32 dstAuxStep[3],
Packit 1fb8d4
    const prim_size_t* roi);
Packit 1fb8d4
typedef pstatus_t (*__andC_32u_t)(
Packit 1fb8d4
    const UINT32* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    UINT32* pDst,
Packit 1fb8d4
    INT32 len);
Packit 1fb8d4
typedef pstatus_t (*__orC_32u_t)(
Packit 1fb8d4
    const UINT32* pSrc,
Packit 1fb8d4
    UINT32 val,
Packit 1fb8d4
    UINT32* pDst,
Packit 1fb8d4
    INT32 len);
Packit 1fb8d4
Packit 1fb8d4
typedef struct
Packit 1fb8d4
{
Packit 1fb8d4
	/* Memory-to-memory copy routines */
Packit 1fb8d4
	__copy_t copy;						/* memcpy/memmove, basically */
Packit 1fb8d4
	__copy_8u_t copy_8u;				/* more strongly typed */
Packit 1fb8d4
	__copy_8u_AC4r_t copy_8u_AC4r;		/* pixel copy function */
Packit 1fb8d4
	/* Memory setting routines */
Packit 1fb8d4
	__set_8u_t set_8u;					/* memset, basically */
Packit 1fb8d4
	__set_32s_t set_32s;
Packit 1fb8d4
	__set_32u_t set_32u;
Packit 1fb8d4
	__zero_t zero;						/* bzero or faster */
Packit 1fb8d4
	/* Arithmetic functions */
Packit 1fb8d4
	__add_16s_t add_16s;
Packit 1fb8d4
	/* And/or */
Packit 1fb8d4
	__andC_32u_t andC_32u;
Packit 1fb8d4
	__orC_32u_t orC_32u;
Packit 1fb8d4
	/* Shifts */
Packit 1fb8d4
	__lShiftC_16s_t lShiftC_16s;
Packit 1fb8d4
	__lShiftC_16u_t lShiftC_16u;
Packit 1fb8d4
	__rShiftC_16s_t rShiftC_16s;
Packit 1fb8d4
	__rShiftC_16u_t rShiftC_16u;
Packit 1fb8d4
	__shiftC_16s_t   shiftC_16s;
Packit 1fb8d4
	__shiftC_16u_t   shiftC_16u;
Packit 1fb8d4
	/* Alpha Composition */
Packit 1fb8d4
	__alphaComp_argb_t alphaComp_argb;
Packit 1fb8d4
	/* Sign */
Packit 1fb8d4
	__sign_16s_t sign_16s;
Packit 1fb8d4
	/* Color conversions */
Packit 1fb8d4
	__yCbCrToRGB_16s8u_P3AC4R_t yCbCrToRGB_16s8u_P3AC4R;
Packit 1fb8d4
	__yCbCrToRGB_16s16s_P3P3_t yCbCrToRGB_16s16s_P3P3;
Packit 1fb8d4
	__RGBToYCbCr_16s16s_P3P3_t RGBToYCbCr_16s16s_P3P3;
Packit 1fb8d4
	__RGBToRGB_16s8u_P3AC4R_t RGBToRGB_16s8u_P3AC4R;
Packit 1fb8d4
	__YCoCgToRGB_8u_AC4R_t YCoCgToRGB_8u_AC4R;
Packit 1fb8d4
	__YUV420ToRGB_8u_P3AC4R_t YUV420ToRGB_8u_P3AC4R;
Packit 1fb8d4
	__RGBToYUV420_8u_P3AC4R_t RGBToYUV420_8u_P3AC4R;
Packit 1fb8d4
	__RGBToYUV444_8u_P3AC4R_t RGBToYUV444_8u_P3AC4R;
Packit 1fb8d4
	__YUV420CombineToYUV444_t YUV420CombineToYUV444;
Packit 1fb8d4
	__YUV444SplitToYUV420_t YUV444SplitToYUV420;
Packit 1fb8d4
	__YUV444ToRGB_8u_P3AC4R_t YUV444ToRGB_8u_P3AC4R;
Packit 1fb8d4
	__RGBToAVC444YUV_t RGBToAVC444YUV;
Packit 1fb8d4
	__RGBToAVC444YUV_t RGBToAVC444YUVv2;
Packit 1fb8d4
} primitives_t;
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
extern "C" {
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
FREERDP_API primitives_t* primitives_get(void);
Packit 1fb8d4
FREERDP_API primitives_t* primitives_get_generic(void);
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_PRIMITIVES_H */