Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
8440835d
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 搜索 >>
提交
8440835d
编写于
12月 03, 2018
作者:
P
Paul B Mahol
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avfilter/vf_overlay: fix filtering with negative y
上级
8ef0fdaa
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
16 deletion
+16
-16
libavfilter/vf_overlay.c
libavfilter/vf_overlay.c
+16
-16
未找到文件。
libavfilter/vf_overlay.c
浏览文件 @
8440835d
...
...
@@ -380,15 +380,15 @@ static av_always_inline void blend_slice_packed_rgb(AVFilterContext *ctx,
uint8_t
*
S
,
*
sp
,
*
d
,
*
dp
;
i
=
FFMAX
(
-
y
,
0
);
imax
=
FFMIN
(
-
y
+
dst_h
,
src_h
);
imax
=
FFMIN
3
(
-
y
+
dst_h
,
FFMIN
(
src_h
,
dst_h
),
y
+
src_h
);
slice_start
=
(
imax
*
jobnr
)
/
nb_jobs
;
slice_end
=
(
imax
*
(
jobnr
+
1
))
/
nb_jobs
;
slice_start
=
i
+
(
imax
*
jobnr
)
/
nb_jobs
;
slice_end
=
i
+
(
imax
*
(
jobnr
+
1
))
/
nb_jobs
;
sp
=
src
->
data
[
0
]
+
(
i
+
slice_start
)
*
src
->
linesize
[
0
];
dp
=
dst
->
data
[
0
]
+
(
y
+
i
+
slice_start
)
*
dst
->
linesize
[
0
];
sp
=
src
->
data
[
0
]
+
(
slice_start
)
*
src
->
linesize
[
0
];
dp
=
dst
->
data
[
0
]
+
(
y
+
slice_start
)
*
dst
->
linesize
[
0
];
for
(
i
=
i
+
slice_start
;
i
<
slice_end
;
i
++
)
{
for
(
i
=
slice_start
;
i
<
slice_end
;
i
++
)
{
j
=
FFMAX
(
-
x
,
0
);
S
=
sp
+
j
*
sstep
;
d
=
dp
+
(
x
+
j
)
*
dstep
;
...
...
@@ -468,19 +468,19 @@ static av_always_inline void blend_plane(AVFilterContext *ctx,
int
slice_start
,
slice_end
;
j
=
FFMAX
(
-
yp
,
0
);
jmax
=
FFMIN
(
-
yp
+
dst_hp
,
src_hp
);
jmax
=
FFMIN
3
(
-
yp
+
dst_hp
,
FFMIN
(
src_hp
,
dst_hp
),
yp
+
src_hp
);
slice_start
=
(
jmax
*
jobnr
)
/
nb_jobs
;
slice_end
=
(
jmax
*
(
jobnr
+
1
))
/
nb_jobs
;
slice_start
=
j
+
(
jmax
*
jobnr
)
/
nb_jobs
;
slice_end
=
j
+
(
jmax
*
(
jobnr
+
1
))
/
nb_jobs
;
sp
=
src
->
data
[
i
]
+
(
j
+
slice_start
)
*
src
->
linesize
[
i
];
sp
=
src
->
data
[
i
]
+
(
slice_start
)
*
src
->
linesize
[
i
];
dp
=
dst
->
data
[
dst_plane
]
+
(
yp
+
j
+
slice_start
)
*
dst
->
linesize
[
dst_plane
]
+
(
yp
+
slice_start
)
*
dst
->
linesize
[
dst_plane
]
+
dst_offset
;
ap
=
src
->
data
[
3
]
+
(
j
+
slice_start
<<
vsub
)
*
src
->
linesize
[
3
];
dap
=
dst
->
data
[
3
]
+
((
yp
+
j
+
slice_start
)
<<
vsub
)
*
dst
->
linesize
[
3
];
ap
=
src
->
data
[
3
]
+
(
slice_start
<<
vsub
)
*
src
->
linesize
[
3
];
dap
=
dst
->
data
[
3
]
+
((
yp
+
slice_start
)
<<
vsub
)
*
dst
->
linesize
[
3
];
for
(
j
=
j
+
slice_start
;
j
<
slice_end
;
j
++
)
{
for
(
j
=
slice_start
;
j
<
slice_end
;
j
++
)
{
k
=
FFMAX
(
-
xp
,
0
);
d
=
dp
+
(
xp
+
k
)
*
dst_step
;
s
=
sp
+
k
;
...
...
@@ -961,13 +961,13 @@ static int do_blend(FFFrameSync *fs)
s
->
var_values
[
VAR_Y
],
s
->
y
);
}
if
(
s
->
x
<
mainpic
->
width
&&
s
->
x
+
second
->
width
>=
0
||
if
(
s
->
x
<
mainpic
->
width
&&
s
->
x
+
second
->
width
>=
0
&&
s
->
y
<
mainpic
->
height
&&
s
->
y
+
second
->
height
>=
0
)
{
ThreadData
td
;
td
.
dst
=
mainpic
;
td
.
src
=
second
;
ctx
->
internal
->
execute
(
ctx
,
s
->
blend_slice
,
&
td
,
NULL
,
FFMIN
(
FFM
IN
(
mainpic
->
height
-
s
->
y
,
second
->
height
),
ctx
->
internal
->
execute
(
ctx
,
s
->
blend_slice
,
&
td
,
NULL
,
FFMIN
(
FFM
AX
(
1
,
FFMIN3
(
s
->
y
+
second
->
height
,
FFMIN
(
second
->
height
,
mainpic
->
height
),
mainpic
->
height
-
s
->
y
)
),
ff_filter_get_nb_threads
(
ctx
)));
}
return
ff_filter_frame
(
ctx
->
outputs
[
0
],
mainpic
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录