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
e9b992d0
Commit
e9b992d0
authored
Jul 14, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: add error handling to draw_slice().
parent
ebc8d974
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
128 additions
and
72 deletions
+128
-72
avfilter.h
libavfilter/avfilter.h
+3
-1
fifo.c
libavfilter/fifo.c
+4
-1
internal.h
libavfilter/internal.h
+3
-1
split.c
libavfilter/split.c
+8
-4
vf_blackframe.c
libavfilter/vf_blackframe.c
+2
-2
vf_boxblur.c
libavfilter/vf_boxblur.c
+2
-2
vf_crop.c
libavfilter/vf_crop.c
+3
-3
vf_delogo.c
libavfilter/vf_delogo.c
+4
-1
vf_drawbox.c
libavfilter/vf_drawbox.c
+2
-2
vf_drawtext.c
libavfilter/vf_drawtext.c
+4
-1
vf_fade.c
libavfilter/vf_fade.c
+2
-2
vf_fieldorder.c
libavfilter/vf_fieldorder.c
+3
-2
vf_fps.c
libavfilter/vf_fps.c
+2
-1
vf_frei0r.c
libavfilter/vf_frei0r.c
+4
-1
vf_gradfun.c
libavfilter/vf_gradfun.c
+4
-1
vf_hflip.c
libavfilter/vf_hflip.c
+2
-2
vf_hqdn3d.c
libavfilter/vf_hqdn3d.c
+4
-1
vf_libopencv.c
libavfilter/vf_libopencv.c
+4
-1
vf_lut.c
libavfilter/vf_lut.c
+2
-2
vf_overlay.c
libavfilter/vf_overlay.c
+6
-3
vf_pad.c
libavfilter/vf_pad.c
+11
-7
vf_pixdesctest.c
libavfilter/vf_pixdesctest.c
+2
-2
vf_scale.c
libavfilter/vf_scale.c
+5
-5
vf_select.c
libavfilter/vf_select.c
+3
-2
vf_slicify.c
libavfilter/vf_slicify.c
+15
-8
vf_unsharp.c
libavfilter/vf_unsharp.c
+2
-1
vf_vflip.c
libavfilter/vf_vflip.c
+2
-2
vf_yadif.c
libavfilter/vf_yadif.c
+4
-1
video.c
libavfilter/video.c
+12
-8
video.h
libavfilter/video.h
+4
-2
No files found.
libavfilter/avfilter.h
View file @
e9b992d0
...
...
@@ -295,8 +295,10 @@ struct AVFilterPad {
* and should do its processing.
*
* Input video pads only.
*
* @return >= 0 on success, a negative AVERROR on error.
*/
void
(
*
draw_slice
)(
AVFilterLink
*
link
,
int
y
,
int
height
,
int
slice_dir
);
int
(
*
draw_slice
)(
AVFilterLink
*
link
,
int
y
,
int
height
,
int
slice_dir
);
/**
* Samples filtering callback. This is where a filter receives audio data
...
...
libavfilter/fifo.c
View file @
e9b992d0
...
...
@@ -100,7 +100,10 @@ static void queue_pop(FifoContext *s)
static
void
end_frame
(
AVFilterLink
*
inlink
)
{
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
/**
* Move data pointers and pts offset samples forward.
...
...
libavfilter/internal.h
View file @
e9b992d0
...
...
@@ -106,8 +106,10 @@ struct AVFilterPad {
* and should do its processing.
*
* Input video pads only.
*
* @return >= 0 on success, a negative AVERROR on error.
*/
void
(
*
draw_slice
)(
AVFilterLink
*
link
,
int
y
,
int
height
,
int
slice_dir
);
int
(
*
draw_slice
)(
AVFilterLink
*
link
,
int
y
,
int
height
,
int
slice_dir
);
/**
* Samples filtering callback. This is where a filter receives audio data
...
...
libavfilter/split.c
View file @
e9b992d0
...
...
@@ -77,13 +77,17 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
return
ret
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
int
i
;
int
i
,
ret
=
0
;
for
(
i
=
0
;
i
<
ctx
->
nb_outputs
;
i
++
)
ff_draw_slice
(
ctx
->
outputs
[
i
],
y
,
h
,
slice_dir
);
for
(
i
=
0
;
i
<
ctx
->
nb_outputs
;
i
++
)
{
ret
=
ff_draw_slice
(
ctx
->
outputs
[
i
],
y
,
h
,
slice_dir
);
if
(
ret
<
0
)
break
;
}
return
ret
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
libavfilter/vf_blackframe.c
View file @
e9b992d0
...
...
@@ -74,7 +74,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
BlackFrameContext
*
blackframe
=
ctx
->
priv
;
...
...
@@ -88,7 +88,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
p
+=
picref
->
linesize
[
0
];
}
ff_draw_slice
(
ctx
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
ctx
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
libavfilter/vf_boxblur.c
View file @
e9b992d0
...
...
@@ -306,7 +306,7 @@ static void vblur(uint8_t *dst, int dst_linesize, const uint8_t *src, int src_li
h
,
radius
,
power
,
temp
);
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y0
,
int
h0
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y0
,
int
h0
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
BoxBlurContext
*
boxblur
=
ctx
->
priv
;
...
...
@@ -330,7 +330,7 @@ static void draw_slice(AVFilterLink *inlink, int y0, int h0, int slice_dir)
w
[
plane
],
h
[
plane
],
boxblur
->
radius
[
plane
],
boxblur
->
power
[
plane
],
boxblur
->
temp
);
ff_draw_slice
(
outlink
,
y0
,
h0
,
slice_dir
);
return
ff_draw_slice
(
outlink
,
y0
,
h0
,
slice_dir
);
}
AVFilter
avfilter_vf_boxblur
=
{
...
...
libavfilter/vf_crop.c
View file @
e9b992d0
...
...
@@ -297,13 +297,13 @@ static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
return
ff_start_frame
(
link
->
dst
->
outputs
[
0
],
ref2
);
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
link
->
dst
;
CropContext
*
crop
=
ctx
->
priv
;
if
(
y
>=
crop
->
y
+
crop
->
h
||
y
+
h
<=
crop
->
y
)
return
;
return
0
;
if
(
y
<
crop
->
y
)
{
h
-=
crop
->
y
-
y
;
...
...
@@ -312,7 +312,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
if
(
y
+
h
>
crop
->
y
+
crop
->
h
)
h
=
crop
->
y
+
crop
->
h
-
y
;
ff_draw_slice
(
ctx
->
outputs
[
0
],
y
-
crop
->
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
ctx
->
outputs
[
0
],
y
-
crop
->
y
,
h
,
slice_dir
);
}
static
void
end_frame
(
AVFilterLink
*
link
)
...
...
libavfilter/vf_delogo.c
View file @
e9b992d0
...
...
@@ -245,7 +245,10 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
{
...
...
libavfilter/vf_drawbox.c
View file @
e9b992d0
...
...
@@ -94,7 +94,7 @@ static int config_input(AVFilterLink *inlink)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y0
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y0
,
int
h
,
int
slice_dir
)
{
DrawBoxContext
*
drawbox
=
inlink
->
dst
->
priv
;
int
plane
,
x
,
y
,
xb
=
drawbox
->
x
,
yb
=
drawbox
->
y
;
...
...
@@ -120,7 +120,7 @@ static void draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir)
}
}
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y0
,
h
,
1
);
return
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y0
,
h
,
1
);
}
AVFilter
avfilter_vf_drawbox
=
{
...
...
libavfilter/vf_drawtext.c
View file @
e9b992d0
...
...
@@ -791,7 +791,10 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref,
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
inline
int
normalize_double
(
int
*
n
,
double
d
)
{
...
...
libavfilter/vf_fade.c
View file @
e9b992d0
...
...
@@ -97,7 +97,7 @@ static int config_props(AVFilterLink *inlink)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
FadeContext
*
fade
=
inlink
->
dst
->
priv
;
AVFilterBufferRef
*
outpic
=
inlink
->
cur_buf
;
...
...
@@ -134,7 +134,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
}
}
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
libavfilter/vf_fieldorder.c
View file @
e9b992d0
...
...
@@ -144,7 +144,7 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
FieldOrderContext
*
fieldorder
=
ctx
->
priv
;
...
...
@@ -158,8 +158,9 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
* and that complexity will be added later */
if
(
!
inpicref
->
video
->
interlaced
||
inpicref
->
video
->
top_field_first
==
fieldorder
->
dst_tff
)
{
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
}
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
libavfilter/vf_fps.c
View file @
e9b992d0
...
...
@@ -248,8 +248,9 @@ static int null_start_frame(AVFilterLink *link, AVFilterBufferRef *buf)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
AVFilter
avfilter_vf_fps
=
{
...
...
libavfilter/vf_frei0r.c
View file @
e9b992d0
...
...
@@ -340,7 +340,10 @@ static int query_formats(AVFilterContext *ctx)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
{
...
...
libavfilter/vf_gradfun.c
View file @
e9b992d0
...
...
@@ -210,7 +210,10 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
{
...
...
libavfilter/vf_hflip.c
View file @
e9b992d0
...
...
@@ -81,7 +81,7 @@ static int config_props(AVFilterLink *inlink)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
FlipContext
*
flip
=
inlink
->
dst
->
priv
;
AVFilterBufferRef
*
inpic
=
inlink
->
cur_buf
;
...
...
@@ -142,7 +142,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
}
}
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
AVFilter
avfilter_vf_hflip
=
{
...
...
libavfilter/vf_hqdn3d.c
View file @
e9b992d0
...
...
@@ -290,7 +290,10 @@ static int config_input(AVFilterLink *inlink)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
{
...
...
libavfilter/vf_libopencv.c
View file @
e9b992d0
...
...
@@ -67,7 +67,10 @@ static int query_formats(AVFilterContext *ctx)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
typedef
struct
{
const
char
*
name
;
...
...
libavfilter/vf_lut.c
View file @
e9b992d0
...
...
@@ -294,7 +294,7 @@ static int config_props(AVFilterLink *inlink)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
LutContext
*
lut
=
ctx
->
priv
;
...
...
@@ -339,7 +339,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
}
}
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
}
static
const
AVFilterPad
inputs
[]
=
{
...
...
libavfilter/vf_overlay.c
View file @
e9b992d0
...
...
@@ -320,7 +320,7 @@ static void blend_slice(AVFilterContext *ctx,
}
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
AVFilterLink
*
outlink
=
ctx
->
outputs
[
0
];
...
...
@@ -334,7 +334,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
over
->
overpicref
->
video
->
w
,
over
->
overpicref
->
video
->
h
,
y
,
outpicref
->
video
->
w
,
h
);
}
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
@@ -342,7 +342,10 @@ static void end_frame(AVFilterLink *inlink)
ff_end_frame
(
inlink
->
dst
->
outputs
[
0
]);
}
static
void
null_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
void
null_end_frame
(
AVFilterLink
*
inlink
)
{
}
...
...
libavfilter/vf_pad.c
View file @
e9b992d0
...
...
@@ -367,10 +367,10 @@ static void end_frame(AVFilterLink *link)
ff_end_frame
(
link
->
dst
->
outputs
[
0
]);
}
static
void
draw_send_bar_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
,
int
before_slice
)
static
int
draw_send_bar_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
,
int
before_slice
)
{
PadContext
*
pad
=
link
->
dst
->
priv
;
int
bar_y
,
bar_h
=
0
;
int
bar_y
,
bar_h
=
0
,
ret
=
0
;
if
(
slice_dir
*
before_slice
==
1
&&
y
==
pad
->
y
)
{
/* top bar */
...
...
@@ -387,15 +387,17 @@ static void draw_send_bar_slice(AVFilterLink *link, int y, int h, int slice_dir,
link
->
dst
->
outputs
[
0
]
->
out_buf
->
linesize
,
pad
->
line
,
pad
->
line_step
,
pad
->
hsub
,
pad
->
vsub
,
0
,
bar_y
,
pad
->
w
,
bar_h
);
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
bar_y
,
bar_h
,
slice_dir
);
ret
=
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
bar_y
,
bar_h
,
slice_dir
);
}
return
ret
;
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
PadContext
*
pad
=
link
->
dst
->
priv
;
AVFilterBufferRef
*
outpic
=
link
->
dst
->
outputs
[
0
]
->
out_buf
;
AVFilterBufferRef
*
inpic
=
link
->
cur_buf
;
int
ret
;
y
+=
pad
->
y
;
...
...
@@ -403,7 +405,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
h
&=
~
((
1
<<
pad
->
vsub
)
-
1
);
if
(
!
h
)
return
;
return
0
;
draw_send_bar_slice
(
link
,
y
,
h
,
slice_dir
,
1
);
/* left border */
...
...
@@ -421,9 +423,11 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
ff_draw_rectangle
(
outpic
->
data
,
outpic
->
linesize
,
pad
->
line
,
pad
->
line_step
,
pad
->
hsub
,
pad
->
vsub
,
pad
->
x
+
pad
->
in_w
,
y
,
pad
->
w
-
pad
->
x
-
pad
->
in_w
,
h
);
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
ret
=
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
if
(
ret
<
0
)
return
ret
;
draw_send_bar_slice
(
link
,
y
,
h
,
slice_dir
,
-
1
);
return
draw_send_bar_slice
(
link
,
y
,
h
,
slice_dir
,
-
1
);
}
AVFilter
avfilter_vf_pad
=
{
...
...
libavfilter/vf_pixdesctest.c
View file @
e9b992d0
...
...
@@ -90,7 +90,7 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
PixdescTestContext
*
priv
=
inlink
->
dst
->
priv
;
AVFilterBufferRef
*
inpic
=
inlink
->
cur_buf
;
...
...
@@ -117,7 +117,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
}
}
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
AVFilter
avfilter_vf_pixdesctest
=
{
...
...
libavfilter/vf_scale.c
View file @
e9b992d0
...
...
@@ -291,16 +291,15 @@ static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
ScaleContext
*
scale
=
link
->
dst
->
priv
;
int
out_h
;
int
out_h
,
ret
;
AVFilterBufferRef
*
cur_pic
=
link
->
cur_buf
;
const
uint8_t
*
data
[
4
];
if
(
!
scale
->
sws
)
{
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
;
return
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
if
(
scale
->
slice_y
==
0
&&
slice_dir
==
-
1
)
...
...
@@ -319,9 +318,10 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
if
(
slice_dir
==
-
1
)
scale
->
slice_y
-=
out_h
;
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
scale
->
slice_y
,
out_h
,
slice_dir
);
ret
=
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
scale
->
slice_y
,
out_h
,
slice_dir
);
if
(
slice_dir
==
1
)
scale
->
slice_y
+=
out_h
;
return
ret
;
}
AVFilter
avfilter_vf_scale
=
{
...
...
libavfilter/vf_select.c
View file @
e9b992d0
...
...
@@ -249,12 +249,13 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
return
0
;
}
static
void
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
SelectContext
*
select
=
inlink
->
dst
->
priv
;
if
(
select
->
select
&&
!
select
->
cache_frames
)
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
inlink
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
0
;
}
static
void
end_frame
(
AVFilterLink
*
inlink
)
...
...
libavfilter/vf_slicify.c
View file @
e9b992d0
...
...
@@ -78,24 +78,31 @@ static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
return
ff_start_frame
(
link
->
dst
->
outputs
[
0
],
picref
);
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
SliceContext
*
slice
=
link
->
dst
->
priv
;
int
y2
;
int
y2
,
ret
=
0
;
if
(
slice_dir
==
1
)
{
for
(
y2
=
y
;
y2
+
slice
->
h
<=
y
+
h
;
y2
+=
slice
->
h
)
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
,
slice
->
h
,
slice_dir
);
for
(
y2
=
y
;
y2
+
slice
->
h
<=
y
+
h
;
y2
+=
slice
->
h
)
{
ret
=
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
,
slice
->
h
,
slice_dir
);
if
(
ret
<
0
)
return
ret
;
}
if
(
y2
<
y
+
h
)
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
,
y
+
h
-
y2
,
slice_dir
);
return
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
,
y
+
h
-
y2
,
slice_dir
);
}
else
if
(
slice_dir
==
-
1
)
{
for
(
y2
=
y
+
h
;
y2
-
slice
->
h
>=
y
;
y2
-=
slice
->
h
)
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
-
slice
->
h
,
slice
->
h
,
slice_dir
);
for
(
y2
=
y
+
h
;
y2
-
slice
->
h
>=
y
;
y2
-=
slice
->
h
)
{
ret
=
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y2
-
slice
->
h
,
slice
->
h
,
slice_dir
);
if
(
ret
<
0
)
return
ret
;
}
if
(
y2
>
y
)
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
y2
-
y
,
slice_dir
);
return
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
y2
-
y
,
slice_dir
);
}
return
0
;
}
AVFilter
avfilter_vf_slicify
=
{
...
...
libavfilter/vf_unsharp.c
View file @
e9b992d0
...
...
@@ -229,8 +229,9 @@ static void end_frame(AVFilterLink *link)
ff_end_frame
(
link
->
dst
->
outputs
[
0
]);
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
AVFilter
avfilter_vf_unsharp
=
{
...
...
libavfilter/vf_vflip.c
View file @
e9b992d0
...
...
@@ -82,11 +82,11 @@ static int start_frame(AVFilterLink *link, AVFilterBufferRef *inpicref)
return
ff_start_frame
(
link
->
dst
->
outputs
[
0
],
outpicref
);
}
static
void
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
static
int
draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterContext
*
ctx
=
link
->
dst
;
ff_draw_slice
(
ctx
->
outputs
[
0
],
link
->
h
-
(
y
+
h
),
h
,
-
1
*
slice_dir
);
return
ff_draw_slice
(
ctx
->
outputs
[
0
],
link
->
h
-
(
y
+
h
),
h
,
-
1
*
slice_dir
);
}
AVFilter
avfilter_vf_vflip
=
{
...
...
libavfilter/vf_yadif.c
View file @
e9b992d0
...
...
@@ -377,7 +377,10 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
return
0
;
}
static
void
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
}
static
int
null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
return
0
;
}
static
int
config_props
(
AVFilterLink
*
link
)
{
...
...
libavfilter/video.c
View file @
e9b992d0
...
...
@@ -263,12 +263,12 @@ void ff_end_frame(AVFilterLink *link)
clear_link
(
link
);
}
void
ff_null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
int
ff_null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
link
->
dst
->
outputs
[
0
],
y
,
h
,
slice_dir
);
}
static
void
default_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
static
int
default_draw_slice
(
AVFilterLink
*
inlink
,
int
y
,
int
h
,
int
slice_dir
)
{
AVFilterLink
*
outlink
=
NULL
;
...
...
@@ -276,14 +276,15 @@ static void default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir
outlink
=
inlink
->
dst
->
outputs
[
0
];
if
(
outlink
)
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
return
ff_draw_slice
(
outlink
,
y
,
h
,
slice_dir
);
return
0
;
}
void
ff_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
int
ff_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
)
{
uint8_t
*
src
[
4
],
*
dst
[
4
];
int
i
,
j
,
vsub
;
void
(
*
draw_slice
)(
AVFilterLink
*
,
int
,
int
,
int
);
int
i
,
j
,
vsub
,
ret
;
int
(
*
draw_slice
)(
AVFilterLink
*
,
int
,
int
,
int
);
FF_DPRINTF_START
(
NULL
,
draw_slice
);
ff_dlog_link
(
NULL
,
link
,
0
);
av_dlog
(
NULL
,
" y:%d h:%d dir:%d
\n
"
,
y
,
h
,
slice_dir
);
...
...
@@ -317,5 +318,8 @@ void ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
if
(
!
(
draw_slice
=
link
->
dstpad
->
draw_slice
))
draw_slice
=
default_draw_slice
;
draw_slice
(
link
,
y
,
h
,
slice_dir
);
ret
=
draw_slice
(
link
,
y
,
h
,
slice_dir
);
if
(
ret
<
0
)
clear_link
(
link
);
return
ret
;
}
libavfilter/video.h
View file @
e9b992d0
...
...
@@ -40,7 +40,7 @@ AVFilterBufferRef *ff_get_video_buffer(AVFilterLink *link, int perms,
int
w
,
int
h
);
int
ff_null_start_frame
(
AVFilterLink
*
link
,
AVFilterBufferRef
*
picref
);
void
ff_null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
);
int
ff_null_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
);
void
ff_null_end_frame
(
AVFilterLink
*
link
);
/**
...
...
@@ -78,7 +78,9 @@ void ff_end_frame(AVFilterLink *link);
* from the top slice to the bottom slice if the value is 1,
* from the bottom slice to the top slice if the value is -1,
* for other values the behavior of the function is undefined.
*
* @return >= 0 on success, a negative AVERROR on error.
*/
void
ff_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
);
int
ff_draw_slice
(
AVFilterLink
*
link
,
int
y
,
int
h
,
int
slice_dir
);
#endif
/* AVFILTER_VIDEO_H */
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