Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
74f8d9aa
Commit
74f8d9aa
authored
Feb 09, 2016
by
Timothy Gu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x86/vf_blend: Add SSE2 optimization for screen
10x faster than C. Reviewed-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
c8b1612a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
0 deletions
+31
-0
vf_blend.asm
libavfilter/x86/vf_blend.asm
+29
-0
vf_blend_init.c
libavfilter/x86/vf_blend_init.c
+2
-0
No files found.
libavfilter/x86/vf_blend.asm
View file @
74f8d9aa
...
@@ -111,6 +111,13 @@ BLEND_END
...
@@ -111,6 +111,13 @@ BLEND_END
psrlw
%1
,
8
; 00xx00xx a * b / 255
psrlw
%1
,
8
; 00xx00xx a * b / 255
%endmacro
%endmacro
%macro
SCREEN
4
; a, b, pw_1, pw_255
pxor
%1
,
%4
; 00xx00xx 255 - a
pxor
%2
,
%4
MULTIPLY
%1
,
%2
,
%3
pxor
%1
,
%4
; 00xx00xx 255 - x / 255
%endmacro
BLEND_INIT
multiply
,
4
BLEND_INIT
multiply
,
4
pxor
m2
,
m2
pxor
m2
,
m2
mova
m3
,
[
pw_1
]
mova
m3
,
[
pw_1
]
...
@@ -134,6 +141,28 @@ BLEND_INIT multiply, 4
...
@@ -134,6 +141,28 @@ BLEND_INIT multiply, 4
jl
.
loop
jl
.
loop
BLEND_END
BLEND_END
BLEND_INIT
screen
,
5
pxor
m2
,
m2
mova
m3
,
[
pw_1
]
mova
m4
,
[
pw_255
]
.
nextrow
:
mov
xq
,
widthq
.
loop
:
movh
m0
,
[
topq
+
xq
]
; 0000xxxx
movh
m1
,
[
bottomq
+
xq
]
punpcklbw
m0
,
m2
; 00xx00xx
punpcklbw
m1
,
m2
SCREEN
m0
,
m1
,
m3
,
m4
packuswb
m0
,
m0
; 0000xxxx
movh
[
dstq
+
xq
]
,
m0
add
xq
,
mmsize
/
2
jl
.
loop
BLEND_END
BLEND_INIT
average
,
3
BLEND_INIT
average
,
3
pxor
m2
,
m2
pxor
m2
,
m2
.
nextrow
:
.
nextrow
:
...
...
libavfilter/x86/vf_blend_init.c
View file @
74f8d9aa
...
@@ -37,6 +37,7 @@ BLEND_FUNC(and, sse2)
...
@@ -37,6 +37,7 @@ BLEND_FUNC(and, sse2)
BLEND_FUNC
(
darken
,
sse2
)
BLEND_FUNC
(
darken
,
sse2
)
BLEND_FUNC
(
difference128
,
sse2
)
BLEND_FUNC
(
difference128
,
sse2
)
BLEND_FUNC
(
multiply
,
sse2
)
BLEND_FUNC
(
multiply
,
sse2
)
BLEND_FUNC
(
screen
,
sse2
)
BLEND_FUNC
(
hardmix
,
sse2
)
BLEND_FUNC
(
hardmix
,
sse2
)
BLEND_FUNC
(
lighten
,
sse2
)
BLEND_FUNC
(
lighten
,
sse2
)
BLEND_FUNC
(
or
,
sse2
)
BLEND_FUNC
(
or
,
sse2
)
...
@@ -65,6 +66,7 @@ av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit)
...
@@ -65,6 +66,7 @@ av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit)
case
BLEND_MULTIPLY
:
param
->
blend
=
ff_blend_multiply_sse2
;
break
;
case
BLEND_MULTIPLY
:
param
->
blend
=
ff_blend_multiply_sse2
;
break
;
case
BLEND_OR
:
param
->
blend
=
ff_blend_or_sse2
;
break
;
case
BLEND_OR
:
param
->
blend
=
ff_blend_or_sse2
;
break
;
case
BLEND_PHOENIX
:
param
->
blend
=
ff_blend_phoenix_sse2
;
break
;
case
BLEND_PHOENIX
:
param
->
blend
=
ff_blend_phoenix_sse2
;
break
;
case
BLEND_SCREEN
:
param
->
blend
=
ff_blend_screen_sse2
;
break
;
case
BLEND_SUBTRACT
:
param
->
blend
=
ff_blend_subtract_sse2
;
break
;
case
BLEND_SUBTRACT
:
param
->
blend
=
ff_blend_subtract_sse2
;
break
;
case
BLEND_XOR
:
param
->
blend
=
ff_blend_xor_sse2
;
break
;
case
BLEND_XOR
:
param
->
blend
=
ff_blend_xor_sse2
;
break
;
case
BLEND_DIFFERENCE
:
param
->
blend
=
ff_blend_difference_sse2
;
break
;
case
BLEND_DIFFERENCE
:
param
->
blend
=
ff_blend_difference_sse2
;
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment