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
d360ddf0
Commit
d360ddf0
authored
Dec 20, 2016
by
Nicolas George
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: add helpers to consume frames from link FIFOs.
parent
2e5af443
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
94 additions
and
0 deletions
+94
-0
avfilter.c
libavfilter/avfilter.c
+52
-0
filters.h
libavfilter/filters.h
+42
-0
No files found.
libavfilter/avfilter.c
View file @
d360ddf0
...
...
@@ -1501,6 +1501,58 @@ int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts
return
1
;
}
int
ff_inlink_check_available_frame
(
AVFilterLink
*
link
)
{
return
ff_framequeue_queued_frames
(
&
link
->
fifo
)
>
0
;
}
int
ff_inlink_check_available_samples
(
AVFilterLink
*
link
,
unsigned
min
)
{
uint64_t
samples
=
ff_framequeue_queued_samples
(
&
link
->
fifo
);
av_assert1
(
min
);
return
samples
>=
min
||
(
link
->
status_in
&&
samples
);
}
static
void
consume_update
(
AVFilterLink
*
link
,
const
AVFrame
*
frame
)
{
ff_inlink_process_commands
(
link
,
frame
);
link
->
dst
->
is_disabled
=
!
ff_inlink_evaluate_timeline_at_frame
(
link
,
frame
);
link
->
frame_count_out
++
;
}
int
ff_inlink_consume_frame
(
AVFilterLink
*
link
,
AVFrame
**
rframe
)
{
AVFrame
*
frame
;
*
rframe
=
NULL
;
if
(
!
ff_inlink_check_available_frame
(
link
))
return
0
;
frame
=
ff_framequeue_take
(
&
link
->
fifo
);
consume_update
(
link
,
frame
);
*
rframe
=
frame
;
return
1
;
}
int
ff_inlink_consume_samples
(
AVFilterLink
*
link
,
unsigned
min
,
unsigned
max
,
AVFrame
**
rframe
)
{
AVFrame
*
frame
;
int
ret
;
av_assert1
(
min
);
*
rframe
=
NULL
;
if
(
!
ff_inlink_check_available_samples
(
link
,
min
))
return
0
;
if
(
link
->
status_in
)
min
=
FFMIN
(
min
,
ff_framequeue_queued_samples
(
&
link
->
fifo
));
ret
=
take_samples
(
link
,
min
,
link
->
max_samples
,
&
frame
);
if
(
ret
<
0
)
return
ret
;
consume_update
(
link
,
frame
);
*
rframe
=
frame
;
return
1
;
}
int
ff_inlink_make_frame_writable
(
AVFilterLink
*
link
,
AVFrame
**
rframe
)
{
AVFrame
*
frame
=
*
rframe
;
...
...
libavfilter/filters.h
View file @
d360ddf0
...
...
@@ -54,6 +54,48 @@ int ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame);
*/
int
ff_inlink_evaluate_timeline_at_frame
(
AVFilterLink
*
link
,
const
AVFrame
*
frame
);
/**
* Test if a frame is available on the link.
* @return >0 if a frame is available
*/
int
ff_inlink_check_available_frame
(
AVFilterLink
*
link
);
/**
* Test if enough samples are available on the link.
* @return >0 if enough samples are available
* @note on EOF and error, min becomes 1
*/
int
ff_inlink_check_available_samples
(
AVFilterLink
*
link
,
unsigned
min
);
/**
* Take a frame from the link's FIFO and update the link's stats.
*
* If ff_inlink_check_available_frame() was previously called, the
* preferred way of expressing it is "av_assert1(ret);" immediately after
* ff_inlink_consume_frame(). Negative error codes must still be checked.
*
* @note May trigger process_command() and/or update is_disabled.
* @return >0 if a frame is available,
* 0 and set rframe to NULL if no frame available,
* or AVERROR code
*/
int
ff_inlink_consume_frame
(
AVFilterLink
*
link
,
AVFrame
**
rframe
);
/**
* Take samples from the link's FIFO and update the link's stats.
*
* If ff_inlink_check_available_samples() was previously called, the
* preferred way of expressing it is "av_assert1(ret);" immediately after
* ff_inlink_consume_samples(). Negative error codes must still be checked.
*
* @note May trigger process_command() and/or update is_disabled.
* @return >0 if a frame is available,
* 0 and set rframe to NULL if no frame available,
* or AVERROR code
*/
int
ff_inlink_consume_samples
(
AVFilterLink
*
link
,
unsigned
min
,
unsigned
max
,
AVFrame
**
rframe
);
/**
* Make sure a frame is writable.
* This is similar to av_frame_make_writable() except it uses the link's
...
...
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