1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00

avfilter/vf_shuffleframes: allow also dropping frames

Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
Paul B Mahol 2017-01-06 12:27:46 +01:00
parent d1f3e475f9
commit 520c0736fd
2 changed files with 10 additions and 7 deletions

View File

@ -12285,7 +12285,7 @@ Set the size of the box used to represent one palette color entry. Default is
@section shuffleframes
Reorder and/or duplicate video frames.
Reorder and/or duplicate and/or drop video frames.
It accepts the following parameters:
@ -12294,6 +12294,7 @@ It accepts the following parameters:
Set the destination indexes of input frames.
This is space or '|' separated list of indexes that maps input frames to output
frames. Number of indexes also sets maximal value that each index may have.
'-1' index have special meaning and that is to drop frame.
@end table
The first frame has the index 0. The default is to keep the input unchanged.

View File

@ -68,7 +68,7 @@ static av_cold int init(AVFilterContext *ctx)
return AVERROR(EINVAL);
}
if (s->map[n] < 0 || s->map[n] >= nb_items) {
if (s->map[n] < -1 || s->map[n] >= nb_items) {
av_log(ctx, AV_LOG_ERROR, "Index out of range.\n");
av_free(mapping);
return AVERROR(EINVAL);
@ -99,11 +99,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
AVFrame *out;
x = s->map[n];
out = av_frame_clone(s->frames[x]);
if (!out)
return AVERROR(ENOMEM);
out->pts = s->pts[n];
ret = ff_filter_frame(ctx->outputs[0], out);
if (x >= 0) {
out = av_frame_clone(s->frames[x]);
if (!out)
return AVERROR(ENOMEM);
out->pts = s->pts[n];
ret = ff_filter_frame(ctx->outputs[0], out);
}
s->in_frames--;
}