Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
f2e3d706
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f2e3d706
编写于
1月 30, 2014
作者:
C
Clément Bœsch
提交者:
Anton Khirnov
10月 04, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vp9lpf/x86: add ff_vp9_loop_filter_h_{48,84}_16_{sse2,ssse3,avx}().
Signed-off-by:
N
Anton Khirnov
<
anton@khirnov.net
>
上级
92d47550
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
48 deletion
+53
-48
libavcodec/x86/vp9dsp_init.c
libavcodec/x86/vp9dsp_init.c
+22
-20
libavcodec/x86/vp9lpf.asm
libavcodec/x86/vp9lpf.asm
+31
-28
未找到文件。
libavcodec/x86/vp9dsp_init.c
浏览文件 @
f2e3d706
...
...
@@ -226,6 +226,12 @@ void ff_vp9_loop_filter_h_##size1##_##size2##_##opt(uint8_t *dst, ptrdiff_t stri
lpf_funcs
(
16
,
16
,
sse2
);
lpf_funcs
(
16
,
16
,
ssse3
);
lpf_funcs
(
16
,
16
,
avx
);
lpf_funcs
(
84
,
16
,
sse2
);
lpf_funcs
(
84
,
16
,
ssse3
);
lpf_funcs
(
84
,
16
,
avx
);
lpf_funcs
(
48
,
16
,
sse2
);
lpf_funcs
(
48
,
16
,
ssse3
);
lpf_funcs
(
48
,
16
,
avx
);
lpf_funcs
(
88
,
16
,
sse2
);
lpf_funcs
(
88
,
16
,
ssse3
);
lpf_funcs
(
88
,
16
,
avx
);
...
...
@@ -269,6 +275,19 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp)
init_subpel3_8to64(idx, type, opt); \
init_subpel2(4, idx, 4, type, opt)
#define init_lpf(opt) do { \
if (ARCH_X86_64) { \
dsp->loop_filter_16[0] = ff_vp9_loop_filter_h_16_16_##opt; \
dsp->loop_filter_16[1] = ff_vp9_loop_filter_v_16_16_##opt; \
dsp->loop_filter_mix2[0][1][0] = ff_vp9_loop_filter_h_48_16_##opt; \
dsp->loop_filter_mix2[0][1][1] = ff_vp9_loop_filter_v_48_16_##opt; \
dsp->loop_filter_mix2[1][0][0] = ff_vp9_loop_filter_h_84_16_##opt; \
dsp->loop_filter_mix2[1][0][1] = ff_vp9_loop_filter_v_84_16_##opt; \
dsp->loop_filter_mix2[1][1][0] = ff_vp9_loop_filter_h_88_16_##opt; \
dsp->loop_filter_mix2[1][1][1] = ff_vp9_loop_filter_v_88_16_##opt; \
} \
} while (0)
if
(
EXTERNAL_MMX
(
cpu_flags
))
{
init_fpel
(
4
,
0
,
4
,
put
,
mmx
);
init_fpel
(
3
,
0
,
8
,
put
,
mmx
);
...
...
@@ -293,36 +312,19 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp)
init_fpel
(
2
,
1
,
16
,
avg
,
sse2
);
init_fpel
(
1
,
1
,
32
,
avg
,
sse2
);
init_fpel
(
0
,
1
,
64
,
avg
,
sse2
);
if
(
ARCH_X86_64
)
{
dsp
->
loop_filter_mix2
[
1
][
1
][
0
]
=
ff_vp9_loop_filter_h_88_16_sse2
;
dsp
->
loop_filter_mix2
[
1
][
1
][
1
]
=
ff_vp9_loop_filter_v_88_16_sse2
;
dsp
->
loop_filter_16
[
0
]
=
ff_vp9_loop_filter_h_16_16_sse2
;
dsp
->
loop_filter_16
[
1
]
=
ff_vp9_loop_filter_v_16_16_sse2
;
}
init_lpf
(
sse2
);
}
if
(
EXTERNAL_SSSE3
(
cpu_flags
))
{
init_subpel3
(
0
,
put
,
ssse3
);
init_subpel3
(
1
,
avg
,
ssse3
);
if
(
ARCH_X86_64
)
{
dsp
->
loop_filter_mix2
[
1
][
1
][
0
]
=
ff_vp9_loop_filter_h_88_16_ssse3
;
dsp
->
loop_filter_mix2
[
1
][
1
][
1
]
=
ff_vp9_loop_filter_v_88_16_ssse3
;
dsp
->
loop_filter_16
[
0
]
=
ff_vp9_loop_filter_h_16_16_ssse3
;
dsp
->
loop_filter_16
[
1
]
=
ff_vp9_loop_filter_v_16_16_ssse3
;
}
init_lpf
(
ssse3
);
}
if
(
EXTERNAL_AVX
(
cpu_flags
))
{
init_fpel
(
1
,
0
,
32
,
put
,
avx
);
init_fpel
(
0
,
0
,
64
,
put
,
avx
);
if
(
ARCH_X86_64
)
{
dsp
->
loop_filter_mix2
[
1
][
1
][
0
]
=
ff_vp9_loop_filter_h_88_16_avx
;
dsp
->
loop_filter_mix2
[
1
][
1
][
1
]
=
ff_vp9_loop_filter_v_88_16_avx
;
dsp
->
loop_filter_16
[
0
]
=
ff_vp9_loop_filter_h_16_16_avx
;
dsp
->
loop_filter_16
[
1
]
=
ff_vp9_loop_filter_v_16_16_avx
;
}
init_lpf
(
avx
);
}
if
(
EXTERNAL_AVX2
(
cpu_flags
))
{
...
...
libavcodec/x86/vp9lpf.asm
浏览文件 @
f2e3d706
...
...
@@ -45,6 +45,11 @@ pw_8: times 8 dw 8
mask_mix:
times
8
db
0
times
8
db
1
mask_mix84:
times
8
db
0xff
times
8
db
0x00
mask_mix48:
times
8
db
0x00
times
8
db
0xff
SECTION
.text
; %1 = abs(%2-%3)
...
...
@@ -312,7 +317,7 @@ SECTION .text
neg
mstride3q
%ifidn %1, h
%if %2
== 88
%if %2
> 16
%define movx movh
lea
ds
tq
,
[
ds
tq
+
8
*
strideq
-
4
]
%else
...
...
@@ -360,7 +365,7 @@ SECTION .text
%define Q6 rsp + 224
%define Q7 rsp + 240
%if %2
!= 88
%if %2
== 16
TRANSPOSE16x16B
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
[
rsp
]
mova
[
P7
],
m0
mova
[
P6
],
m1
...
...
@@ -377,7 +382,7 @@ SECTION .text
mova
[
Q1
],
m9
mova
[
Q2
],
m10
mova
[
Q3
],
m11
%if %2
!= 88
%if %2
== 16
mova
[
Q4
],
m12
mova
[
Q5
],
m13
mova
[
Q6
],
m14
...
...
@@ -392,7 +397,7 @@ SECTION .text
%endif
SPLATB_REG
m2
,
I
,
m0
; I I I I ...
SPLATB_REG
m3
,
E
,
m0
; E E E E ...
%el
if %2 == 88
%el
se
%if cpuflag(ssse3)
mova
m0
,
[
mask_mix
]
%endif
...
...
@@ -452,7 +457,7 @@ SECTION .text
ABSSUB_CMP
m1
,
m9
,
m11
,
m6
,
m4
,
m5
,
m8
; abs(p2 - p0) <= 1
pand
m2
,
m1
ABSSUB
m4
,
m10
,
m11
,
m5
; abs(p1 - p0)
%if %2
!= 88
%if %2
== 16
%if cpuflag(ssse3)
pxor
m0
,
m0
%endif
...
...
@@ -476,8 +481,11 @@ SECTION .text
pand
m2
,
m1
ABSSUB_CMP
m1
,
m15
,
m12
,
m6
,
m4
,
m5
,
m8
; abs(q3 - q0) <= 1
pand
m2
,
m1
; flat8in final value
%if %2 == 84 || %2 == 48
pand
m2
,
[
mask_mix
%
2
]
%endif
%if %2
!= 88
%if %2
== 16
; (m0: hev, m2: flat8in, m3: fm, m6: pb_81, m9..15: p2 p1 p0 q0 q1 q2 q3)
; calc flat8out mask
mova
m8
,
[
P7
]
...
...
@@ -570,7 +578,7 @@ SECTION .text
; ([m1: flat8out], m2: flat8in, m3: fm, m10..13: p1 p0 q0 q1)
; filter6()
pxor
m0
,
m0
%if %2
== 88
%if %2
> 16
pand
m3
,
m2
%else
pand
m2
,
m3
; mask(fm) & mask(in)
...
...
@@ -608,7 +616,7 @@ SECTION .text
; q5 +5 -p2 -q4 +q5 +q7 . q5 . .
; q6 +6 -p1 -q5 +q6 +q7 . q6 . .
%if %2
!= 88
%if %2
== 16
pand
m1
,
m2
; mask(out) & (mask(fm) & mask(in))
mova
m2
,
[
P7
]
mova
m3
,
[
P6
]
...
...
@@ -631,7 +639,7 @@ SECTION .text
%endif
%ifidn %1, h
%if %2
!= 88
%if %2
== 16
mova
m0
,
[
P7
]
mova
m1
,
[
P6
]
mova
m2
,
[
P5
]
...
...
@@ -720,28 +728,23 @@ SECTION .text
RET
%endmacro
%macro LPF_16_
16_VH 1
INIT_XMM
%
1
cglobal
vp9_loop_filter_v_
16
_16
,
5
,
10
,
16
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
v
,
16
cglobal
vp9_loop_filter_h_
16
_16
,
5
,
10
,
16
,
256
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
h
,
16
%macro LPF_16_
VH 2
INIT_XMM
%
2
cglobal
vp9_loop_filter_v_
%
1
_16
,
5
,
10
,
16
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
v
,
%
1
cglobal
vp9_loop_filter_h_
%
1
_16
,
5
,
10
,
16
,
256
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
h
,
%
1
%endmacro
%macro LPF_88_16_VH 1
INIT_XMM
%
1
cglobal
vp9_loop_filter_v_88_16
,
5
,
10
,
16
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
v
,
88
cglobal
vp9_loop_filter_h_88_16
,
5
,
10
,
16
,
256
,
ds
t
,
stride
,
E
,
I
,
H
,
mstride
,
ds
t1
,
ds
t2
,
stride3
,
mstride3
LOOPFILTER
h
,
88
%macro LPF_16_VH_ALL_OPTS 1
LPF_16_VH
%
1
,
ss
e2
LPF_16_VH
%
1
,
ss
se3
LPF_16_VH
%
1
,
avx
%endmacro
LPF_16_16_VH
ss
e2
LPF_16_16_VH
ss
se3
LPF_16_16_VH
avx
LPF_88_16_VH
ss
e2
LPF_88_16_VH
ss
se3
LPF_88_16_VH
avx
LPF_16_VH_ALL_OPTS
16
LPF_16_VH_ALL_OPTS
48
LPF_16_VH_ALL_OPTS
84
LPF_16_VH_ALL_OPTS
88
%endif
; x86-64
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录