[SCM] libav/experimental: aarch64: implement videodsp.prefetch
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Aug 10 16:02:43 UTC 2014
The following commit has been merged in the experimental branch:
commit d3789eeeed3423bd1ca9dc40030a2f7a21ea5332
Author: Janne Grunau <j at jannau.net>
Date: Sat Apr 5 11:47:18 2014 +0200
aarch64: implement videodsp.prefetch
8% faster h264 decoding on Apple A7.
diff --git a/libavcodec/aarch64/Makefile b/libavcodec/aarch64/Makefile
index 59d1762..757b499 100644
--- a/libavcodec/aarch64/Makefile
+++ b/libavcodec/aarch64/Makefile
@@ -3,10 +3,13 @@ OBJS-$(CONFIG_H264DSP) += aarch64/h264dsp_init_aarch64.o
OBJS-$(CONFIG_H264QPEL) += aarch64/h264qpel_init_aarch64.o
OBJS-$(CONFIG_HPELDSP) += aarch64/hpeldsp_init_aarch64.o
OBJS-$(CONFIG_NEON_CLOBBER_TEST) += aarch64/neontest.o
+OBJS-$(CONFIG_VIDEODSP) += aarch64/videodsp_init.o
OBJS-$(CONFIG_RV40_DECODER) += aarch64/rv40dsp_init_aarch64.o
OBJS-$(CONFIG_VC1_DECODER) += aarch64/vc1dsp_init_aarch64.o
+ARMV8-OBJS-$(CONFIG_VIDEODSP) += aarch64/videodsp.o
+
NEON-OBJS-$(CONFIG_H264CHROMA) += aarch64/h264cmc_neon.o
NEON-OBJS-$(CONFIG_H264DSP) += aarch64/h264dsp_neon.o \
aarch64/h264idct_neon.o
diff --git a/libavcodec/aandcttab.h b/libavcodec/aarch64/videodsp.S
similarity index 71%
copy from libavcodec/aandcttab.h
copy to libavcodec/aarch64/videodsp.S
index daccb7b..7ce5a7d 100644
--- a/libavcodec/aandcttab.h
+++ b/libavcodec/aarch64/videodsp.S
@@ -16,17 +16,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/**
- * @file
- * AAN (Arai Agui Nakajima) (I)DCT tables
- */
-
-#ifndef AVCODEC_AANDCTTAB_H
-#define AVCODEC_AANDCTTAB_H
-
-#include <stdint.h>
-
-extern const uint16_t ff_aanscales[64];
-extern const uint16_t ff_inv_aanscales[64];
+#include "libavutil/aarch64/asm.S"
-#endif /* AVCODEC_AANDCTTAB_H */
+function ff_prefetch_aarch64, export=1
+ subs w2, w2, #2
+ prfm pldl1strm, [x0]
+ prfm pldl1strm, [x0, x1]
+ add x0, x0, x1, lsl #1
+ b.gt X(ff_prefetch_aarch64)
+ ret
+endfunc
diff --git a/libavcodec/arm/videodsp_init_arm.c b/libavcodec/aarch64/videodsp_init.c
similarity index 76%
copy from libavcodec/arm/videodsp_init_arm.c
copy to libavcodec/aarch64/videodsp_init.c
index 20c6e4a..59b697d 100644
--- a/libavcodec/arm/videodsp_init_arm.c
+++ b/libavcodec/aarch64/videodsp_init.c
@@ -1,6 +1,4 @@
/*
- * Copyright (C) 2012 Ronald S. Bultje
- *
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
@@ -19,12 +17,16 @@
*/
#include "libavutil/attributes.h"
-#include "libavutil/arm/cpu.h"
+#include "libavutil/cpu.h"
+#include "libavutil/aarch64/cpu.h"
#include "libavcodec/videodsp.h"
-#include "videodsp_arm.h"
-av_cold void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc)
+void ff_prefetch_aarch64(uint8_t *mem, ptrdiff_t stride, int h);
+
+av_cold void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc)
{
int cpu_flags = av_get_cpu_flags();
- if (have_armv5te(cpu_flags)) ff_videodsp_init_armv5te(ctx, bpc);
+
+ if (have_armv8(cpu_flags))
+ ctx->prefetch = ff_prefetch_aarch64;
}
diff --git a/libavcodec/videodsp.c b/libavcodec/videodsp.c
index a6a1d37..e6d9303 100644
--- a/libavcodec/videodsp.c
+++ b/libavcodec/videodsp.c
@@ -43,6 +43,8 @@ av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
ctx->emulated_edge_mc = ff_emulated_edge_mc_16;
}
+ if (ARCH_AARCH64)
+ ff_videodsp_init_aarch64(ctx, bpc);
if (ARCH_ARM)
ff_videodsp_init_arm(ctx, bpc);
if (ARCH_PPC)
diff --git a/libavcodec/videodsp.h b/libavcodec/videodsp.h
index 2211c5d..04c012a 100644
--- a/libavcodec/videodsp.h
+++ b/libavcodec/videodsp.h
@@ -68,6 +68,7 @@ typedef struct VideoDSPContext {
void ff_videodsp_init(VideoDSPContext *ctx, int bpc);
/* for internal use only (i.e. called by ff_videodsp_init() */
+void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc);
void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc);
void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc);
void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc);
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list