Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
BC
public
external
ffmpeg
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
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
128 additions
and
72 deletions
+128
-72
libavfilter/avfilter.h
libavfilter/avfilter.h
+3
-1
libavfilter/fifo.c
libavfilter/fifo.c
+4
-1
libavfilter/internal.h
libavfilter/internal.h
+3
-1
libavfilter/split.c
libavfilter/split.c
+8
-4
libavfilter/vf_blackframe.c
libavfilter/vf_blackframe.c
+2
-2
libavfilter/vf_boxblur.c
libavfilter/vf_boxblur.c
+2
-2
libavfilter/vf_crop.c
libavfilter/vf_crop.c
+3
-3
libavfilter/vf_delogo.c
libavfilter/vf_delogo.c
+4
-1
libavfilter/vf_drawbox.c
libavfilter/vf_drawbox.c
+2
-2
libavfilter/vf_drawtext.c
libavfilter/vf_drawtext.c
+4
-1
libavfilter/vf_fade.c
libavfilter/vf_fade.c
+2
-2
libavfilter/vf_fieldorder.c
libavfilter/vf_fieldorder.c
+3
-2
libavfilter/vf_fps.c
libavfilter/vf_fps.c
+2
-1
libavfilter/vf_frei0r.c
libavfilter/vf_frei0r.c
+4
-1
libavfilter/vf_gradfun.c
libavfilter/vf_gradfun.c
+4
-1
libavfilter/vf_hflip.c
libavfilter/vf_hflip.c
+2
-2
libavfilter/vf_hqdn3d.c
libavfilter/vf_hqdn3d.c
+4
-1
libavfilter/vf_libopencv.c
libavfilter/vf_libopencv.c
+4
-1
libavfilter/vf_lut.c
libavfilter/vf_lut.c
+2
-2
libavfilter/vf_overlay.c
libavfilter/vf_overlay.c
+6
-3
libavfilter/vf_pad.c
libavfilter/vf_pad.c
+11
-7
libavfilter/vf_pixdesctest.c
libavfilter/vf_pixdesctest.c
+2
-2
libavfilter/vf_scale.c
libavfilter/vf_scale.c
+5
-5
libavfilter/vf_select.c
libavfilter/vf_select.c
+3
-2
libavfilter/vf_slicify.c
libavfilter/vf_slicify.c
+15
-8
libavfilter/vf_unsharp.c
libavfilter/vf_unsharp.c
+2
-1
libavfilter/vf_vflip.c
libavfilter/vf_vflip.c
+2
-2
libavfilter/vf_yadif.c
libavfilter/vf_yadif.c
+4
-1
libavfilter/video.c
libavfilter/video.c
+12
-8
libavfilter/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
);