Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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
Hide 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