mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
swscale: ppc: Hide arch-specific initialization details
Also give consistent names to init functions.
This commit is contained in:
parent
6af2c351b3
commit
c2503d9c8a
@ -1,3 +1,3 @@
|
|||||||
ALTIVEC-OBJS += ppc/swscale_altivec.o \
|
OBJS += ppc/swscale_altivec.o \
|
||||||
ppc/yuv2rgb_altivec.o \
|
ppc/yuv2rgb_altivec.o \
|
||||||
ppc/yuv2yuv_altivec.o \
|
ppc/yuv2yuv_altivec.o \
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "libavutil/cpu.h"
|
#include "libavutil/cpu.h"
|
||||||
#include "yuv2rgb_altivec.h"
|
#include "yuv2rgb_altivec.h"
|
||||||
|
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
#define vzero vec_splat_s32(0)
|
#define vzero vec_splat_s32(0)
|
||||||
|
|
||||||
#define yuv2planeX_8(d1, d2, l1, src, x, perm, filter) do { \
|
#define yuv2planeX_8(d1, d2, l1, src, x, perm, filter) do { \
|
||||||
@ -284,9 +285,11 @@ static void hScale_altivec_real(SwsContext *c, int16_t *dst, int dstW,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
|
|
||||||
av_cold void ff_sws_init_swScale_altivec(SwsContext *c)
|
av_cold void ff_sws_init_swscale_ppc(SwsContext *c)
|
||||||
{
|
{
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
enum AVPixelFormat dstFormat = c->dstFormat;
|
enum AVPixelFormat dstFormat = c->dstFormat;
|
||||||
|
|
||||||
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
|
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
|
||||||
@ -325,4 +328,5 @@ av_cold void ff_sws_init_swScale_altivec(SwsContext *c)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,8 @@
|
|||||||
#include "libavutil/cpu.h"
|
#include "libavutil/cpu.h"
|
||||||
#include "yuv2rgb_altivec.h"
|
#include "yuv2rgb_altivec.h"
|
||||||
|
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
|
|
||||||
#undef PROFILE_THE_BEAST
|
#undef PROFILE_THE_BEAST
|
||||||
#undef INC_SCALING
|
#undef INC_SCALING
|
||||||
|
|
||||||
@ -528,14 +530,17 @@ static int altivec_uyvy_rgb32(SwsContext *c, const unsigned char **in,
|
|||||||
return srcSliceH;
|
return srcSliceH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
|
|
||||||
/* Ok currently the acceleration routine only supports
|
/* Ok currently the acceleration routine only supports
|
||||||
* inputs of widths a multiple of 16
|
* inputs of widths a multiple of 16
|
||||||
* and heights a multiple 2
|
* and heights a multiple 2
|
||||||
*
|
*
|
||||||
* So we just fall back to the C codes for this.
|
* So we just fall back to the C codes for this.
|
||||||
*/
|
*/
|
||||||
av_cold SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c)
|
av_cold SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c)
|
||||||
{
|
{
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
|
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -591,20 +596,26 @@ av_cold SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
av_cold void ff_yuv2rgb_init_tables_altivec(SwsContext *c,
|
av_cold void ff_yuv2rgb_init_tables_ppc(SwsContext *c,
|
||||||
const int inv_table[4],
|
const int inv_table[4],
|
||||||
int brightness,
|
int brightness,
|
||||||
int contrast,
|
int contrast,
|
||||||
int saturation)
|
int saturation)
|
||||||
{
|
{
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
union {
|
union {
|
||||||
DECLARE_ALIGNED(16, signed short, tmp)[8];
|
DECLARE_ALIGNED(16, signed short, tmp)[8];
|
||||||
vector signed short vec;
|
vector signed short vec;
|
||||||
} buf;
|
} buf;
|
||||||
|
|
||||||
|
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
|
||||||
|
return;
|
||||||
|
|
||||||
buf.tmp[0] = ((0xffffLL) * contrast >> 8) >> 9; // cy
|
buf.tmp[0] = ((0xffffLL) * contrast >> 8) >> 9; // cy
|
||||||
buf.tmp[1] = -256 * brightness; // oy
|
buf.tmp[1] = -256 * brightness; // oy
|
||||||
buf.tmp[2] = (inv_table[0] >> 3) * (contrast >> 16) * (saturation >> 16); // crv
|
buf.tmp[2] = (inv_table[0] >> 3) * (contrast >> 16) * (saturation >> 16); // crv
|
||||||
@ -620,8 +631,11 @@ av_cold void ff_yuv2rgb_init_tables_altivec(SwsContext *c,
|
|||||||
c->CGU = vec_splat((vector signed short) buf.vec, 4);
|
c->CGU = vec_splat((vector signed short) buf.vec, 4);
|
||||||
c->CGV = vec_splat((vector signed short) buf.vec, 5);
|
c->CGV = vec_splat((vector signed short) buf.vec, 5);
|
||||||
return;
|
return;
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
|
|
||||||
static av_always_inline void yuv2packedX_altivec(SwsContext *c,
|
static av_always_inline void yuv2packedX_altivec(SwsContext *c,
|
||||||
const int16_t *lumFilter,
|
const int16_t *lumFilter,
|
||||||
const int16_t **lumSrc,
|
const int16_t **lumSrc,
|
||||||
@ -854,3 +868,5 @@ YUV2PACKEDX_WRAPPER(argb, AV_PIX_FMT_ARGB);
|
|||||||
YUV2PACKEDX_WRAPPER(rgba, AV_PIX_FMT_RGBA);
|
YUV2PACKEDX_WRAPPER(rgba, AV_PIX_FMT_RGBA);
|
||||||
YUV2PACKEDX_WRAPPER(rgb24, AV_PIX_FMT_RGB24);
|
YUV2PACKEDX_WRAPPER(rgb24, AV_PIX_FMT_RGB24);
|
||||||
YUV2PACKEDX_WRAPPER(bgr24, AV_PIX_FMT_BGR24);
|
YUV2PACKEDX_WRAPPER(bgr24, AV_PIX_FMT_BGR24);
|
||||||
|
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#include "libswscale/swscale_internal.h"
|
#include "libswscale/swscale_internal.h"
|
||||||
#include "libavutil/cpu.h"
|
#include "libavutil/cpu.h"
|
||||||
|
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
|
|
||||||
static int yv12toyuy2_unscaled_altivec(SwsContext *c, const uint8_t *src[],
|
static int yv12toyuy2_unscaled_altivec(SwsContext *c, const uint8_t *src[],
|
||||||
int srcStride[], int srcSliceY,
|
int srcStride[], int srcSliceY,
|
||||||
int srcSliceH, uint8_t *dstParam[],
|
int srcSliceH, uint8_t *dstParam[],
|
||||||
@ -179,8 +181,11 @@ static int yv12touyvy_unscaled_altivec(SwsContext *c, const uint8_t *src[],
|
|||||||
return srcSliceH;
|
return srcSliceH;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_swscale_get_unscaled_altivec(SwsContext *c)
|
#endif /* HAVE_ALTIVEC */
|
||||||
|
|
||||||
|
void ff_swscale_get_unscaled_ppc(SwsContext *c)
|
||||||
{
|
{
|
||||||
|
#if HAVE_ALTIVEC
|
||||||
if ((av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC) && !(c->srcW & 15) &&
|
if ((av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC) && !(c->srcW & 15) &&
|
||||||
!(c->flags & SWS_BITEXACT) && c->srcFormat == AV_PIX_FMT_YUV420P) {
|
!(c->flags & SWS_BITEXACT) && c->srcFormat == AV_PIX_FMT_YUV420P) {
|
||||||
enum AVPixelFormat dstFormat = c->dstFormat;
|
enum AVPixelFormat dstFormat = c->dstFormat;
|
||||||
@ -191,4 +196,5 @@ void ff_swscale_get_unscaled_altivec(SwsContext *c)
|
|||||||
else if (dstFormat == AV_PIX_FMT_UYVY422)
|
else if (dstFormat == AV_PIX_FMT_UYVY422)
|
||||||
c->swScale = yv12touyvy_unscaled_altivec;
|
c->swScale = yv12touyvy_unscaled_altivec;
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_ALTIVEC */
|
||||||
}
|
}
|
||||||
|
@ -772,10 +772,10 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
|
|||||||
{
|
{
|
||||||
sws_init_swScale_c(c);
|
sws_init_swScale_c(c);
|
||||||
|
|
||||||
|
if (ARCH_PPC)
|
||||||
|
ff_sws_init_swscale_ppc(c);
|
||||||
if (ARCH_X86)
|
if (ARCH_X86)
|
||||||
ff_sws_init_swscale_x86(c);
|
ff_sws_init_swscale_x86(c);
|
||||||
if (HAVE_ALTIVEC)
|
|
||||||
ff_sws_init_swScale_altivec(c);
|
|
||||||
|
|
||||||
return swScale;
|
return swScale;
|
||||||
}
|
}
|
||||||
|
@ -564,15 +564,15 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c);
|
|||||||
int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4],
|
int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4],
|
||||||
int fullRange, int brightness,
|
int fullRange, int brightness,
|
||||||
int contrast, int saturation);
|
int contrast, int saturation);
|
||||||
|
void ff_yuv2rgb_init_tables_ppc(SwsContext *c, const int inv_table[4],
|
||||||
|
int brightness, int contrast, int saturation);
|
||||||
|
|
||||||
void ff_yuv2rgb_init_tables_altivec(SwsContext *c, const int inv_table[4],
|
|
||||||
int brightness, int contrast, int saturation);
|
|
||||||
void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufIndex,
|
void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufIndex,
|
||||||
int lastInLumBuf, int lastInChrBuf);
|
int lastInLumBuf, int lastInChrBuf);
|
||||||
|
|
||||||
SwsFunc ff_yuv2rgb_init_x86(SwsContext *c);
|
SwsFunc ff_yuv2rgb_init_x86(SwsContext *c);
|
||||||
SwsFunc ff_yuv2rgb_init_vis(SwsContext *c);
|
SwsFunc ff_yuv2rgb_init_vis(SwsContext *c);
|
||||||
SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c);
|
SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c);
|
||||||
SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c);
|
SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c);
|
||||||
void ff_bfin_get_unscaled_swscale(SwsContext *c);
|
void ff_bfin_get_unscaled_swscale(SwsContext *c);
|
||||||
|
|
||||||
@ -736,7 +736,7 @@ extern const AVClass sws_context_class;
|
|||||||
*/
|
*/
|
||||||
void ff_get_unscaled_swscale(SwsContext *c);
|
void ff_get_unscaled_swscale(SwsContext *c);
|
||||||
|
|
||||||
void ff_swscale_get_unscaled_altivec(SwsContext *c);
|
void ff_swscale_get_unscaled_ppc(SwsContext *c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return function pointer to fastest main scaler path function depending
|
* Return function pointer to fastest main scaler path function depending
|
||||||
@ -753,7 +753,7 @@ void ff_sws_init_output_funcs(SwsContext *c,
|
|||||||
yuv2packed2_fn *yuv2packed2,
|
yuv2packed2_fn *yuv2packed2,
|
||||||
yuv2packedX_fn *yuv2packedX,
|
yuv2packedX_fn *yuv2packedX,
|
||||||
yuv2anyX_fn *yuv2anyX);
|
yuv2anyX_fn *yuv2anyX);
|
||||||
void ff_sws_init_swScale_altivec(SwsContext *c);
|
void ff_sws_init_swscale_ppc(SwsContext *c);
|
||||||
void ff_sws_init_swscale_x86(SwsContext *c);
|
void ff_sws_init_swscale_x86(SwsContext *c);
|
||||||
|
|
||||||
#endif /* SWSCALE_SWSCALE_INTERNAL_H */
|
#endif /* SWSCALE_SWSCALE_INTERNAL_H */
|
||||||
|
@ -1091,8 +1091,8 @@ void ff_get_unscaled_swscale(SwsContext *c)
|
|||||||
|
|
||||||
if (ARCH_BFIN)
|
if (ARCH_BFIN)
|
||||||
ff_bfin_get_unscaled_swscale(c);
|
ff_bfin_get_unscaled_swscale(c);
|
||||||
if (HAVE_ALTIVEC)
|
if (ARCH_PPC)
|
||||||
ff_swscale_get_unscaled_altivec(c);
|
ff_swscale_get_unscaled_ppc(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_ptr(const uint8_t *src[], int format)
|
static void reset_ptr(const uint8_t *src[], int format)
|
||||||
|
@ -806,9 +806,9 @@ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
|
|||||||
contrast, saturation);
|
contrast, saturation);
|
||||||
// FIXME factorize
|
// FIXME factorize
|
||||||
|
|
||||||
if (PPC_ALTIVEC(av_get_cpu_flags()))
|
if (ARCH_PPC)
|
||||||
ff_yuv2rgb_init_tables_altivec(c, inv_table, brightness,
|
ff_yuv2rgb_init_tables_ppc(c, inv_table, brightness,
|
||||||
contrast, saturation);
|
contrast, saturation);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,10 +564,10 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
|
|||||||
t = ff_yuv2rgb_init_x86(c);
|
t = ff_yuv2rgb_init_x86(c);
|
||||||
else if (HAVE_VIS)
|
else if (HAVE_VIS)
|
||||||
t = ff_yuv2rgb_init_vis(c);
|
t = ff_yuv2rgb_init_vis(c);
|
||||||
else if (HAVE_ALTIVEC)
|
|
||||||
t = ff_yuv2rgb_init_altivec(c);
|
|
||||||
else if (ARCH_BFIN)
|
else if (ARCH_BFIN)
|
||||||
t = ff_yuv2rgb_get_func_ptr_bfin(c);
|
t = ff_yuv2rgb_get_func_ptr_bfin(c);
|
||||||
|
else if (ARCH_PPC)
|
||||||
|
t = ff_yuv2rgb_init_ppc(c);
|
||||||
|
|
||||||
if (t)
|
if (t)
|
||||||
return t;
|
return t;
|
||||||
|
Loading…
Reference in New Issue
Block a user