[FFmpeg-devel] [PATCH 3/5] avfilter: use the new AVFrame key_frame flag in all filters
James Almer
jamrial at gmail.com
Thu Apr 13 19:29:38 EEST 2023
Signed-off-by: James Almer <jamrial at gmail.com>
---
libavfilter/avfilter.c | 2 +-
libavfilter/buffersrc.c | 3 +++
libavfilter/f_select.c | 4 ++--
libavfilter/vf_blackframe.c | 2 +-
libavfilter/vf_coreimage.m | 1 +
libavfilter/vf_showinfo.c | 2 +-
libavfilter/vsrc_gradients.c | 1 +
libavfilter/vsrc_testsrc.c | 1 +
8 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 8d5702a0c8..1fe728a42c 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -59,7 +59,7 @@ static void tlog_ref(void *ctx, AVFrame *ref, int end)
ref->width, ref->height,
!ref->interlaced_frame ? 'P' : /* Progressive */
ref->top_field_first ? 'T' : 'B', /* Top / Bottom */
- ref->key_frame,
+ !!(ref->flags & AV_FRAME_FLAG_KEY),
av_get_picture_type_char(ref->pict_type));
}
if (ref->nb_samples) {
diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
index a1740da054..a81c331cd5 100644
--- a/libavfilter/buffersrc.c
+++ b/libavfilter/buffersrc.c
@@ -247,6 +247,9 @@ FF_DISABLE_DEPRECATION_WARNINGS
FF_ENABLE_DEPRECATION_WARNINGS
#endif
+ if (frame->key_frame)
+ frame->flags |= AV_FRAME_FLAG_KEY;
+
ret = ff_filter_frame(ctx->outputs[0], copy);
if (ret < 0)
return ret;
diff --git a/libavfilter/f_select.c b/libavfilter/f_select.c
index d76c248fc5..d544b5533c 100644
--- a/libavfilter/f_select.c
+++ b/libavfilter/f_select.c
@@ -346,7 +346,7 @@ FF_DISABLE_DEPRECATION_WARNINGS
select->var_values[VAR_POS] = frame->pkt_pos == -1 ? NAN : frame->pkt_pos;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
- select->var_values[VAR_KEY] = frame->key_frame;
+ select->var_values[VAR_KEY] = !!(frame->flags & AV_FRAME_FLAG_KEY);
select->var_values[VAR_CONCATDEC_SELECT] = get_concatdec_select(frame, av_rescale_q(frame->pts, inlink->time_base, AV_TIME_BASE_Q));
switch (inlink->type) {
@@ -375,7 +375,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
select->var_values[VAR_N],
select->var_values[VAR_PTS],
select->var_values[VAR_T],
- frame->key_frame);
+ !!(frame->flags & AV_FRAME_FLAG_KEY));
switch (inlink->type) {
case AVMEDIA_TYPE_VIDEO:
diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c
index e5e185dbea..4bcec86688 100644
--- a/libavfilter/vf_blackframe.c
+++ b/libavfilter/vf_blackframe.c
@@ -72,7 +72,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
p += frame->linesize[0];
}
- if (frame->key_frame)
+ if (frame->flags & AV_FRAME_FLAG_KEY)
s->last_keyframe = s->frame;
pblack = s->nblack * 100 / (inlink->w * inlink->h);
diff --git a/libavfilter/vf_coreimage.m b/libavfilter/vf_coreimage.m
index b1959861de..ea43aad275 100644
--- a/libavfilter/vf_coreimage.m
+++ b/libavfilter/vf_coreimage.m
@@ -302,6 +302,7 @@ static int request_frame(AVFilterLink *link)
frame->pts = ctx->pts;
frame->duration = 1;
frame->key_frame = 1;
+ frame->flags |= AV_FRAME_FLAG_KEY;
frame->interlaced_frame = 0;
frame->pict_type = AV_PICTURE_TYPE_I;
frame->sample_aspect_ratio = ctx->sar;
diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c
index 9caa618b01..ca58d0519c 100644
--- a/libavfilter/vf_showinfo.c
+++ b/libavfilter/vf_showinfo.c
@@ -724,7 +724,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
frame->width, frame->height,
!frame->interlaced_frame ? 'P' : /* Progressive */
frame->top_field_first ? 'T' : 'B', /* Top / Bottom */
- frame->key_frame,
+ !!(frame->flags & AV_FRAME_FLAG_KEY),
av_get_picture_type_char(frame->pict_type));
if (s->calculate_checksums) {
diff --git a/libavfilter/vsrc_gradients.c b/libavfilter/vsrc_gradients.c
index 3c524b9242..39e9e226ee 100644
--- a/libavfilter/vsrc_gradients.c
+++ b/libavfilter/vsrc_gradients.c
@@ -398,6 +398,7 @@ static int activate(AVFilterContext *ctx)
return AVERROR(ENOMEM);
frame->key_frame = 1;
+ frame->flags |= AV_FRAME_FLAG_KEY;
frame->interlaced_frame = 0;
frame->pict_type = AV_PICTURE_TYPE_I;
frame->sample_aspect_ratio = (AVRational) {1, 1};
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index 9760e5fc80..7fb1ef9718 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -185,6 +185,7 @@ static int activate(AVFilterContext *ctx)
frame->pts = test->pts;
frame->duration = 1;
frame->key_frame = 1;
+ frame->flags |= AV_FRAME_FLAG_KEY;
frame->interlaced_frame = 0;
frame->pict_type = AV_PICTURE_TYPE_I;
frame->sample_aspect_ratio = test->sar;
--
2.40.0
More information about the ffmpeg-devel
mailing list