mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: dsputil: fix invalid array indexing configure: add libavresample to rpath build: icc: silence some warnings fft-test: add option to set cpuflag mask cpu: recognise only cpu flag names pertinent to the architecture avutil: add av_parse_cpu_flags() function vp8: armv6: fix non-armv6t2 build vp8: armv6 optimisations vp8: arm: separate ARMv6 functions from NEON ARM: add some compatibility macros mov: support eac3 audio avf: fix faulty check in has_duration Conflicts: configure doc/APIchanges ffmpeg.c libavcodec/arm/Makefile libavcodec/arm/asm.S libavcodec/arm/vp8dsp_armv6.S libavcodec/arm/vp8dsp_init_arm.c libavutil/avutil.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
e890b68962
5
configure
vendored
5
configure
vendored
@ -3358,7 +3358,7 @@ enabled extra_warnings && check_cflags -Winline
|
|||||||
|
|
||||||
# add some linker flags
|
# add some linker flags
|
||||||
check_ldflags -Wl,--warn-common
|
check_ldflags -Wl,--warn-common
|
||||||
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
|
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
|
||||||
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
|
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
|
||||||
|
|
||||||
enabled xmm_clobber_test && \
|
enabled xmm_clobber_test && \
|
||||||
@ -3407,10 +3407,11 @@ if enabled icc; then
|
|||||||
# -wd: Disable following warnings
|
# -wd: Disable following warnings
|
||||||
# 144, 167, 556: -Wno-pointer-sign
|
# 144, 167, 556: -Wno-pointer-sign
|
||||||
# 1292: attribute "foo" ignored
|
# 1292: attribute "foo" ignored
|
||||||
|
# 1419: external declaration in primary source file
|
||||||
# 10006: ignoring unknown option -fno-signed-zeros
|
# 10006: ignoring unknown option -fno-signed-zeros
|
||||||
# 10148: ignoring unknown option -Wno-parentheses
|
# 10148: ignoring unknown option -Wno-parentheses
|
||||||
# 10156: ignoring option '-W'; no argument required
|
# 10156: ignoring option '-W'; no argument required
|
||||||
check_cflags -wd144,167,556,1292,10006,10148,10156
|
check_cflags -wd144,167,556,1292,1419,10006,10148,10156
|
||||||
# 11030: Warning unknown option --as-needed
|
# 11030: Warning unknown option --as-needed
|
||||||
# 10156: ignoring option '-export'; no argument required
|
# 10156: ignoring option '-export'; no argument required
|
||||||
check_ldflags -wd10156,11030
|
check_ldflags -wd10156,11030
|
||||||
|
@ -23,6 +23,9 @@ API changes, most recent first:
|
|||||||
2012-03-26 - a67d9cf - lavfi 2.66.100
|
2012-03-26 - a67d9cf - lavfi 2.66.100
|
||||||
Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
|
Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
|
||||||
|
|
||||||
|
2012-04-25 - xxxxxxx - lavu 51.29.0 - cpu.h
|
||||||
|
Add av_parse_cpu_flags()
|
||||||
|
|
||||||
2012-xx-xx - xxxxxxx - lavr 0.0.0
|
2012-xx-xx - xxxxxxx - lavr 0.0.0
|
||||||
Add libavresample audio conversion library
|
Add libavresample audio conversion library
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ OBJS-$(CONFIG_VP5_DECODER) += arm/vp56dsp_init_arm.o
|
|||||||
OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_init_arm.o
|
OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_init_arm.o
|
||||||
OBJS-$(CONFIG_VP8_DECODER) += arm/vp8dsp_init_arm.o
|
OBJS-$(CONFIG_VP8_DECODER) += arm/vp8dsp_init_arm.o
|
||||||
ARMV6-OBJS-$(CONFIG_VP8_DECODER) += arm/vp8_armv6.o \
|
ARMV6-OBJS-$(CONFIG_VP8_DECODER) += arm/vp8_armv6.o \
|
||||||
|
arm/vp8dsp_init_armv6.o \
|
||||||
arm/vp8dsp_armv6.o
|
arm/vp8dsp_armv6.o
|
||||||
|
|
||||||
OBJS-$(CONFIG_H264DSP) += arm/h264dsp_init_arm.o
|
OBJS-$(CONFIG_H264DSP) += arm/h264dsp_init_arm.o
|
||||||
@ -80,7 +81,8 @@ NEON-OBJS-$(CONFIG_VP5_DECODER) += arm/vp56dsp_neon.o \
|
|||||||
NEON-OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_neon.o \
|
NEON-OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_neon.o \
|
||||||
arm/vp3dsp_neon.o \
|
arm/vp3dsp_neon.o \
|
||||||
|
|
||||||
NEON-OBJS-$(CONFIG_VP8_DECODER) += arm/vp8dsp_neon.o
|
NEON-OBJS-$(CONFIG_VP8_DECODER) += arm/vp8dsp_init_neon.o \
|
||||||
|
arm/vp8dsp_neon.o
|
||||||
|
|
||||||
NEON-OBJS += arm/dsputil_init_neon.o \
|
NEON-OBJS += arm/dsputil_init_neon.o \
|
||||||
arm/dsputil_neon.o \
|
arm/dsputil_neon.o \
|
||||||
|
@ -88,6 +88,13 @@ ELF .size \name, . - \name
|
|||||||
\name:
|
\name:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
#if !HAVE_ARMV6T2
|
||||||
|
.macro movw rd, val
|
||||||
|
mov \rd, \val & 255
|
||||||
|
orr \rd, \val & ~255
|
||||||
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
.macro mov32 rd, val
|
.macro mov32 rd, val
|
||||||
#if HAVE_ARMV6T2
|
#if HAVE_ARMV6T2
|
||||||
movw \rd, #(\val) & 0xffff
|
movw \rd, #(\val) & 0xffff
|
||||||
@ -120,7 +127,7 @@ T sub \rn, \rn, \rm
|
|||||||
T ldr \rt, [\rn]
|
T ldr \rt, [\rn]
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro ldr_dpren rt, rn, rm:vararg
|
.macro ldr_nreg rt, rn, rm:vararg
|
||||||
A ldr \rt, [\rn, -\rm]
|
A ldr \rt, [\rn, -\rm]
|
||||||
T sub \rt, \rn, \rm
|
T sub \rt, \rn, \rm
|
||||||
T ldr \rt, [\rt]
|
T ldr \rt, [\rt]
|
||||||
|
78
libavcodec/arm/vp8dsp.h
Normal file
78
libavcodec/arm/vp8dsp.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Libav.
|
||||||
|
*
|
||||||
|
* Libav is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Libav is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with Libav; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AVCODEC_ARM_VP8DSP_H
|
||||||
|
#define AVCODEC_ARM_VP8DSP_H
|
||||||
|
|
||||||
|
#include "libavcodec/vp8dsp.h"
|
||||||
|
|
||||||
|
void ff_vp8dsp_init_armv6(VP8DSPContext *dsp);
|
||||||
|
void ff_vp8dsp_init_neon(VP8DSPContext *dsp);
|
||||||
|
|
||||||
|
#define VP8_LF_Y(hv, inner, opt) \
|
||||||
|
void ff_vp8_##hv##_loop_filter16##inner##_##opt(uint8_t *dst, \
|
||||||
|
ptrdiff_t stride, \
|
||||||
|
int flim_E, int flim_I, \
|
||||||
|
int hev_thresh)
|
||||||
|
|
||||||
|
#define VP8_LF_UV(hv, inner, opt) \
|
||||||
|
void ff_vp8_##hv##_loop_filter8uv##inner##_##opt(uint8_t *dstU, \
|
||||||
|
uint8_t *dstV, \
|
||||||
|
ptrdiff_t stride, \
|
||||||
|
int flim_E, int flim_I, \
|
||||||
|
int hev_thresh)
|
||||||
|
|
||||||
|
#define VP8_LF_SIMPLE(hv, opt) \
|
||||||
|
void ff_vp8_##hv##_loop_filter16_simple_##opt(uint8_t *dst, \
|
||||||
|
ptrdiff_t stride, \
|
||||||
|
int flim)
|
||||||
|
|
||||||
|
#define VP8_LF_HV(inner, opt) \
|
||||||
|
VP8_LF_Y(h, inner, opt); \
|
||||||
|
VP8_LF_Y(v, inner, opt); \
|
||||||
|
VP8_LF_UV(h, inner, opt); \
|
||||||
|
VP8_LF_UV(v, inner, opt)
|
||||||
|
|
||||||
|
#define VP8_LF(opt) \
|
||||||
|
VP8_LF_HV(, opt); \
|
||||||
|
VP8_LF_HV(_inner, opt); \
|
||||||
|
VP8_LF_SIMPLE(h, opt); \
|
||||||
|
VP8_LF_SIMPLE(v, opt)
|
||||||
|
|
||||||
|
#define VP8_MC(n, opt) \
|
||||||
|
void ff_put_vp8_##n##_##opt(uint8_t *dst, ptrdiff_t dststride, \
|
||||||
|
uint8_t *src, ptrdiff_t srcstride, \
|
||||||
|
int h, int x, int y)
|
||||||
|
|
||||||
|
#define VP8_EPEL(w, opt) \
|
||||||
|
VP8_MC(pixels ## w, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h4, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h6, opt); \
|
||||||
|
VP8_MC(epel ## w ## _v4, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h4v4, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h6v4, opt); \
|
||||||
|
VP8_MC(epel ## w ## _v6, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h4v6, opt); \
|
||||||
|
VP8_MC(epel ## w ## _h6v6, opt)
|
||||||
|
|
||||||
|
#define VP8_BILIN(w, opt) \
|
||||||
|
VP8_MC(bilin ## w ## _h, opt); \
|
||||||
|
VP8_MC(bilin ## w ## _v, opt); \
|
||||||
|
VP8_MC(bilin ## w ## _hv, opt)
|
||||||
|
|
||||||
|
#endif /* AVCODEC_ARM_VP8DSP_H */
|
File diff suppressed because it is too large
Load Diff
@ -20,294 +20,14 @@
|
|||||||
|
|
||||||
#include "libavutil/arm/cpu.h"
|
#include "libavutil/arm/cpu.h"
|
||||||
#include "libavcodec/vp8dsp.h"
|
#include "libavcodec/vp8dsp.h"
|
||||||
|
#include "vp8dsp.h"
|
||||||
void ff_vp8_luma_dc_wht_dc_armv6(DCTELEM block[4][4][16], DCTELEM dc[16]);
|
|
||||||
|
|
||||||
#define idct_funcs(opt) \
|
|
||||||
void ff_vp8_luma_dc_wht_ ## opt(DCTELEM block[4][4][16], DCTELEM dc[16]); \
|
|
||||||
void ff_vp8_idct_add_ ## opt(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride); \
|
|
||||||
void ff_vp8_idct_dc_add_ ## opt(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride); \
|
|
||||||
void ff_vp8_idct_dc_add4y_ ## opt(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride); \
|
|
||||||
void ff_vp8_idct_dc_add4uv_ ## opt(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride)
|
|
||||||
|
|
||||||
idct_funcs(neon);
|
|
||||||
idct_funcs(armv6);
|
|
||||||
|
|
||||||
void ff_vp8_v_loop_filter16_neon(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
void ff_vp8_h_loop_filter16_neon(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
void ff_vp8_v_loop_filter8uv_neon(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
void ff_vp8_h_loop_filter8uv_neon(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
|
|
||||||
void ff_vp8_v_loop_filter16_inner_neon(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
void ff_vp8_h_loop_filter16_inner_neon(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh);
|
|
||||||
void ff_vp8_v_loop_filter8uv_inner_neon(uint8_t *dstU, uint8_t *dstV,
|
|
||||||
ptrdiff_t stride, int flim_E, int flim_I,
|
|
||||||
int hev_thresh);
|
|
||||||
void ff_vp8_h_loop_filter8uv_inner_neon(uint8_t *dstU, uint8_t *dstV,
|
|
||||||
ptrdiff_t stride, int flim_E, int flim_I,
|
|
||||||
int hev_thresh);
|
|
||||||
|
|
||||||
void ff_vp8_v_loop_filter_inner_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I,
|
|
||||||
int hev_thresh, int count);
|
|
||||||
void ff_vp8_h_loop_filter_inner_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I,
|
|
||||||
int hev_thresh, int count);
|
|
||||||
void ff_vp8_v_loop_filter_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I,
|
|
||||||
int hev_thresh, int count);
|
|
||||||
void ff_vp8_h_loop_filter_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I,
|
|
||||||
int hev_thresh, int count);
|
|
||||||
|
|
||||||
static void ff_vp8_v_loop_filter16_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_v_loop_filter_armv6(dst, stride, flim_E, flim_I, hev_thresh, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_h_loop_filter16_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_h_loop_filter_armv6(dst, stride, flim_E, flim_I, hev_thresh, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_v_loop_filter8uv_armv6(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_v_loop_filter_armv6(dstU, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
ff_vp8_v_loop_filter_armv6(dstV, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_h_loop_filter8uv_armv6(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_h_loop_filter_armv6(dstU, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
ff_vp8_h_loop_filter_armv6(dstV, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_v_loop_filter16_inner_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_v_loop_filter_inner_armv6(dst, stride, flim_E, flim_I, hev_thresh, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_h_loop_filter16_inner_armv6(uint8_t *dst, ptrdiff_t stride,
|
|
||||||
int flim_E, int flim_I, int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_h_loop_filter_inner_armv6(dst, stride, flim_E, flim_I, hev_thresh, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_v_loop_filter8uv_inner_armv6(uint8_t *dstU, uint8_t *dstV,
|
|
||||||
ptrdiff_t stride, int flim_E, int flim_I,
|
|
||||||
int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_v_loop_filter_inner_armv6(dstU, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
ff_vp8_v_loop_filter_inner_armv6(dstV, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ff_vp8_h_loop_filter8uv_inner_armv6(uint8_t *dstU, uint8_t *dstV,
|
|
||||||
ptrdiff_t stride, int flim_E, int flim_I,
|
|
||||||
int hev_thresh)
|
|
||||||
{
|
|
||||||
ff_vp8_h_loop_filter_inner_armv6(dstU, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
ff_vp8_h_loop_filter_inner_armv6(dstV, stride, flim_E, flim_I, hev_thresh, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define simple_lf_funcs(opt) \
|
|
||||||
void ff_vp8_v_loop_filter16_simple_ ## opt(uint8_t *dst, ptrdiff_t stride, int flim); \
|
|
||||||
void ff_vp8_h_loop_filter16_simple_ ## opt(uint8_t *dst, ptrdiff_t stride, int flim)
|
|
||||||
|
|
||||||
simple_lf_funcs(neon);
|
|
||||||
simple_lf_funcs(armv6);
|
|
||||||
|
|
||||||
#define VP8_MC_OPT(n, opt) \
|
|
||||||
void ff_put_vp8_##n##_##opt(uint8_t *dst, ptrdiff_t dststride, \
|
|
||||||
uint8_t *src, ptrdiff_t srcstride, \
|
|
||||||
int h, int x, int y)
|
|
||||||
|
|
||||||
#define VP8_MC(n) \
|
|
||||||
VP8_MC_OPT(n, neon)
|
|
||||||
|
|
||||||
#define VP8_EPEL(w) \
|
|
||||||
VP8_MC(epel ## w ## _h4); \
|
|
||||||
VP8_MC(epel ## w ## _h6); \
|
|
||||||
VP8_MC(epel ## w ## _h4v4); \
|
|
||||||
VP8_MC(epel ## w ## _h6v4); \
|
|
||||||
VP8_MC(epel ## w ## _v4); \
|
|
||||||
VP8_MC(epel ## w ## _v6); \
|
|
||||||
VP8_MC(epel ## w ## _h4v6); \
|
|
||||||
VP8_MC(epel ## w ## _h6v6)
|
|
||||||
|
|
||||||
VP8_EPEL(16);
|
|
||||||
VP8_MC(pixels16);
|
|
||||||
VP8_MC_OPT(pixels16, armv6);
|
|
||||||
VP8_EPEL(8);
|
|
||||||
VP8_MC(pixels8);
|
|
||||||
VP8_MC_OPT(pixels8, armv6);
|
|
||||||
VP8_EPEL(4);
|
|
||||||
VP8_MC_OPT(pixels4, armv6);
|
|
||||||
|
|
||||||
VP8_MC(bilin16_h);
|
|
||||||
VP8_MC(bilin16_v);
|
|
||||||
VP8_MC(bilin16_hv);
|
|
||||||
VP8_MC(bilin8_h);
|
|
||||||
VP8_MC(bilin8_v);
|
|
||||||
VP8_MC(bilin8_hv);
|
|
||||||
VP8_MC(bilin4_h);
|
|
||||||
VP8_MC(bilin4_v);
|
|
||||||
VP8_MC(bilin4_hv);
|
|
||||||
|
|
||||||
#define VP8_V6_MC(n) \
|
|
||||||
void ff_put_vp8_##n##_armv6(uint8_t *dst, int dststride, uint8_t *src, \
|
|
||||||
int srcstride, int w, int h, int mxy)
|
|
||||||
|
|
||||||
VP8_V6_MC(epel_v6);
|
|
||||||
VP8_V6_MC(epel_h6);
|
|
||||||
VP8_V6_MC(epel_v4);
|
|
||||||
VP8_V6_MC(epel_h4);
|
|
||||||
VP8_V6_MC(bilin_v);
|
|
||||||
VP8_V6_MC(bilin_h);
|
|
||||||
|
|
||||||
#define VP8_EPEL_HV(SIZE, TAPNUMX, TAPNUMY, NAME, HNAME, VNAME, MAXHEIGHT) \
|
|
||||||
static void ff_put_vp8_##NAME##SIZE##_##HNAME##VNAME##_armv6( \
|
|
||||||
uint8_t *dst, int dststride, uint8_t *src, \
|
|
||||||
int srcstride, int h, int mx, int my) \
|
|
||||||
{ \
|
|
||||||
DECLARE_ALIGNED(4, uint8_t, tmp)[SIZE * (MAXHEIGHT + TAPNUMY - 1)]; \
|
|
||||||
uint8_t *tmpptr = tmp + SIZE * (TAPNUMY / 2 - 1); \
|
|
||||||
src -= srcstride * (TAPNUMY / 2 - 1); \
|
|
||||||
ff_put_vp8_ ## NAME ## _ ## HNAME ## _armv6(tmp, SIZE, src, srcstride, \
|
|
||||||
SIZE, h + TAPNUMY - 1, mx); \
|
|
||||||
ff_put_vp8_ ## NAME ## _ ## VNAME ## _armv6(dst, dststride, tmpptr, SIZE, \
|
|
||||||
SIZE, h, my); \
|
|
||||||
}
|
|
||||||
|
|
||||||
VP8_EPEL_HV(16, 6, 6, epel, h6, v6, 16);
|
|
||||||
VP8_EPEL_HV(16, 2, 2, bilin, h, v, 16);
|
|
||||||
VP8_EPEL_HV(8, 6, 6, epel, h6, v6, 16);
|
|
||||||
VP8_EPEL_HV(8, 4, 6, epel, h4, v6, 16);
|
|
||||||
VP8_EPEL_HV(8, 6, 4, epel, h6, v4, 16);
|
|
||||||
VP8_EPEL_HV(8, 4, 4, epel, h4, v4, 16);
|
|
||||||
VP8_EPEL_HV(8, 2, 2, bilin, h, v, 16);
|
|
||||||
VP8_EPEL_HV(4, 6, 6, epel, h6, v6, 8);
|
|
||||||
VP8_EPEL_HV(4, 4, 6, epel, h4, v6, 8);
|
|
||||||
VP8_EPEL_HV(4, 6, 4, epel, h6, v4, 8);
|
|
||||||
VP8_EPEL_HV(4, 4, 4, epel, h4, v4, 8);
|
|
||||||
VP8_EPEL_HV(4, 2, 2, bilin, h, v, 8);
|
|
||||||
|
|
||||||
extern void put_vp8_epel4_v6_c(uint8_t *dst, int d, uint8_t *src, int s, int h, int mx, int my);
|
|
||||||
#undef printf
|
|
||||||
#define VP8_EPEL_H_OR_V(SIZE, NAME, HV) \
|
|
||||||
static void ff_put_vp8_##NAME##SIZE##_##HV##_armv6( \
|
|
||||||
uint8_t *dst, int dststride, uint8_t *src, \
|
|
||||||
int srcstride, int h, int mx, int my) \
|
|
||||||
{ \
|
|
||||||
ff_put_vp8_## NAME ## _ ## HV ## _armv6(dst, dststride, src, srcstride, \
|
|
||||||
SIZE, h, mx | my); \
|
|
||||||
}
|
|
||||||
|
|
||||||
VP8_EPEL_H_OR_V(4, epel, h6);
|
|
||||||
VP8_EPEL_H_OR_V(4, epel, h4);
|
|
||||||
VP8_EPEL_H_OR_V(4, epel, v6);
|
|
||||||
VP8_EPEL_H_OR_V(4, epel, v4);
|
|
||||||
VP8_EPEL_H_OR_V(4, bilin, v);
|
|
||||||
VP8_EPEL_H_OR_V(4, bilin, h);
|
|
||||||
VP8_EPEL_H_OR_V(8, epel, h6);
|
|
||||||
VP8_EPEL_H_OR_V(8, epel, h4);
|
|
||||||
VP8_EPEL_H_OR_V(8, epel, v6);
|
|
||||||
VP8_EPEL_H_OR_V(8, epel, v4);
|
|
||||||
VP8_EPEL_H_OR_V(8, bilin, v);
|
|
||||||
VP8_EPEL_H_OR_V(8, bilin, h);
|
|
||||||
VP8_EPEL_H_OR_V(16, epel, h6);
|
|
||||||
VP8_EPEL_H_OR_V(16, epel, v6);
|
|
||||||
VP8_EPEL_H_OR_V(16, bilin, v);
|
|
||||||
VP8_EPEL_H_OR_V(16, bilin, h);
|
|
||||||
|
|
||||||
av_cold void ff_vp8dsp_init_arm(VP8DSPContext *dsp)
|
av_cold void ff_vp8dsp_init_arm(VP8DSPContext *dsp)
|
||||||
{
|
{
|
||||||
#define set_func_ptrs(opt) \
|
|
||||||
dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_##opt; \
|
|
||||||
dsp->vp8_luma_dc_wht_dc = ff_vp8_luma_dc_wht_dc_armv6; \
|
|
||||||
\
|
|
||||||
dsp->vp8_idct_add = ff_vp8_idct_add_##opt; \
|
|
||||||
dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_##opt; \
|
|
||||||
dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_##opt; \
|
|
||||||
dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_##opt; \
|
|
||||||
\
|
|
||||||
dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_##opt; \
|
|
||||||
dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_##opt; \
|
|
||||||
dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_##opt; \
|
|
||||||
dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_##opt; \
|
|
||||||
\
|
|
||||||
dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_##opt; \
|
|
||||||
dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_##opt; \
|
|
||||||
dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_##opt; \
|
|
||||||
dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_##opt; \
|
|
||||||
\
|
|
||||||
dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter16_simple_##opt; \
|
|
||||||
dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter16_simple_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][0][0] = ff_put_vp8_pixels4_armv6; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_##opt; \
|
|
||||||
dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilin16_h_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilin16_v_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilin16_hv_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilin8_h_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilin8_h_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilin8_v_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilin8_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilin8_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilin8_v_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilin8_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilin8_hv_##opt; \
|
|
||||||
\
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][0][0] = ff_put_vp8_pixels4_armv6; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilin4_h_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilin4_h_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilin4_v_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilin4_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilin4_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilin4_v_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilin4_hv_##opt; \
|
|
||||||
dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilin4_hv_##opt
|
|
||||||
int cpu_flags = av_get_cpu_flags();
|
int cpu_flags = av_get_cpu_flags();
|
||||||
|
|
||||||
if (have_neon(cpu_flags)) {
|
if (have_armv6(cpu_flags))
|
||||||
set_func_ptrs(neon);
|
ff_vp8dsp_init_armv6(dsp);
|
||||||
} else if (HAVE_ARMV6) {
|
if (have_neon(cpu_flags))
|
||||||
set_func_ptrs(armv6);
|
ff_vp8dsp_init_neon(dsp);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
118
libavcodec/arm/vp8dsp_init_armv6.c
Normal file
118
libavcodec/arm/vp8dsp_init_armv6.c
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Libav.
|
||||||
|
*
|
||||||
|
* Libav is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Libav is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with Libav; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "libavcodec/vp8dsp.h"
|
||||||
|
#include "vp8dsp.h"
|
||||||
|
|
||||||
|
void ff_vp8_luma_dc_wht_armv6(DCTELEM block[4][4][16], DCTELEM dc[16]);
|
||||||
|
void ff_vp8_luma_dc_wht_dc_armv6(DCTELEM block[4][4][16], DCTELEM dc[16]);
|
||||||
|
|
||||||
|
void ff_vp8_idct_add_armv6(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add_armv6(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add4y_armv6(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add4uv_armv6(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride);
|
||||||
|
|
||||||
|
VP8_LF(armv6);
|
||||||
|
|
||||||
|
VP8_EPEL(16, armv6);
|
||||||
|
VP8_EPEL(8, armv6);
|
||||||
|
VP8_EPEL(4, armv6);
|
||||||
|
|
||||||
|
VP8_BILIN(16, armv6);
|
||||||
|
VP8_BILIN(8, armv6);
|
||||||
|
VP8_BILIN(4, armv6);
|
||||||
|
|
||||||
|
av_cold void ff_vp8dsp_init_armv6(VP8DSPContext *dsp)
|
||||||
|
{
|
||||||
|
dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_armv6;
|
||||||
|
dsp->vp8_luma_dc_wht_dc = ff_vp8_luma_dc_wht_dc_armv6;
|
||||||
|
|
||||||
|
dsp->vp8_idct_add = ff_vp8_idct_add_armv6;
|
||||||
|
dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_armv6;
|
||||||
|
dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_armv6;
|
||||||
|
dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_armv6;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_armv6;
|
||||||
|
dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_armv6;
|
||||||
|
dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_armv6;
|
||||||
|
dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_armv6;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_armv6;
|
||||||
|
dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_armv6;
|
||||||
|
dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_armv6;
|
||||||
|
dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_armv6;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter16_simple_armv6;
|
||||||
|
dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter16_simple_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][0][0] = ff_put_vp8_pixels4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_armv6;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][1] = ff_put_vp8_bilin16_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilin16_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][0] = ff_put_vp8_bilin16_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][1] = ff_put_vp8_bilin16_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][2] = ff_put_vp8_bilin16_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilin16_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][1] = ff_put_vp8_bilin16_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilin16_hv_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilin8_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilin8_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilin8_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilin8_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilin8_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilin8_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilin8_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilin8_hv_armv6;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][0][0] = ff_put_vp8_pixels4_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilin4_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilin4_h_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilin4_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilin4_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilin4_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilin4_v_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilin4_hv_armv6;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilin4_hv_armv6;
|
||||||
|
}
|
114
libavcodec/arm/vp8dsp_init_neon.c
Normal file
114
libavcodec/arm/vp8dsp_init_neon.c
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Libav.
|
||||||
|
*
|
||||||
|
* Libav is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Libav is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with Libav; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "libavcodec/vp8dsp.h"
|
||||||
|
#include "vp8dsp.h"
|
||||||
|
|
||||||
|
void ff_vp8_luma_dc_wht_neon(DCTELEM block[4][4][16], DCTELEM dc[16]);
|
||||||
|
|
||||||
|
void ff_vp8_idct_add_neon(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add_neon(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add4y_neon(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride);
|
||||||
|
void ff_vp8_idct_dc_add4uv_neon(uint8_t *dst, DCTELEM block[4][16], ptrdiff_t stride);
|
||||||
|
|
||||||
|
VP8_LF(neon);
|
||||||
|
|
||||||
|
VP8_EPEL(16, neon);
|
||||||
|
VP8_EPEL(8, neon);
|
||||||
|
VP8_EPEL(4, neon);
|
||||||
|
|
||||||
|
VP8_BILIN(16, neon);
|
||||||
|
VP8_BILIN(8, neon);
|
||||||
|
VP8_BILIN(4, neon);
|
||||||
|
|
||||||
|
av_cold void ff_vp8dsp_init_neon(VP8DSPContext *dsp)
|
||||||
|
{
|
||||||
|
dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_neon;
|
||||||
|
|
||||||
|
dsp->vp8_idct_add = ff_vp8_idct_add_neon;
|
||||||
|
dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_neon;
|
||||||
|
dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_neon;
|
||||||
|
dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_neon;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_neon;
|
||||||
|
dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_neon;
|
||||||
|
dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_neon;
|
||||||
|
dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_neon;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_neon;
|
||||||
|
dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_neon;
|
||||||
|
dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_neon;
|
||||||
|
dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_neon;
|
||||||
|
|
||||||
|
dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter16_simple_neon;
|
||||||
|
dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter16_simple_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_neon;
|
||||||
|
dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][1] = ff_put_vp8_bilin16_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilin16_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][0] = ff_put_vp8_bilin16_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][1] = ff_put_vp8_bilin16_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][1][2] = ff_put_vp8_bilin16_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilin16_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][1] = ff_put_vp8_bilin16_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilin16_hv_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilin8_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilin8_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilin8_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilin8_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilin8_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilin8_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilin8_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilin8_hv_neon;
|
||||||
|
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilin4_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilin4_h_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilin4_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilin4_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilin4_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilin4_v_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilin4_hv_neon;
|
||||||
|
dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilin4_hv_neon;
|
||||||
|
}
|
@ -2819,7 +2819,7 @@ int ff_check_alignment(void){
|
|||||||
|
|
||||||
av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx)
|
av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
int i;
|
int i, j;
|
||||||
|
|
||||||
ff_check_alignment();
|
ff_check_alignment();
|
||||||
|
|
||||||
@ -3178,11 +3178,15 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx)
|
|||||||
if (ARCH_SH4) ff_dsputil_init_sh4 (c, avctx);
|
if (ARCH_SH4) ff_dsputil_init_sh4 (c, avctx);
|
||||||
if (ARCH_BFIN) ff_dsputil_init_bfin (c, avctx);
|
if (ARCH_BFIN) ff_dsputil_init_bfin (c, avctx);
|
||||||
|
|
||||||
for(i=0; i<64; i++){
|
for (i = 0; i < 4; i++) {
|
||||||
if(!c->put_2tap_qpel_pixels_tab[0][i])
|
for (j = 0; j < 16; j++) {
|
||||||
c->put_2tap_qpel_pixels_tab[0][i]= c->put_h264_qpel_pixels_tab[0][i];
|
if(!c->put_2tap_qpel_pixels_tab[i][j])
|
||||||
if(!c->avg_2tap_qpel_pixels_tab[0][i])
|
c->put_2tap_qpel_pixels_tab[i][j] =
|
||||||
c->avg_2tap_qpel_pixels_tab[0][i]= c->avg_h264_qpel_pixels_tab[0][i];
|
c->put_h264_qpel_pixels_tab[i][j];
|
||||||
|
if(!c->avg_2tap_qpel_pixels_tab[i][j])
|
||||||
|
c->avg_2tap_qpel_pixels_tab[i][j] =
|
||||||
|
c->avg_h264_qpel_pixels_tab[i][j];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ff_init_scantable_permutation(c->idct_permutation,
|
ff_init_scantable_permutation(c->idct_permutation,
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
* FFT and MDCT tests.
|
* FFT and MDCT tests.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libavutil/cpu.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "libavutil/lfg.h"
|
#include "libavutil/lfg.h"
|
||||||
#include "libavutil/log.h"
|
#include "libavutil/log.h"
|
||||||
@ -240,6 +241,7 @@ int main(int argc, char **argv)
|
|||||||
FFTComplex *tab, *tab1, *tab_ref;
|
FFTComplex *tab, *tab1, *tab_ref;
|
||||||
FFTSample *tab2;
|
FFTSample *tab2;
|
||||||
int it, i, c;
|
int it, i, c;
|
||||||
|
int cpuflags;
|
||||||
int do_speed = 0;
|
int do_speed = 0;
|
||||||
int err = 1;
|
int err = 1;
|
||||||
enum tf_transform transform = TRANSFORM_FFT;
|
enum tf_transform transform = TRANSFORM_FFT;
|
||||||
@ -258,7 +260,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
fft_nbits = 9;
|
fft_nbits = 9;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
c = getopt(argc, argv, "hsimrdn:f:");
|
c = getopt(argc, argv, "hsimrdn:f:c:");
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
switch(c) {
|
switch(c) {
|
||||||
@ -286,6 +288,12 @@ int main(int argc, char **argv)
|
|||||||
case 'f':
|
case 'f':
|
||||||
scale = atof(optarg);
|
scale = atof(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'c':
|
||||||
|
cpuflags = av_parse_cpu_flags(optarg);
|
||||||
|
if (cpuflags < 0)
|
||||||
|
return 1;
|
||||||
|
av_set_cpu_flags_mask(cpuflags);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,6 +249,7 @@ const AVCodecTag ff_codec_movaudio_tags[] = {
|
|||||||
{ CODEC_ID_DTS, MKTAG('d', 't', 's', 'h') }, /* DTS-HD audio formats */
|
{ CODEC_ID_DTS, MKTAG('d', 't', 's', 'h') }, /* DTS-HD audio formats */
|
||||||
{ CODEC_ID_DTS, MKTAG('d', 't', 's', 'l') }, /* DTS-HD Lossless formats */
|
{ CODEC_ID_DTS, MKTAG('d', 't', 's', 'l') }, /* DTS-HD Lossless formats */
|
||||||
{ CODEC_ID_DTS, MKTAG('D', 'T', 'S', ' ') }, /* non-standard */
|
{ CODEC_ID_DTS, MKTAG('D', 'T', 'S', ' ') }, /* non-standard */
|
||||||
|
{ CODEC_ID_EAC3, MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F (only valid in ISOBMFF) */
|
||||||
{ CODEC_ID_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
|
{ CODEC_ID_DVAUDIO, MKTAG('v', 'd', 'v', 'a') },
|
||||||
{ CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
|
{ CODEC_ID_DVAUDIO, MKTAG('d', 'v', 'c', 'a') },
|
||||||
{ CODEC_ID_EAC3, MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F */
|
{ CODEC_ID_EAC3, MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F */
|
||||||
|
@ -1985,7 +1985,7 @@ static int has_duration(AVFormatContext *ic)
|
|||||||
if (st->duration != AV_NOPTS_VALUE)
|
if (st->duration != AV_NOPTS_VALUE)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (ic->duration)
|
if (ic->duration != AV_NOPTS_VALUE)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +153,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 51
|
#define LIBAVUTIL_VERSION_MAJOR 51
|
||||||
#define LIBAVUTIL_VERSION_MINOR 47
|
#define LIBAVUTIL_VERSION_MINOR 48
|
||||||
#define LIBAVUTIL_VERSION_MICRO 100
|
#define LIBAVUTIL_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "opt.h"
|
||||||
|
|
||||||
static int flags, checked;
|
static int flags, checked;
|
||||||
|
|
||||||
@ -46,6 +47,69 @@ void av_set_cpu_flags_mask(int mask)
|
|||||||
checked = 1;
|
checked = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int av_parse_cpu_flags(const char *s)
|
||||||
|
{
|
||||||
|
#define CPUFLAG_MMX2 (AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMX2)
|
||||||
|
#define CPUFLAG_3DNOW (AV_CPU_FLAG_3DNOW | AV_CPU_FLAG_MMX)
|
||||||
|
#define CPUFLAG_3DNOWEXT (AV_CPU_FLAG_3DNOWEXT | CPUFLAG_3DNOW)
|
||||||
|
#define CPUFLAG_SSE (AV_CPU_FLAG_SSE | CPUFLAG_MMX2)
|
||||||
|
#define CPUFLAG_SSE2 (AV_CPU_FLAG_SSE2 | CPUFLAG_SSE)
|
||||||
|
#define CPUFLAG_SSE2SLOW (AV_CPU_FLAG_SSE2SLOW | CPUFLAG_SSE2)
|
||||||
|
#define CPUFLAG_SSE3 (AV_CPU_FLAG_SSE3 | CPUFLAG_SSE2)
|
||||||
|
#define CPUFLAG_SSE3SLOW (AV_CPU_FLAG_SSE3SLOW | CPUFLAG_SSE3)
|
||||||
|
#define CPUFLAG_SSSE3 (AV_CPU_FLAG_SSSE3 | CPUFLAG_SSE3)
|
||||||
|
#define CPUFLAG_SSE4 (AV_CPU_FLAG_SSE4 | CPUFLAG_SSSE3)
|
||||||
|
#define CPUFLAG_SSE42 (AV_CPU_FLAG_SSE42 | CPUFLAG_SSE4)
|
||||||
|
#define CPUFLAG_AVX (AV_CPU_FLAG_AVX | CPUFLAG_SSE42)
|
||||||
|
#define CPUFLAG_XOP (AV_CPU_FLAG_XOP | CPUFLAG_AVX)
|
||||||
|
#define CPUFLAG_FMA4 (AV_CPU_FLAG_FMA4 | CPUFLAG_AVX)
|
||||||
|
static const AVOption cpuflags_opts[] = {
|
||||||
|
{ "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },
|
||||||
|
#if ARCH_PPC
|
||||||
|
{ "altivec" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ALTIVEC }, .unit = "flags" },
|
||||||
|
#elif ARCH_X86
|
||||||
|
{ "mmx" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_MMX }, .unit = "flags" },
|
||||||
|
{ "mmx2" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_MMX2 }, .unit = "flags" },
|
||||||
|
{ "sse" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE }, .unit = "flags" },
|
||||||
|
{ "sse2" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE2 }, .unit = "flags" },
|
||||||
|
{ "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE2SLOW }, .unit = "flags" },
|
||||||
|
{ "sse3" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE3 }, .unit = "flags" },
|
||||||
|
{ "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE3SLOW }, .unit = "flags" },
|
||||||
|
{ "ssse3" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSSE3 }, .unit = "flags" },
|
||||||
|
{ "atom" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ATOM }, .unit = "flags" },
|
||||||
|
{ "sse4.1" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE4 }, .unit = "flags" },
|
||||||
|
{ "sse4.2" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE42 }, .unit = "flags" },
|
||||||
|
{ "avx" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_AVX }, .unit = "flags" },
|
||||||
|
{ "xop" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_XOP }, .unit = "flags" },
|
||||||
|
{ "fma4" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_FMA4 }, .unit = "flags" },
|
||||||
|
{ "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_3DNOW }, .unit = "flags" },
|
||||||
|
{ "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_3DNOWEXT }, .unit = "flags" },
|
||||||
|
#elif ARCH_ARM
|
||||||
|
{ "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV5TE }, .unit = "flags" },
|
||||||
|
{ "armv6", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6 }, .unit = "flags" },
|
||||||
|
{ "armv6t2", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6T2 }, .unit = "flags" },
|
||||||
|
{ "vfp", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFP }, .unit = "flags" },
|
||||||
|
{ "vfpv3", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFPV3 }, .unit = "flags" },
|
||||||
|
{ "neon", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_NEON }, .unit = "flags" },
|
||||||
|
#endif
|
||||||
|
{ NULL },
|
||||||
|
};
|
||||||
|
static const AVClass class = {
|
||||||
|
.class_name = "cpuflags",
|
||||||
|
.item_name = av_default_item_name,
|
||||||
|
.option = cpuflags_opts,
|
||||||
|
.version = LIBAVUTIL_VERSION_INT,
|
||||||
|
};
|
||||||
|
|
||||||
|
int flags = 0, ret;
|
||||||
|
const AVClass *pclass = &class;
|
||||||
|
|
||||||
|
if ((ret = av_opt_eval_flags(&pclass, &cpuflags_opts[0], s, &flags)) < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return flags & INT_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
|
|
||||||
#undef printf
|
#undef printf
|
||||||
|
@ -72,6 +72,13 @@ void av_force_cpu_flags(int flags);
|
|||||||
*/
|
*/
|
||||||
attribute_deprecated void av_set_cpu_flags_mask(int mask);
|
attribute_deprecated void av_set_cpu_flags_mask(int mask);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse CPU flags from a string.
|
||||||
|
*
|
||||||
|
* @return a combination of AV_CPU_* flags, negative on error.
|
||||||
|
*/
|
||||||
|
int av_parse_cpu_flags(const char *s);
|
||||||
|
|
||||||
/* The following CPU-specific functions shall not be called directly. */
|
/* The following CPU-specific functions shall not be called directly. */
|
||||||
int ff_get_cpu_flags_arm(void);
|
int ff_get_cpu_flags_arm(void);
|
||||||
int ff_get_cpu_flags_ppc(void);
|
int ff_get_cpu_flags_ppc(void);
|
||||||
|
@ -4,36 +4,38 @@ FATE_FFT += fate-fft-$(1) fate-ifft-$(1) \
|
|||||||
fate-rdft-$(1) fate-irdft-$(1) \
|
fate-rdft-$(1) fate-irdft-$(1) \
|
||||||
fate-dct1d-$(1) fate-idct1d-$(1)
|
fate-dct1d-$(1) fate-idct1d-$(1)
|
||||||
|
|
||||||
fate-fft-$(N): CMD = run libavcodec/fft-test -n$(1)
|
fate-fft-$(N): ARGS = -n$(1)
|
||||||
fate-ifft-$(N): CMD = run libavcodec/fft-test -n$(1) -i
|
fate-ifft-$(N): ARGS = -n$(1) -i
|
||||||
fate-mdct-$(N): CMD = run libavcodec/fft-test -n$(1) -m
|
fate-mdct-$(N): ARGS = -n$(1) -m
|
||||||
fate-imdct-$(N): CMD = run libavcodec/fft-test -n$(1) -m -i
|
fate-imdct-$(N): ARGS = -n$(1) -m -i
|
||||||
fate-rdft-$(N): CMD = run libavcodec/fft-test -n$(1) -r
|
fate-rdft-$(N): ARGS = -n$(1) -r
|
||||||
fate-irdft-$(N): CMD = run libavcodec/fft-test -n$(1) -r -i
|
fate-irdft-$(N): ARGS = -n$(1) -r -i
|
||||||
fate-dct1d-$(N): CMD = run libavcodec/fft-test -n$(1) -d
|
fate-dct1d-$(N): ARGS = -n$(1) -d
|
||||||
fate-idct1d-$(N): CMD = run libavcodec/fft-test -n$(1) -d -i
|
fate-idct1d-$(N): ARGS = -n$(1) -d -i
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT,$(N))))
|
$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT,$(N))))
|
||||||
|
|
||||||
fate-fft-test: $(FATE_FFT)
|
fate-fft-test: $(FATE_FFT)
|
||||||
$(FATE_FFT): libavcodec/fft-test$(EXESUF)
|
$(FATE_FFT): libavcodec/fft-test$(EXESUF)
|
||||||
|
$(FATE_FFT): CMD = run libavcodec/fft-test $(CPUFLAGS:%=-c%) $(ARGS)
|
||||||
$(FATE_FFT): REF = /dev/null
|
$(FATE_FFT): REF = /dev/null
|
||||||
|
|
||||||
define DEF_FFT_FIXED
|
define DEF_FFT_FIXED
|
||||||
FATE_FFT_FIXED += fate-fft-fixed-$(1) fate-ifft-fixed-$(1) \
|
FATE_FFT_FIXED += fate-fft-fixed-$(1) fate-ifft-fixed-$(1) \
|
||||||
fate-mdct-fixed-$(1) fate-imdct-fixed-$(1)
|
fate-mdct-fixed-$(1) fate-imdct-fixed-$(1)
|
||||||
|
|
||||||
fate-fft-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1)
|
fate-fft-fixed-$(1): ARGS = -n$(1)
|
||||||
fate-ifft-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -i
|
fate-ifft-fixed-$(1): ARGS = -n$(1) -i
|
||||||
fate-mdct-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -m
|
fate-mdct-fixed-$(1): ARGS = -n$(1) -m
|
||||||
fate-imdct-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -m -i
|
fate-imdct-fixed-$(1): ARGS = -n$(1) -m -i
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT_FIXED,$(N))))
|
$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT_FIXED,$(N))))
|
||||||
|
|
||||||
fate-fft-fixed-test: $(FATE_FFT_FIXED)
|
fate-fft-fixed-test: $(FATE_FFT_FIXED)
|
||||||
$(FATE_FFT_FIXED): libavcodec/fft-fixed-test$(EXESUF)
|
$(FATE_FFT_FIXED): libavcodec/fft-fixed-test$(EXESUF)
|
||||||
|
$(FATE_FFT_FIXED): CMD = run libavcodec/fft-fixed-test $(CPUFLAGS:%=-c%) $(ARGS)
|
||||||
$(FATE_FFT_FIXED): REF = /dev/null
|
$(FATE_FFT_FIXED): REF = /dev/null
|
||||||
|
|
||||||
FATE_TESTS += $(FATE_FFT) $(FATE_FFT_FIXED)
|
FATE_TESTS += $(FATE_FFT) $(FATE_FFT_FIXED)
|
||||||
|
Loading…
Reference in New Issue
Block a user