yuv2rgb_altivec.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <assert.h>
#include "config.h"
#include "libswscale/rgb2rgb.h"
#include "libswscale/swscale.h"
#include "libswscale/swscale_internal.h"
#include "libavutil/cpu.h"
#include "yuv2rgb_altivec.h"

Go to the source code of this file.

Macros

#define vec_merge3(x2, x1, x0, y0, y1, y2)
#define vec_mstbgr24(x0, x1, x2, ptr)
#define vec_mstrgb24(x0, x1, x2, ptr)
#define vec_mstrgb32(T, x0, x1, x2, x3, ptr)
#define vec_unh(x)
#define vec_unl(x)
#define vec_clip_s16(x)
#define vec_packclp(x, y)
#define DEFCSP420_CVT(name, out_pixels)
#define out_abgr(a, b, c, ptr)   vec_mstrgb32(__typeof__(a),((__typeof__ (a)){255}),c,b,a,ptr)
#define out_bgra(a, b, c, ptr)   vec_mstrgb32(__typeof__(a),c,b,a,((__typeof__ (a)){255}),ptr)
#define out_rgba(a, b, c, ptr)   vec_mstrgb32(__typeof__(a),a,b,c,((__typeof__ (a)){255}),ptr)
#define out_argb(a, b, c, ptr)   vec_mstrgb32(__typeof__(a),((__typeof__ (a)){255}),a,b,c,ptr)
#define out_rgb24(a, b, c, ptr)   vec_mstrgb24(a,b,c,ptr)
#define out_bgr24(a, b, c, ptr)   vec_mstbgr24(a,b,c,ptr)
#define YUV2PACKEDX_WRAPPER(suffix, pixfmt)

Typedefs

typedef unsigned char ubyte
typedef signed char sbyte

Functions

static void cvtyuvtoRGB (SwsContext *c, vector signed short Y, vector signed short U, vector signed short V, vector signed short *R, vector signed short *G, vector signed short *B)
static int altivec_uyvy_rgb32 (SwsContext *c, const unsigned char **in, int *instrides, int srcSliceY, int srcSliceH, unsigned char **oplanes, int *outstrides)
SwsFunc ff_yuv2rgb_init_altivec (SwsContext *c)
void ff_yuv2rgb_init_tables_altivec (SwsContext *c, const int inv_table[4], int brightness, int contrast, int saturation)
static av_always_inline void ff_yuv2packedX_altivec (SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int dstY, enum PixelFormat target)
 YUV2PACKEDX_WRAPPER (abgr, PIX_FMT_ABGR)
 YUV2PACKEDX_WRAPPER (bgra, PIX_FMT_BGRA)
 YUV2PACKEDX_WRAPPER (argb, PIX_FMT_ARGB)
 YUV2PACKEDX_WRAPPER (rgba, PIX_FMT_RGBA)
 YUV2PACKEDX_WRAPPER (rgb24, PIX_FMT_RGB24)
 YUV2PACKEDX_WRAPPER (bgr24, PIX_FMT_BGR24)

Variables

static const vector unsigned char perm_rgb_0
static const vector unsigned char perm_rgb_1
static const vector unsigned char perm_rgb_2
static const vector unsigned char perm_rgb_3
static const vector unsigned char demux_u
static const vector unsigned char demux_v
static const vector unsigned char demux_y

Macro Definition Documentation

#define DEFCSP420_CVT (   name,
  out_pixels 
)

Definition at line 278 of file yuv2rgb_altivec.c.

#define out_abgr (   a,
  b,
  c,
  ptr 
)    vec_mstrgb32(__typeof__(a),((__typeof__ (a)){255}),c,b,a,ptr)

Definition at line 443 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define out_argb (   a,
  b,
  c,
  ptr 
)    vec_mstrgb32(__typeof__(a),((__typeof__ (a)){255}),a,b,c,ptr)

Definition at line 446 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define out_bgr24 (   a,
  b,
  c,
  ptr 
)    vec_mstbgr24(a,b,c,ptr)

Definition at line 448 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define out_bgra (   a,
  b,
  c,
  ptr 
)    vec_mstrgb32(__typeof__(a),c,b,a,((__typeof__ (a)){255}),ptr)

Definition at line 444 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define out_rgb24 (   a,
  b,
  c,
  ptr 
)    vec_mstrgb24(a,b,c,ptr)

Definition at line 447 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define out_rgba (   a,
  b,
  c,
  ptr 
)    vec_mstrgb32(__typeof__(a),a,b,c,((__typeof__ (a)){255}),ptr)

