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
f48b12e0
Commit
f48b12e0
authored
Oct 15, 2011
by
Ronald S. Bultje
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swscale: update altivec yuv2planeX asm to new per-plane API.
parent
6cacecdc
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
81 deletions
+13
-81
swscale_altivec.c
libswscale/ppc/swscale_altivec.c
+13
-81
No files found.
libswscale/ppc/swscale_altivec.c
View file @
f48b12e0
...
...
@@ -94,34 +94,29 @@ altivec_packIntArrayToCharArray(int *val, uint8_t* dest, int dstW)
//FIXME remove the usage of scratch buffers.
static
void
yuv2yuvX_altivec_real
(
SwsContext
*
c
,
const
int16_t
*
lumFilter
,
const
int16_t
**
lumSrc
,
int
lumFilterSize
,
const
int16_t
*
chrFilter
,
const
int16_t
**
chrUSrc
,
const
int16_t
**
chrVSrc
,
int
chrFilterSize
,
const
int16_t
**
alpSrc
,
uint8_t
*
dest
[
4
],
int
dstW
,
int
chrDstW
)
yuv2planeX_altivec
(
const
int16_t
*
filter
,
int
filterSize
,
const
int16_t
**
src
,
uint8_t
*
dest
,
int
dstW
,
const
uint8_t
*
dither
,
int
offset
)
{
uint8_t
*
yDest
=
dest
[
0
],
*
uDest
=
dest
[
1
],
*
vDest
=
dest
[
2
];
const
uint8_t
*
lumDither
=
c
->
lumDither8
,
*
chrDither
=
c
->
chrDither8
;
register
int
i
,
j
;
{
DECLARE_ALIGNED
(
16
,
int
,
val
)[
dstW
];
for
(
i
=
0
;
i
<
dstW
;
i
++
)
val
[
i
]
=
lumDither
[
i
&
7
]
<<
12
;
val
[
i
]
=
dither
[(
i
+
offset
)
&
7
]
<<
12
;
for
(
j
=
0
;
j
<
lumF
ilterSize
;
j
++
)
{
vector
signed
short
l1
,
vLumFilter
=
vec_ld
(
j
<<
1
,
lumF
ilter
);
vector
unsigned
char
perm
,
perm0
=
vec_lvsl
(
j
<<
1
,
lumF
ilter
);
for
(
j
=
0
;
j
<
f
ilterSize
;
j
++
)
{
vector
signed
short
l1
,
vLumFilter
=
vec_ld
(
j
<<
1
,
f
ilter
);
vector
unsigned
char
perm
,
perm0
=
vec_lvsl
(
j
<<
1
,
f
ilter
);
vLumFilter
=
vec_perm
(
vLumFilter
,
vLumFilter
,
perm0
);
vLumFilter
=
vec_splat
(
vLumFilter
,
0
);
// lumFilter[j] is loaded 8 times in vLumFilter
perm
=
vec_lvsl
(
0
,
lumS
rc
[
j
]);
l1
=
vec_ld
(
0
,
lumS
rc
[
j
]);
perm
=
vec_lvsl
(
0
,
s
rc
[
j
]);
l1
=
vec_ld
(
0
,
s
rc
[
j
]);
for
(
i
=
0
;
i
<
(
dstW
-
7
);
i
+=
8
)
{
int
offset
=
i
<<
2
;
vector
signed
short
l2
=
vec_ld
((
i
<<
1
)
+
16
,
lumS
rc
[
j
]);
vector
signed
short
l2
=
vec_ld
((
i
<<
1
)
+
16
,
s
rc
[
j
]);
vector
signed
int
v1
=
vec_ld
(
offset
,
val
);
vector
signed
int
v2
=
vec_ld
(
offset
+
16
,
val
);
...
...
@@ -143,73 +138,10 @@ yuv2yuvX_altivec_real(SwsContext *c,
l1
=
l2
;
}
for
(
;
i
<
dstW
;
i
++
)
{
val
[
i
]
+=
lumSrc
[
j
][
i
]
*
lumF
ilter
[
j
];
val
[
i
]
+=
src
[
j
][
i
]
*
f
ilter
[
j
];
}
}
altivec_packIntArrayToCharArray
(
val
,
yDest
,
dstW
);
}
if
(
uDest
!=
0
)
{
DECLARE_ALIGNED
(
16
,
int
,
u
)[
chrDstW
];
DECLARE_ALIGNED
(
16
,
int
,
v
)[
chrDstW
];
for
(
i
=
0
;
i
<
chrDstW
;
i
++
)
{
u
[
i
]
=
chrDither
[
i
&
7
]
<<
12
;
v
[
i
]
=
chrDither
[(
i
+
3
)
&
7
]
<<
12
;
}
for
(
j
=
0
;
j
<
chrFilterSize
;
j
++
)
{
vector
signed
short
l1
,
l1_V
,
vChrFilter
=
vec_ld
(
j
<<
1
,
chrFilter
);
vector
unsigned
char
perm
,
perm0
=
vec_lvsl
(
j
<<
1
,
chrFilter
);
vChrFilter
=
vec_perm
(
vChrFilter
,
vChrFilter
,
perm0
);
vChrFilter
=
vec_splat
(
vChrFilter
,
0
);
// chrFilter[j] is loaded 8 times in vChrFilter
perm
=
vec_lvsl
(
0
,
chrUSrc
[
j
]);
l1
=
vec_ld
(
0
,
chrUSrc
[
j
]);
l1_V
=
vec_ld
(
0
,
chrVSrc
[
j
]);
for
(
i
=
0
;
i
<
(
chrDstW
-
7
);
i
+=
8
)
{
int
offset
=
i
<<
2
;
vector
signed
short
l2
=
vec_ld
((
i
<<
1
)
+
16
,
chrUSrc
[
j
]);
vector
signed
short
l2_V
=
vec_ld
((
i
<<
1
)
+
16
,
chrVSrc
[
j
]);
vector
signed
int
v1
=
vec_ld
(
offset
,
u
);
vector
signed
int
v2
=
vec_ld
(
offset
+
16
,
u
);
vector
signed
int
v1_V
=
vec_ld
(
offset
,
v
);
vector
signed
int
v2_V
=
vec_ld
(
offset
+
16
,
v
);
vector
signed
short
ls
=
vec_perm
(
l1
,
l2
,
perm
);
// chrUSrc[j][i] ... chrUSrc[j][i+7]
vector
signed
short
ls_V
=
vec_perm
(
l1_V
,
l2_V
,
perm
);
// chrVSrc[j][i] ... chrVSrc[j][i]
vector
signed
int
i1
=
vec_mule
(
vChrFilter
,
ls
);
vector
signed
int
i2
=
vec_mulo
(
vChrFilter
,
ls
);
vector
signed
int
i1_V
=
vec_mule
(
vChrFilter
,
ls_V
);
vector
signed
int
i2_V
=
vec_mulo
(
vChrFilter
,
ls_V
);
vector
signed
int
vf1
=
vec_mergeh
(
i1
,
i2
);
vector
signed
int
vf2
=
vec_mergel
(
i1
,
i2
);
// chrUSrc[j][i] * chrFilter[j] ... chrUSrc[j][i+7] * chrFilter[j]
vector
signed
int
vf1_V
=
vec_mergeh
(
i1_V
,
i2_V
);
vector
signed
int
vf2_V
=
vec_mergel
(
i1_V
,
i2_V
);
// chrVSrc[j][i] * chrFilter[j] ... chrVSrc[j][i+7] * chrFilter[j]
vector
signed
int
vo1
=
vec_add
(
v1
,
vf1
);
vector
signed
int
vo2
=
vec_add
(
v2
,
vf2
);
vector
signed
int
vo1_V
=
vec_add
(
v1_V
,
vf1_V
);
vector
signed
int
vo2_V
=
vec_add
(
v2_V
,
vf2_V
);
vec_st
(
vo1
,
offset
,
u
);
vec_st
(
vo2
,
offset
+
16
,
u
);
vec_st
(
vo1_V
,
offset
,
v
);
vec_st
(
vo2_V
,
offset
+
16
,
v
);
l1
=
l2
;
l1_V
=
l2_V
;
}
for
(
;
i
<
chrDstW
;
i
++
)
{
u
[
i
]
+=
chrUSrc
[
j
][
i
]
*
chrFilter
[
j
];
v
[
i
]
+=
chrVSrc
[
j
][
i
]
*
chrFilter
[
j
];
}
}
altivec_packIntArrayToCharArray
(
u
,
uDest
,
chrDstW
);
altivec_packIntArrayToCharArray
(
v
,
vDest
,
chrDstW
);
altivec_packIntArrayToCharArray
(
val
,
dest
,
dstW
);
}
}
...
...
@@ -405,7 +337,7 @@ void ff_sws_init_swScale_altivec(SwsContext *c)
if
(
!
is16BPS
(
dstFormat
)
&&
!
is9_OR_10BPS
(
dstFormat
)
&&
dstFormat
!=
PIX_FMT_NV12
&&
dstFormat
!=
PIX_FMT_NV21
&&
!
c
->
alpPixBuf
)
{
// c->yuv2yuvX = yuv2yuvX_altivec_real
;
c
->
yuv2planeX
=
yuv2planeX_altivec
;
}
/* The following list of supported dstFormat values should
...
...
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