Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
0419623c
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,体验更适合开发者的 AI 搜索 >>
提交
0419623c
编写于
2月 21, 2018
作者:
R
Rodger Combs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lavfi/vf_transpose: fix regression with semiplanar formats
(e.g. nv12) Regression since
7b19e76a
上级
4f40d64e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
25 deletion
+33
-25
libavfilter/vf_transpose.c
libavfilter/vf_transpose.c
+29
-21
tests/ref/fate/filter-pixfmts-transpose
tests/ref/fate/filter-pixfmts-transpose
+4
-4
未找到文件。
libavfilter/vf_transpose.c
浏览文件 @
0419623c
...
...
@@ -52,6 +52,14 @@ enum TransposeDir {
TRANSPOSE_CLOCK_FLIP
,
};
typedef
struct
TransVtable
{
void
(
*
transpose_8x8
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
);
void
(
*
transpose_block
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
,
int
w
,
int
h
);
}
TransVtable
;
typedef
struct
TransContext
{
const
AVClass
*
class
;
int
hsub
,
vsub
;
...
...
@@ -61,11 +69,7 @@ typedef struct TransContext {
int
passthrough
;
///< PassthroughType, landscape passthrough mode enabled
int
dir
;
///< TransposeDir
void
(
*
transpose_8x8
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
);
void
(
*
transpose_block
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
,
int
w
,
int
h
);
TransVtable
vtables
[
4
];
}
TransContext
;
static
int
query_formats
(
AVFilterContext
*
ctx
)
...
...
@@ -233,19 +237,22 @@ static int config_props_output(AVFilterLink *outlink)
else
outlink
->
sample_aspect_ratio
=
inlink
->
sample_aspect_ratio
;
switch
(
s
->
pixsteps
[
0
])
{
case
1
:
s
->
transpose_block
=
transpose_block_8_c
;
s
->
transpose_8x8
=
transpose_8x8_8_c
;
break
;
case
2
:
s
->
transpose_block
=
transpose_block_16_c
;
s
->
transpose_8x8
=
transpose_8x8_16_c
;
break
;
case
3
:
s
->
transpose_block
=
transpose_block_24_c
;
s
->
transpose_8x8
=
transpose_8x8_24_c
;
break
;
case
4
:
s
->
transpose_block
=
transpose_block_32_c
;
s
->
transpose_8x8
=
transpose_8x8_32_c
;
break
;
case
6
:
s
->
transpose_block
=
transpose_block_48_c
;
s
->
transpose_8x8
=
transpose_8x8_48_c
;
break
;
case
8
:
s
->
transpose_block
=
transpose_block_64_c
;
s
->
transpose_8x8
=
transpose_8x8_64_c
;
break
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
TransVtable
*
v
=
&
s
->
vtables
[
i
];
switch
(
s
->
pixsteps
[
i
])
{
case
1
:
v
->
transpose_block
=
transpose_block_8_c
;
v
->
transpose_8x8
=
transpose_8x8_8_c
;
break
;
case
2
:
v
->
transpose_block
=
transpose_block_16_c
;
v
->
transpose_8x8
=
transpose_8x8_16_c
;
break
;
case
3
:
v
->
transpose_block
=
transpose_block_24_c
;
v
->
transpose_8x8
=
transpose_8x8_24_c
;
break
;
case
4
:
v
->
transpose_block
=
transpose_block_32_c
;
v
->
transpose_8x8
=
transpose_8x8_32_c
;
break
;
case
6
:
v
->
transpose_block
=
transpose_block_48_c
;
v
->
transpose_8x8
=
transpose_8x8_48_c
;
break
;
case
8
:
v
->
transpose_block
=
transpose_block_64_c
;
v
->
transpose_8x8
=
transpose_8x8_64_c
;
break
;
}
}
av_log
(
ctx
,
AV_LOG_VERBOSE
,
...
...
@@ -290,6 +297,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr,
uint8_t
*
dst
,
*
src
;
int
dstlinesize
,
srclinesize
;
int
x
,
y
;
TransVtable
*
v
=
&
s
->
vtables
[
plane
];
dstlinesize
=
out
->
linesize
[
plane
];
dst
=
out
->
data
[
plane
]
+
start
*
dstlinesize
;
...
...
@@ -308,20 +316,20 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr,
for
(
y
=
start
;
y
<
end
-
7
;
y
+=
8
)
{
for
(
x
=
0
;
x
<
outw
-
7
;
x
+=
8
)
{
s
->
transpose_8x8
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_8x8
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
x
*
pixstep
,
dstlinesize
);
}
if
(
outw
-
x
>
0
&&
end
-
y
>
0
)
s
->
transpose_block
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_block
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
x
*
pixstep
,
dstlinesize
,
outw
-
x
,
end
-
y
);
}
if
(
end
-
y
>
0
)
s
->
transpose_block
(
src
+
0
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_block
(
src
+
0
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
0
*
pixstep
,
dstlinesize
,
outw
,
end
-
y
);
...
...
tests/ref/fate/filter-pixfmts-transpose
浏览文件 @
0419623c
...
...
@@ -45,10 +45,10 @@ gray16be 4aef307021a91b1de67f1d4381a39132
gray16le 76f2afe156edca7ae05cfa4e5867126e
gray9be 2c425fa532c940d226822da8b3592310
gray9le bcc575942910b3c72eaa72e8794f3acd
nv12
aca847644e5dc0e942419183014981a4
nv21
098884e968d27286c8cf0d2fb1557dcd
p010be
5ff62dffa5dfdf823978c4f563f69c94
p010le
20131abe34e084b04f1d169c66447825
nv12
1965e3826144686748f2f6b516fca5ba
nv21
292adaf5271c5c8516b71640458c01f4
p010be
ad0de2cc9bff81688b182a870fcf7000
p010le
e7ff5143595021246733ce6bd0a769e8
rgb0 31ea5da7fe779c6ea0a33f1d28aad918
rgb24 47654cabaaad79170b90afd5a02161dd
rgb444be 3cac1f0c43a74d2a95eb02e187070845
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录