Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
0e5d31b1
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,发现更多精彩内容 >>
提交
0e5d31b1
编写于
6月 02, 2011
作者:
R
Ronald S. Bultje
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
swscale: split out unscaled altivec YUV converters in their own file.
上级
83a8b300
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
200 addition
and
171 deletion
+200
-171
libswscale/Makefile
libswscale/Makefile
+2
-1
libswscale/ppc/swscale_altivec_template.c
libswscale/ppc/swscale_altivec_template.c
+0
-155
libswscale/ppc/yuv2yuv_altivec.c
libswscale/ppc/yuv2yuv_altivec.c
+191
-0
libswscale/swscale.c
libswscale/swscale.c
+5
-15
libswscale/swscale_internal.h
libswscale/swscale_internal.h
+2
-0
未找到文件。
libswscale/Makefile
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录