Definition at line 445 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32(), and ff_yuv2packedX_altivec().

#define vec_clip_s16 (   x)
Value:
vec_max (vec_min (x, ((vector signed short){235,235,235,235,235,235,235,235})), \
((vector signed short){ 16, 16, 16, 16, 16, 16, 16, 16}))

Definition at line 233 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2packedX_altivec().

#define vec_merge3 (   x2,
  x1,
  x0,
  y0,
  y1,
  y2 
)
Value:
do { \
__typeof__(x0) o0,o2,o3; \
o0 = vec_mergeh (x0,x1); \
y0 = vec_perm (o0, x2, perm_rgb_0); \
o2 = vec_perm (o0, x2, perm_rgb_1); \
o3 = vec_mergel (x0,x1); \
y1 = vec_perm (o3,o2,perm_rgb_2); \
y2 = vec_perm (o3,o2,perm_rgb_3); \
} while(0)

Definition at line 154 of file yuv2rgb_altivec.c.

#define vec_mstbgr24 (   x0,
  x1,
  x2,
  ptr 
)
Value:
do { \
__typeof__(x0) _0,_1,_2; \
vec_merge3 (x0,x1,x2,_0,_1,_2); \
vec_st (_0, 0, ptr++); \
vec_st (_1, 0, ptr++); \
vec_st (_2, 0, ptr++); \
} while (0)

Definition at line 165 of file yuv2rgb_altivec.c.

#define vec_mstrgb24 (   x0,
  x1,
  x2,
  ptr 
)
Value:
do { \
__typeof__(x0) _0,_1,_2; \
vec_merge3 (x2,x1,x0,_0,_1,_2); \
vec_st (_0, 0, ptr++); \
vec_st (_1, 0, ptr++); \
vec_st (_2, 0, ptr++); \
} while (0)

Definition at line 174 of file yuv2rgb_altivec.c.

#define vec_mstrgb32 (   T,
  x0,
  x1,
  x2,
  x3,
  ptr 
)
Value:
do { \
T _0,_1,_2,_3; \
_0 = vec_mergeh (x0,x1); \
_1 = vec_mergeh (x2,x3); \
_2 = (T)vec_mergeh ((vector unsigned short)_0,(vector unsigned short)_1); \
_3 = (T)vec_mergel ((vector unsigned short)_0,(vector unsigned short)_1); \
vec_st (_2, 0*16, (T *)ptr); \
vec_st (_3, 1*16, (T *)ptr); \
_0 = vec_mergel (x0,x1); \
_1 = vec_mergel (x2,x3); \
_2 = (T)vec_mergeh ((vector unsigned short)_0,(vector unsigned short)_1); \
_3 = (T)vec_mergel ((vector unsigned short)_0,(vector unsigned short)_1); \
vec_st (_2, 2*16, (T *)ptr); \
vec_st (_3, 3*16, (T *)ptr); \
ptr += 4; \
} while (0)

Definition at line 187 of file yuv2rgb_altivec.c.

#define vec_packclp (   x,
 
)
Value:
(vector unsigned char)vec_packs \
((vector unsigned short)vec_max (x,((vector signed short) {0})), \
(vector unsigned short)vec_max (y,((vector signed short) {0})))

Definition at line 237 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32(), and ff_yuv2packedX_altivec().

#define vec_unh (   x)
Value:
(vector signed short) \
vec_perm(x,(__typeof__(x)){0}, \
((vector unsigned char){0x10,0x00,0x10,0x01,0x10,0x02,0x10,0x03,\
0x10,0x04,0x10,0x05,0x10,0x06,0x10,0x07}))

Definition at line 222 of file yuv2rgb_altivec.c.

#define vec_unl (   x)
Value:
(vector signed short) \
vec_perm(x,(__typeof__(x)){0}, \
((vector unsigned char){0x10,0x08,0x10,0x09,0x10,0x0A,0x10,0x0B,\
0x10,0x0C,0x10,0x0D,0x10,0x0E,0x10,0x0F}))

Definition at line 227 of file yuv2rgb_altivec.c.

#define YUV2PACKEDX_WRAPPER (   suffix,
  pixfmt 
)
Value:
void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, const int16_t *lumFilter, \
const int16_t **lumSrc, int lumFilterSize, \
const int16_t *chrFilter, const int16_t **chrUSrc, \
const int16_t **chrVSrc, int chrFilterSize, \
const int16_t **alpSrc, uint8_t *dest, \
int dstW, int dstY) \
{ \
ff_yuv2packedX_altivec(c, lumFilter, lumSrc, lumFilterSize, \
chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
alpSrc, dest, dstW, dstY, pixfmt); \
}

