FreeRDP
prim_YUV_neon.c File Reference
#include <freerdp/config.h>
#include <winpr/sysinfo.h>
#include <winpr/crt.h>
#include <freerdp/types.h>
#include <freerdp/primitives.h>
#include "prim_internal.h"
#include <arm_neon.h>

Functions

static INLINE uint8x8_t neon_YUV2R (int32x4_t Ch, int32x4_t Cl, int16x4_t Dh, int16x4_t Dl, int16x4_t Eh, int16x4_t El)
 
static INLINE uint8x8_t neon_YUV2G (int32x4_t Ch, int32x4_t Cl, int16x4_t Dh, int16x4_t Dl, int16x4_t Eh, int16x4_t El)
 
static INLINE uint8x8_t neon_YUV2B (int32x4_t Ch, int32x4_t Cl, int16x4_t Dh, int16x4_t Dl, int16x4_t Eh, int16x4_t El)
 
static INLINE BYTEneon_YuvToRgbPixel (BYTE *pRGB, int16x8_t Y, int16x8_t D, int16x8_t E, const uint8_t rPos, const uint8_t gPos, const uint8_t bPos, const uint8_t aPos)
 
static INLINE pstatus_t neon_YUV420ToX (const BYTE *const WINPR_RESTRICT pSrc[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDst, UINT32 dstStep, const prim_size_t *WINPR_RESTRICT roi, const uint8_t rPos, const uint8_t gPos, const uint8_t bPos, const uint8_t aPos)
 
static pstatus_t neon_YUV420ToRGB_8u_P3AC4R (const BYTE *WINPR_RESTRICT const pSrc[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDst, UINT32 dstStep, UINT32 DstFormat, const prim_size_t *WINPR_RESTRICT roi)
 
static INLINE pstatus_t neon_YUV444ToX (const BYTE *const WINPR_RESTRICT pSrc[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDst, UINT32 dstStep, const prim_size_t *WINPR_RESTRICT roi, const uint8_t rPos, const uint8_t gPos, const uint8_t bPos, const uint8_t aPos)
 
static pstatus_t neon_YUV444ToRGB_8u_P3AC4R (const BYTE *WINPR_RESTRICT const pSrc[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDst, UINT32 dstStep, UINT32 DstFormat, const prim_size_t *WINPR_RESTRICT roi)
 
static pstatus_t neon_LumaToYUV444 (const BYTE *const WINPR_RESTRICT pSrcRaw[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDstRaw[3], const UINT32 dstStep[3], const RECTANGLE_16 *WINPR_RESTRICT roi)
 
static pstatus_t neon_ChromaFilter (BYTE *WINPR_RESTRICT pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *WINPR_RESTRICT roi)
 
static pstatus_t neon_ChromaV1ToYUV444 (const BYTE *const WINPR_RESTRICT pSrcRaw[3], const UINT32 srcStep[3], BYTE *WINPR_RESTRICT pDstRaw[3], const UINT32 dstStep[3], const RECTANGLE_16 *WINPR_RESTRICT roi)
 
static pstatus_t neon_ChromaV2ToYUV444 (const BYTE *const WINPR_RESTRICT pSrc[3], const UINT32 srcStep[3], UINT32 nTotalWidth, UINT32 nTotalHeight, BYTE *WINPR_RESTRICT pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *WINPR_RESTRICT roi)
 
static pstatus_t neon_YUV420CombineToYUV444 (avc444_frame_type type, const BYTE *const WINPR_RESTRICT pSrc[3], const UINT32 srcStep[3], UINT32 nWidth, UINT32 nHeight, BYTE *WINPR_RESTRICT pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *WINPR_RESTRICT roi)
 
void primitives_init_YUV_opt (primitives_t *prims)
 

Variables

static primitives_tgeneric = NULL
 

Function Documentation

◆ neon_ChromaFilter()

static pstatus_t neon_ChromaFilter ( BYTE *WINPR_RESTRICT  pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_ChromaV1ToYUV444()

static pstatus_t neon_ChromaV1ToYUV444 ( const BYTE *const WINPR_RESTRICT  pSrcRaw[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDstRaw[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_ChromaV2ToYUV444()

static pstatus_t neon_ChromaV2ToYUV444 ( const BYTE *const WINPR_RESTRICT  pSrc[3],
const UINT32  srcStep[3],
UINT32  nTotalWidth,
UINT32  nTotalHeight,
BYTE *WINPR_RESTRICT  pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_LumaToYUV444()

static pstatus_t neon_LumaToYUV444 ( const BYTE *const WINPR_RESTRICT  pSrcRaw[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDstRaw[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YUV2B()

static INLINE uint8x8_t neon_YUV2B ( int32x4_t  Ch,
int32x4_t  Cl,
int16x4_t  Dh,
int16x4_t  Dl,
int16x4_t  Eh,
int16x4_t  El 
)
static

◆ neon_YUV2G()

static INLINE uint8x8_t neon_YUV2G ( int32x4_t  Ch,
int32x4_t  Cl,
int16x4_t  Dh,
int16x4_t  Dl,
int16x4_t  Eh,
int16x4_t  El 
)
static

◆ neon_YUV2R()

static INLINE uint8x8_t neon_YUV2R ( int32x4_t  Ch,
int32x4_t  Cl,
int16x4_t  Dh,
int16x4_t  Dl,
int16x4_t  Eh,
int16x4_t  El 
)
static

◆ neon_YUV420CombineToYUV444()

static pstatus_t neon_YUV420CombineToYUV444 ( avc444_frame_type  type,
const BYTE *const WINPR_RESTRICT  pSrc[3],
const UINT32  srcStep[3],
UINT32  nWidth,
UINT32  nHeight,
BYTE *WINPR_RESTRICT  pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YUV420ToRGB_8u_P3AC4R()

static pstatus_t neon_YUV420ToRGB_8u_P3AC4R ( const BYTE *WINPR_RESTRICT const  pSrc[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDst,
UINT32  dstStep,
UINT32  DstFormat,
const prim_size_t *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YUV420ToX()

static INLINE pstatus_t neon_YUV420ToX ( const BYTE *const WINPR_RESTRICT  pSrc[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDst,
UINT32  dstStep,
const prim_size_t *WINPR_RESTRICT  roi,
const uint8_t  rPos,
const uint8_t  gPos,
const uint8_t  bPos,
const uint8_t  aPos 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YUV444ToRGB_8u_P3AC4R()

static pstatus_t neon_YUV444ToRGB_8u_P3AC4R ( const BYTE *WINPR_RESTRICT const  pSrc[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDst,
UINT32  dstStep,
UINT32  DstFormat,
const prim_size_t *WINPR_RESTRICT  roi 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YUV444ToX()

static INLINE pstatus_t neon_YUV444ToX ( const BYTE *const WINPR_RESTRICT  pSrc[3],
const UINT32  srcStep[3],
BYTE *WINPR_RESTRICT  pDst,
UINT32  dstStep,
const prim_size_t *WINPR_RESTRICT  roi,
const uint8_t  rPos,
const uint8_t  gPos,
const uint8_t  bPos,
const uint8_t  aPos 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neon_YuvToRgbPixel()

static INLINE BYTE* neon_YuvToRgbPixel ( BYTE pRGB,
int16x8_t  Y,
int16x8_t  D,
int16x8_t  E,
const uint8_t  rPos,
const uint8_t  gPos,
const uint8_t  bPos,
const uint8_t  aPos 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ primitives_init_YUV_opt()

void primitives_init_YUV_opt ( primitives_t prims)
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ generic

primitives_t* generic = NULL
static

FreeRDP: A Remote Desktop Protocol Implementation Optimized YUV/RGB conversion operations

Copyright 2014 Thomas Erbesdobler Copyright 2016-2017 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2016-2017 Norbert Federa norbe.nosp@m.rt.f.nosp@m.edera.nosp@m.@thi.nosp@m.ncast.nosp@m..com Copyright 2016-2017 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.