#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/attributes.h"
#include "libavutil/cpu.h"
#include "libavutil/pixdesc.h"
#include "yuv2rgb_altivec.h"
Go to the source code of this file.
Defines | |
#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) |
av_cold SwsFunc | ff_yuv2rgb_init_altivec (SwsContext *c) |
av_cold 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 |
#define DEFCSP420_CVT | ( | name, | |||
out_pixels | ) |
Definition at line 283 of file yuv2rgb_altivec.c.
#define out_rgba | ( | a, | |||
b, | |||||
c, | |||||
ptr | ) | vec_mstrgb32(__typeof__(a), a, b, c, ((__typeof__(a)) { 255 }), ptr) |
Definition at line 443 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 237 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 155 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 166 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 175 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 188 of file yuv2rgb_altivec.c.
#define vec_packclp | ( | x, | |||
y | ) |
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 242 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 223 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 230 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 831 of file yuv2rgb_altivec.c.
typedef signed char sbyte |
Definition at line 107 of file yuv2rgb_altivec.c.
typedef unsigned char ubyte |
Definition at line 106 of file yuv2rgb_altivec.c.
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 | |||
) | [inline, static] |
Definition at line 251 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 623 of file yuv2rgb_altivec.c.
av_cold SwsFunc ff_yuv2rgb_init_altivec | ( | SwsContext * | c | ) |
av_cold void ff_yuv2rgb_init_tables_altivec | ( | SwsContext * | c, | |
const int | inv_table[4], | |||
int | brightness, | |||
int | contrast, | |||
int | saturation | |||
) |
YUV2PACKEDX_WRAPPER | ( | bgr24 | , | |
PIX_FMT_BGR24 | ||||
) |
YUV2PACKEDX_WRAPPER | ( | rgb24 | , | |
PIX_FMT_RGB24 | ||||
) |
YUV2PACKEDX_WRAPPER | ( | rgba | , | |
PIX_FMT_RGBA | ||||
) |
YUV2PACKEDX_WRAPPER | ( | argb | , | |
PIX_FMT_ARGB | ||||
) |
YUV2PACKEDX_WRAPPER | ( | bgra | , | |
PIX_FMT_BGRA | ||||
) |
YUV2PACKEDX_WRAPPER | ( | abgr | , | |
PIX_FMT_ABGR | ||||
) |
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 460 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 464 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 468 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 146 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 148 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 150 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 152 of file yuv2rgb_altivec.c.