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
0e5d31b1
Commit
0e5d31b1
authored
Jun 03, 2011
by
Ronald S. Bultje
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swscale: split out unscaled altivec YUV converters in their own file.
parent
83a8b300
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
200 additions
and
171 deletions
+200
-171
Makefile
libswscale/Makefile
+2
-1
swscale_altivec_template.c
libswscale/ppc/swscale_altivec_template.c
+0
-155
yuv2yuv_altivec.c
libswscale/ppc/yuv2yuv_altivec.c
+191
-0
swscale.c
libswscale/swscale.c
+5
-15
swscale_internal.h
libswscale/swscale_internal.h
+2
-0
No files found.
libswscale/Makefile
View file @
0e5d31b1
...
...
@@ -11,7 +11,8 @@ OBJS-$(ARCH_BFIN) += bfin/internal_bfin.o \
bfin/swscale_bfin.o
\
bfin/yuv2rgb_bfin.o
OBJS-$(CONFIG_MLIB)
+=
mlib/yuv2rgb_mlib.o
OBJS-$(HAVE_ALTIVEC)
+=
ppc/yuv2rgb_altivec.o
OBJS-$(HAVE_ALTIVEC)
+=
ppc/yuv2rgb_altivec.o
\
ppc/yuv2yuv_altivec.o
OBJS-$(HAVE_MMX)
+=
x86/rgb2rgb.o
\
x86/yuv2rgb_mmx.o
OBJS-$(HAVE_VIS)
+=
sparc/yuv2rgb_vis.o
...
...
libswscale/ppc/swscale_altivec_template.c
View file @
0e5d31b1
...
...
@@ -390,158 +390,3 @@ static inline void hScale_altivec_real(int16_t *dst, int dstW,
}
}
}
static
inline
int
yv12toyuy2_unscaled_altivec
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dstParam
[],
int
dstStride_a
[])
{
uint8_t
*
dst
=
dstParam
[
0
]
+
dstStride_a
[
0
]
*
srcSliceY
;
// yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]);
const
uint8_t
*
ysrc
=
src
[
0
];
const
uint8_t
*
usrc
=
src
[
1
];
const
uint8_t
*
vsrc
=
src
[
2
];
const
int
width
=
c
->
srcW
;
const
int
height
=
srcSliceH
;
const
int
lumStride
=
srcStride
[
0
];
const
int
chromStride
=
srcStride
[
1
];
const
int
dstStride
=
dstStride_a
[
0
];
const
vector
unsigned
char
yperm
=
vec_lvsl
(
0
,
ysrc
);
const
int
vertLumPerChroma
=
2
;
register
unsigned
int
y
;
if
(
width
&
15
)
{
yv12toyuy2
(
ysrc
,
usrc
,
vsrc
,
dst
,
c
->
srcW
,
srcSliceH
,
lumStride
,
chromStride
,
dstStride
);
return
srcSliceH
;
}
/* This code assumes:
1) dst is 16 bytes-aligned
2) dstStride is a multiple of 16
3) width is a multiple of 16
4) lum & chrom stride are multiples of 8
*/
for
(
y
=
0
;
y
<
height
;
y
++
)
{
int
i
;
for
(
i
=
0
;
i
<
width
-
31
;
i
+=
32
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_yA
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_yB
=
vec_ld
(
i
+
16
,
ysrc
);
vector
unsigned
char
v_yC
=
vec_ld
(
i
+
32
,
ysrc
);
vector
unsigned
char
v_y1
=
vec_perm
(
v_yA
,
v_yB
,
yperm
);
vector
unsigned
char
v_y2
=
vec_perm
(
v_yB
,
v_yC
,
yperm
);
vector
unsigned
char
v_uA
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_uB
=
vec_ld
(
j
+
16
,
usrc
);
vector
unsigned
char
v_u
=
vec_perm
(
v_uA
,
v_uB
,
vec_lvsl
(
j
,
usrc
));
vector
unsigned
char
v_vA
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_vB
=
vec_ld
(
j
+
16
,
vsrc
);
vector
unsigned
char
v_v
=
vec_perm
(
v_vA
,
v_vB
,
vec_lvsl
(
j
,
vsrc
));
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uv_b
=
vec_mergel
(
v_u
,
v_v
);
vector
unsigned
char
v_yuy2_0
=
vec_mergeh
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_1
=
vec_mergel
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_2
=
vec_mergeh
(
v_y2
,
v_uv_b
);
vector
unsigned
char
v_yuy2_3
=
vec_mergel
(
v_y2
,
v_uv_b
);
vec_st
(
v_yuy2_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_yuy2_1
,
(
i
<<
1
)
+
16
,
dst
);
vec_st
(
v_yuy2_2
,
(
i
<<
1
)
+
32
,
dst
);
vec_st
(
v_yuy2_3
,
(
i
<<
1
)
+
48
,
dst
);
}
if
(
i
<
width
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_y1
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_u
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_v
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_yuy2_0
=
vec_mergeh
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_1
=
vec_mergel
(
v_y1
,
v_uv_a
);
vec_st
(
v_yuy2_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_yuy2_1
,
(
i
<<
1
)
+
16
,
dst
);
}
if
((
y
&
(
vertLumPerChroma
-
1
))
==
vertLumPerChroma
-
1
)
{
usrc
+=
chromStride
;
vsrc
+=
chromStride
;
}
ysrc
+=
lumStride
;
dst
+=
dstStride
;
}
return
srcSliceH
;
}
static
inline
int
yv12touyvy_unscaled_altivec
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dstParam
[],
int
dstStride_a
[])
{
uint8_t
*
dst
=
dstParam
[
0
]
+
dstStride_a
[
0
]
*
srcSliceY
;
// yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]);
const
uint8_t
*
ysrc
=
src
[
0
];
const
uint8_t
*
usrc
=
src
[
1
];
const
uint8_t
*
vsrc
=
src
[
2
];
const
int
width
=
c
->
srcW
;
const
int
height
=
srcSliceH
;
const
int
lumStride
=
srcStride
[
0
];
const
int
chromStride
=
srcStride
[
1
];
const
int
dstStride
=
dstStride_a
[
0
];
const
int
vertLumPerChroma
=
2
;
const
vector
unsigned
char
yperm
=
vec_lvsl
(
0
,
ysrc
);
register
unsigned
int
y
;
if
(
width
&
15
)
{
yv12touyvy
(
ysrc
,
usrc
,
vsrc
,
dst
,
c
->
srcW
,
srcSliceH
,
lumStride
,
chromStride
,
dstStride
);
return
srcSliceH
;
}
/* This code assumes:
1) dst is 16 bytes-aligned
2) dstStride is a multiple of 16
3) width is a multiple of 16
4) lum & chrom stride are multiples of 8
*/
for
(
y
=
0
;
y
<
height
;
y
++
)
{
int
i
;
for
(
i
=
0
;
i
<
width
-
31
;
i
+=
32
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_yA
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_yB
=
vec_ld
(
i
+
16
,
ysrc
);
vector
unsigned
char
v_yC
=
vec_ld
(
i
+
32
,
ysrc
);
vector
unsigned
char
v_y1
=
vec_perm
(
v_yA
,
v_yB
,
yperm
);
vector
unsigned
char
v_y2
=
vec_perm
(
v_yB
,
v_yC
,
yperm
);
vector
unsigned
char
v_uA
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_uB
=
vec_ld
(
j
+
16
,
usrc
);
vector
unsigned
char
v_u
=
vec_perm
(
v_uA
,
v_uB
,
vec_lvsl
(
j
,
usrc
));
vector
unsigned
char
v_vA
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_vB
=
vec_ld
(
j
+
16
,
vsrc
);
vector
unsigned
char
v_v
=
vec_perm
(
v_vA
,
v_vB
,
vec_lvsl
(
j
,
vsrc
));
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uv_b
=
vec_mergel
(
v_u
,
v_v
);
vector
unsigned
char
v_uyvy_0
=
vec_mergeh
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_1
=
vec_mergel
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_2
=
vec_mergeh
(
v_uv_b
,
v_y2
);
vector
unsigned
char
v_uyvy_3
=
vec_mergel
(
v_uv_b
,
v_y2
);
vec_st
(
v_uyvy_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_uyvy_1
,
(
i
<<
1
)
+
16
,
dst
);
vec_st
(
v_uyvy_2
,
(
i
<<
1
)
+
32
,
dst
);
vec_st
(
v_uyvy_3
,
(
i
<<
1
)
+
48
,
dst
);
}
if
(
i
<
width
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_y1
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_u
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_v
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uyvy_0
=
vec_mergeh
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_1
=
vec_mergel
(
v_uv_a
,
v_y1
);
vec_st
(
v_uyvy_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_uyvy_1
,
(
i
<<
1
)
+
16
,
dst
);
}
if
((
y
&
(
vertLumPerChroma
-
1
))
==
vertLumPerChroma
-
1
)
{
usrc
+=
chromStride
;
vsrc
+=
chromStride
;
}
ysrc
+=
lumStride
;
dst
+=
dstStride
;
}
return
srcSliceH
;
}
libswscale/ppc/yuv2yuv_altivec.c
0 → 100644
View file @
0e5d31b1
/*
* AltiVec-enhanced yuv-to-yuv convertion routines.
*
* Copyright (C) 2004 Romain Dolbeau <romain@dolbeau.org>
* based on the equivalent C code in swscale.c
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <inttypes.h>
#include "config.h"
#include "libswscale/swscale.h"
#include "libswscale/swscale_internal.h"
#include "libavutil/cpu.h"
static
int
yv12toyuy2_unscaled_altivec
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dstParam
[],
int
dstStride_a
[])
{
uint8_t
*
dst
=
dstParam
[
0
]
+
dstStride_a
[
0
]
*
srcSliceY
;
// yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]);
const
uint8_t
*
ysrc
=
src
[
0
];
const
uint8_t
*
usrc
=
src
[
1
];
const
uint8_t
*
vsrc
=
src
[
2
];
const
int
width
=
c
->
srcW
;
const
int
height
=
srcSliceH
;
const
int
lumStride
=
srcStride
[
0
];
const
int
chromStride
=
srcStride
[
1
];
const
int
dstStride
=
dstStride_a
[
0
];
const
vector
unsigned
char
yperm
=
vec_lvsl
(
0
,
ysrc
);
const
int
vertLumPerChroma
=
2
;
register
unsigned
int
y
;
/* This code assumes:
1) dst is 16 bytes-aligned
2) dstStride is a multiple of 16
3) width is a multiple of 16
4) lum & chrom stride are multiples of 8
*/
for
(
y
=
0
;
y
<
height
;
y
++
)
{
int
i
;
for
(
i
=
0
;
i
<
width
-
31
;
i
+=
32
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_yA
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_yB
=
vec_ld
(
i
+
16
,
ysrc
);
vector
unsigned
char
v_yC
=
vec_ld
(
i
+
32
,
ysrc
);
vector
unsigned
char
v_y1
=
vec_perm
(
v_yA
,
v_yB
,
yperm
);
vector
unsigned
char
v_y2
=
vec_perm
(
v_yB
,
v_yC
,
yperm
);
vector
unsigned
char
v_uA
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_uB
=
vec_ld
(
j
+
16
,
usrc
);
vector
unsigned
char
v_u
=
vec_perm
(
v_uA
,
v_uB
,
vec_lvsl
(
j
,
usrc
));
vector
unsigned
char
v_vA
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_vB
=
vec_ld
(
j
+
16
,
vsrc
);
vector
unsigned
char
v_v
=
vec_perm
(
v_vA
,
v_vB
,
vec_lvsl
(
j
,
vsrc
));
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uv_b
=
vec_mergel
(
v_u
,
v_v
);
vector
unsigned
char
v_yuy2_0
=
vec_mergeh
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_1
=
vec_mergel
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_2
=
vec_mergeh
(
v_y2
,
v_uv_b
);
vector
unsigned
char
v_yuy2_3
=
vec_mergel
(
v_y2
,
v_uv_b
);
vec_st
(
v_yuy2_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_yuy2_1
,
(
i
<<
1
)
+
16
,
dst
);
vec_st
(
v_yuy2_2
,
(
i
<<
1
)
+
32
,
dst
);
vec_st
(
v_yuy2_3
,
(
i
<<
1
)
+
48
,
dst
);
}
if
(
i
<
width
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_y1
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_u
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_v
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_yuy2_0
=
vec_mergeh
(
v_y1
,
v_uv_a
);
vector
unsigned
char
v_yuy2_1
=
vec_mergel
(
v_y1
,
v_uv_a
);
vec_st
(
v_yuy2_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_yuy2_1
,
(
i
<<
1
)
+
16
,
dst
);
}
if
((
y
&
(
vertLumPerChroma
-
1
))
==
vertLumPerChroma
-
1
)
{
usrc
+=
chromStride
;
vsrc
+=
chromStride
;
}
ysrc
+=
lumStride
;
dst
+=
dstStride
;
}
return
srcSliceH
;
}
static
int
yv12touyvy_unscaled_altivec
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dstParam
[],
int
dstStride_a
[])
{
uint8_t
*
dst
=
dstParam
[
0
]
+
dstStride_a
[
0
]
*
srcSliceY
;
// yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]);
const
uint8_t
*
ysrc
=
src
[
0
];
const
uint8_t
*
usrc
=
src
[
1
];
const
uint8_t
*
vsrc
=
src
[
2
];
const
int
width
=
c
->
srcW
;
const
int
height
=
srcSliceH
;
const
int
lumStride
=
srcStride
[
0
];
const
int
chromStride
=
srcStride
[
1
];
const
int
dstStride
=
dstStride_a
[
0
];
const
int
vertLumPerChroma
=
2
;
const
vector
unsigned
char
yperm
=
vec_lvsl
(
0
,
ysrc
);
register
unsigned
int
y
;
/* This code assumes:
1) dst is 16 bytes-aligned
2) dstStride is a multiple of 16
3) width is a multiple of 16
4) lum & chrom stride are multiples of 8
*/
for
(
y
=
0
;
y
<
height
;
y
++
)
{
int
i
;
for
(
i
=
0
;
i
<
width
-
31
;
i
+=
32
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_yA
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_yB
=
vec_ld
(
i
+
16
,
ysrc
);
vector
unsigned
char
v_yC
=
vec_ld
(
i
+
32
,
ysrc
);
vector
unsigned
char
v_y1
=
vec_perm
(
v_yA
,
v_yB
,
yperm
);
vector
unsigned
char
v_y2
=
vec_perm
(
v_yB
,
v_yC
,
yperm
);
vector
unsigned
char
v_uA
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_uB
=
vec_ld
(
j
+
16
,
usrc
);
vector
unsigned
char
v_u
=
vec_perm
(
v_uA
,
v_uB
,
vec_lvsl
(
j
,
usrc
));
vector
unsigned
char
v_vA
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_vB
=
vec_ld
(
j
+
16
,
vsrc
);
vector
unsigned
char
v_v
=
vec_perm
(
v_vA
,
v_vB
,
vec_lvsl
(
j
,
vsrc
));
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uv_b
=
vec_mergel
(
v_u
,
v_v
);
vector
unsigned
char
v_uyvy_0
=
vec_mergeh
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_1
=
vec_mergel
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_2
=
vec_mergeh
(
v_uv_b
,
v_y2
);
vector
unsigned
char
v_uyvy_3
=
vec_mergel
(
v_uv_b
,
v_y2
);
vec_st
(
v_uyvy_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_uyvy_1
,
(
i
<<
1
)
+
16
,
dst
);
vec_st
(
v_uyvy_2
,
(
i
<<
1
)
+
32
,
dst
);
vec_st
(
v_uyvy_3
,
(
i
<<
1
)
+
48
,
dst
);
}
if
(
i
<
width
)
{
const
unsigned
int
j
=
i
>>
1
;
vector
unsigned
char
v_y1
=
vec_ld
(
i
,
ysrc
);
vector
unsigned
char
v_u
=
vec_ld
(
j
,
usrc
);
vector
unsigned
char
v_v
=
vec_ld
(
j
,
vsrc
);
vector
unsigned
char
v_uv_a
=
vec_mergeh
(
v_u
,
v_v
);
vector
unsigned
char
v_uyvy_0
=
vec_mergeh
(
v_uv_a
,
v_y1
);
vector
unsigned
char
v_uyvy_1
=
vec_mergel
(
v_uv_a
,
v_y1
);
vec_st
(
v_uyvy_0
,
(
i
<<
1
),
dst
);
vec_st
(
v_uyvy_1
,
(
i
<<
1
)
+
16
,
dst
);
}
if
((
y
&
(
vertLumPerChroma
-
1
))
==
vertLumPerChroma
-
1
)
{
usrc
+=
chromStride
;
vsrc
+=
chromStride
;
}
ysrc
+=
lumStride
;
dst
+=
dstStride
;
}
return
srcSliceH
;
}
void
ff_swscale_get_unscaled_altivec
(
SwsContext
*
c
)
{
if
((
av_get_cpu_flags
()
&
AV_CPU_FLAG_ALTIVEC
)
&&
!
(
c
->
srcW
&
15
)
&&
!
(
c
->
flags
&
SWS_BITEXACT
)
&&
c
->
srcFormat
==
PIX_FMT_YUV420P
)
{
enum
PixelFormat
dstFormat
=
c
->
dstFormat
;
// unscaled YV12 -> packed YUV, we want speed
if
(
dstFormat
==
PIX_FMT_YUYV422
)
c
->
swScale
=
yv12toyuy2_unscaled_altivec
;
else
if
(
dstFormat
==
PIX_FMT_UYVY422
)
c
->
swScale
=
yv12touyvy_unscaled_altivec
;
}
}
libswscale/swscale.c
View file @
0e5d31b1
...
...
@@ -1857,18 +1857,6 @@ void ff_get_unscaled_swscale(SwsContext *c)
if
(
srcFormat
==
PIX_FMT_UYVY422
&&
dstFormat
==
PIX_FMT_YUV422P
)
c
->
swScale
=
uyvyToYuv422Wrapper
;
#if HAVE_ALTIVEC
if
((
av_get_cpu_flags
()
&
AV_CPU_FLAG_ALTIVEC
)
&&
!
(
c
->
flags
&
SWS_BITEXACT
)
&&
srcFormat
==
PIX_FMT_YUV420P
)
{
// unscaled YV12 -> packed YUV, we want speed
if
(
dstFormat
==
PIX_FMT_YUYV422
)
c
->
swScale
=
yv12toyuy2_unscaled_altivec
;
else
if
(
dstFormat
==
PIX_FMT_UYVY422
)
c
->
swScale
=
yv12touyvy_unscaled_altivec
;
}
#endif
/* simple copy */
if
(
srcFormat
==
dstFormat
||
(
srcFormat
==
PIX_FMT_YUVA420P
&&
dstFormat
==
PIX_FMT_YUV420P
)
...
...
@@ -1887,9 +1875,11 @@ void ff_get_unscaled_swscale(SwsContext *c)
else
/* Planar YUV or gray */
c
->
swScale
=
planarCopyWrapper
;
}
#if ARCH_BFIN
ff_bfin_get_unscaled_swscale
(
c
);
#endif
if
(
ARCH_BFIN
)
ff_bfin_get_unscaled_swscale
(
c
);
if
(
HAVE_ALTIVEC
)
ff_swscale_get_unscaled_altivec
(
c
);
}
static
void
reset_ptr
(
const
uint8_t
*
src
[],
int
format
)
...
...
libswscale/swscale_internal.h
View file @
0e5d31b1
...
...
@@ -479,6 +479,8 @@ extern const AVClass sws_context_class;
*/
void
ff_get_unscaled_swscale
(
SwsContext
*
c
);
void
ff_swscale_get_unscaled_altivec
(
SwsContext
*
c
);
/**
* Returns function pointer to fastest main scaler path function depending
* on architecture and available optimizations.
...
...
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