FreeRDP
prim_YUV_neon.c File Reference
#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 *pSrc[3], const UINT32 srcStep[3], BYTE *pDst, UINT32 dstStep, const prim_size_t *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 *pSrc[3], const UINT32 srcStep[3], BYTE *pDst, UINT32 dstStep, UINT32 DstFormat, const prim_size_t *roi)
 
static INLINE pstatus_t neon_YUV444ToX (const BYTE *pSrc[3], const UINT32 srcStep[3], BYTE *pDst, UINT32 dstStep, const prim_size_t *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 *pSrc[3], const UINT32 srcStep[3], BYTE *pDst, UINT32 dstStep, UINT32 DstFormat, const prim_size_t *roi)
 
static pstatus_t neon_LumaToYUV444 (const BYTE *pSrcRaw[3], const UINT32 srcStep[3], BYTE *pDstRaw[3], const UINT32 dstStep[3], const RECTANGLE_16 *roi)
 
static pstatus_t neon_ChromaFilter (BYTE *pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *roi)
 
static pstatus_t neon_ChromaV1ToYUV444 (const BYTE *pSrcRaw[3], const UINT32 srcStep[3], BYTE *pDstRaw[3], const UINT32 dstStep[3], const RECTANGLE_16 *roi)
 
static pstatus_t neon_ChromaV2ToYUV444 (const BYTE *pSrc[3], const UINT32 srcStep[3], UINT32 nTotalWidth, UINT32 nTotalHeight, BYTE *pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *roi)
 
static pstatus_t neon_YUV420CombineToYUV444 (avc444_frame_type type, const BYTE *pSrc[3], const UINT32 srcStep[3], UINT32 nWidth, UINT32 nHeight, BYTE *pDst[3], const UINT32 dstStep[3], const RECTANGLE_16 *roi)
 
void primitives_init_YUV_opt (primitives_t *prims)
 

Variables

static primitives_tgeneric = NULL
 

Function Documentation

static pstatus_t neon_ChromaFilter ( BYTE pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *  roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static pstatus_t neon_ChromaV1ToYUV444 ( const BYTE pSrcRaw[3],
const UINT32  srcStep[3],
BYTE pDstRaw[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *  roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static pstatus_t neon_ChromaV2ToYUV444 ( const BYTE pSrc[3],
const UINT32  srcStep[3],
UINT32  nTotalWidth,
UINT32  nTotalHeight,
BYTE pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *  roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static pstatus_t neon_LumaToYUV444 ( const BYTE pSrcRaw[3],
const UINT32  srcStep[3],
BYTE pDstRaw[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *  roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

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
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
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
static pstatus_t neon_YUV420CombineToYUV444 ( avc444_frame_type  type,
const BYTE pSrc[3],
const UINT32  srcStep[3],
UINT32  nWidth,
UINT32  nHeight,
BYTE pDst[3],
const UINT32  dstStep[3],
const RECTANGLE_16 *  roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static pstatus_t neon_YUV420ToRGB_8u_P3AC4R ( const BYTE pSrc[3],
const UINT32  srcStep[3],
BYTE pDst,
UINT32  dstStep,
UINT32  DstFormat,
const prim_size_t roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static INLINE pstatus_t neon_YUV420ToX ( const BYTE pSrc[3],
const UINT32  srcStep[3],
BYTE pDst,
UINT32  dstStep,
const prim_size_t 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:

static pstatus_t neon_YUV444ToRGB_8u_P3AC4R ( const BYTE pSrc[3],
const UINT32  srcStep[3],
BYTE pDst,
UINT32  dstStep,
UINT32  DstFormat,
const prim_size_t roi 
)
static

Here is the call graph for this function:

Here is the caller graph for this function:

static INLINE pstatus_t neon_YUV444ToX ( const BYTE pSrc[3],
const UINT32  srcStep[3],
BYTE pDst,
UINT32  dstStep,
const prim_size_t 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:

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 caller graph for this function:

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

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.