Definition at line 807 of file yuv2rgb_altivec.c.

Typedef Documentation

typedef signed char sbyte

Definition at line 104 of file yuv2rgb_altivec.c.

typedef unsigned char ubyte

Definition at line 103 of file yuv2rgb_altivec.c.

Function Documentation

static int altivec_uyvy_rgb32 ( SwsContext c,
const unsigned char **  in,
int *  instrides,
int  srcSliceY,
int  srcSliceH,
unsigned char **  oplanes,
int *  outstrides 
)
static

Definition at line 478 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2rgb_init_altivec().

static void cvtyuvtoRGB ( SwsContext c,
vector signed short  Y,
vector signed short  U,
vector signed short  V,
vector signed short *  R,
vector signed short *  G,
vector signed short *  B 
)
inlinestatic

Definition at line 245 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32(), and ff_yuv2packedX_altivec().

static av_always_inline void ff_yuv2packedX_altivec ( SwsContext c,
const int16_t *  lumFilter,
const int16_t **  lumSrc,
int  lumFilterSize,
const int16_t *  chrFilter,
const int16_t **  chrUSrc,
const int16_t **  chrVSrc,
int  chrFilterSize,
const int16_t **  alpSrc,
uint8_t *  dest,
int  dstW,
int  dstY,
enum PixelFormat  target 
)
static

Definition at line 630 of file yuv2rgb_altivec.c.

SwsFunc ff_yuv2rgb_init_altivec ( SwsContext c)

Definition at line 543 of file yuv2rgb_altivec.c.

Referenced by ff_yuv2rgb_get_func_ptr().

void ff_yuv2rgb_init_tables_altivec ( SwsContext c,
const int  inv_table[4],
int  brightness,
int  contrast,
int  saturation 
)

Definition at line 603 of file yuv2rgb_altivec.c.

Referenced by sws_setColorspaceDetails().

YUV2PACKEDX_WRAPPER ( abgr  ,
PIX_FMT_ABGR   
)
YUV2PACKEDX_WRAPPER ( bgra  ,
PIX_FMT_BGRA   
)
YUV2PACKEDX_WRAPPER ( argb  ,
PIX_FMT_ARGB   
)
YUV2PACKEDX_WRAPPER ( rgba  ,
PIX_FMT_RGBA   
)
YUV2PACKEDX_WRAPPER ( rgb24  ,
PIX_FMT_RGB24   
)
YUV2PACKEDX_WRAPPER ( bgr24  ,
PIX_FMT_BGR24   
)

Variable Documentation

const vector unsigned char demux_u
static
Initial value:
{0x10,0x00,0x10,0x00,
0x10,0x04,0x10,0x04,
0x10,0x08,0x10,0x08,
0x10,0x0c,0x10,0x0c}

Definition at line 462 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32().

const vector unsigned char demux_v
static
Initial value:
{0x10,0x02,0x10,0x02,
0x10,0x06,0x10,0x06,
0x10,0x0A,0x10,0x0A,
0x10,0x0E,0x10,0x0E}

Definition at line 466 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32().

const vector unsigned char demux_y
static
Initial value:
{0x10,0x01,0x10,0x03,
0x10,0x05,0x10,0x07,
0x10,0x09,0x10,0x0B,
0x10,0x0D,0x10,0x0F}

Definition at line 470 of file yuv2rgb_altivec.c.

Referenced by altivec_uyvy_rgb32().

const vector unsigned char perm_rgb_0
static
Initial value:
{0x00,0x01,0x10,0x02,0x03,0x11,0x04,0x05,
0x12,0x06,0x07,0x13,0x08,0x09,0x14,0x0a}

Definition at line 145 of file yuv2rgb_altivec.c.

const vector unsigned char perm_rgb_1
static
Initial value:
{0x0b,0x15,0x0c,0x0d,0x16,0x0e,0x0f,0x17,
0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}

Definition at line 147 of file yuv2rgb_altivec.c.

const vector unsigned char perm_rgb_2
static
Initial value:
{0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
0x00,0x01,0x18,0x02,0x03,0x19,0x04,0x05}

Definition at line 149 of file yuv2rgb_altivec.c.

const vector unsigned char perm_rgb_3
static
Initial value:
{0x1a,0x06,0x07,0x1b,0x08,0x09,0x1c,0x0a,
0x0b,0x1d,0x0c,0x0d,0x1e,0x0e,0x0f,0x1f}

Definition at line 151 of file yuv2rgb_altivec.c.