* [FFmpeg-devel] [PATCH] avcodec/libdav1d: honor the requested skip_frame level
@ 2022-12-08 16:31 James Almer
2022-12-14 23:51 ` [FFmpeg-devel] [PATCH v2] " James Almer
0 siblings, 1 reply; 2+ messages in thread
From: James Almer @ 2022-12-08 16:31 UTC (permalink / raw)
To: ffmpeg-devel
This supports dropping non-intra, non-key, or all frames.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/libdav1d.c | 51 +++++++++++++++++++++++++++----------------
1 file changed, 32 insertions(+), 19 deletions(-)
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index 028929404e..2f83a963e9 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -369,6 +369,37 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame)
return res;
}
+#if FF_DAV1D_VERSION_AT_LEAST(5,1)
+ dav1d_get_event_flags(dav1d->c, &event_flags);
+ if (c->pix_fmt == AV_PIX_FMT_NONE ||
+ event_flags & DAV1D_EVENT_FLAG_NEW_SEQUENCE)
+#endif
+ libdav1d_init_params(c, p->seq_hdr);
+ if (c->width != p->p.w || c->height != p->p.h) {
+ res = ff_set_dimensions(c, p->p.w, p->p.h);
+ if (res < 0) {
+ dav1d_picture_unref(p);
+ return 0;
+ }
+ }
+
+ av_reduce(&c->sample_aspect_ratio.num,
+ &c->sample_aspect_ratio.den,
+ p->p.h * (int64_t)p->frame_hdr->render_width,
+ p->p.w * (int64_t)p->frame_hdr->render_height,
+ INT_MAX);
+ ff_set_sar(c, c->sample_aspect_ratio);
+
+ if ((c->skip_frame >= AVDISCARD_NONINTRA &&
+ (p->frame_hdr->frame_type != DAV1D_FRAME_TYPE_KEY &&
+ p->frame_hdr->frame_type != DAV1D_FRAME_TYPE_INTRA)) ||
+ (c->skip_frame >= AVDISCARD_NONKEY &&
+ p->frame_hdr->frame_type != DAV1D_FRAME_TYPE_KEY) ||
+ c->skip_frame >= AVDISCARD_ALL) {
+ dav1d_picture_unref(p);
+ return 0;
+ }
+
av_assert0(p->data[0] && p->allocator_data);
// This requires the custom allocator above
@@ -385,30 +416,12 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame)
frame->linesize[1] = p->stride[1];
frame->linesize[2] = p->stride[1];
-#if FF_DAV1D_VERSION_AT_LEAST(5,1)
- dav1d_get_event_flags(dav1d->c, &event_flags);
- if (c->pix_fmt == AV_PIX_FMT_NONE ||
- event_flags & DAV1D_EVENT_FLAG_NEW_SEQUENCE)
-#endif
- libdav1d_init_params(c, p->seq_hdr);
res = ff_decode_frame_props(c, frame);
if (res < 0)
goto fail;
frame->width = p->p.w;
frame->height = p->p.h;
- if (c->width != p->p.w || c->height != p->p.h) {
- res = ff_set_dimensions(c, p->p.w, p->p.h);
- if (res < 0)
- goto fail;
- }
-
- av_reduce(&frame->sample_aspect_ratio.num,
- &frame->sample_aspect_ratio.den,
- frame->height * (int64_t)p->frame_hdr->render_width,
- frame->width * (int64_t)p->frame_hdr->render_height,
- INT_MAX);
- ff_set_sar(c, frame->sample_aspect_ratio);
if (p->m.user_data.data)
memcpy(&frame->reordered_opaque, p->m.user_data.data, sizeof(frame->reordered_opaque));
@@ -595,7 +608,7 @@ const FFCodec ff_libdav1d_decoder = {
FF_CODEC_RECEIVE_FRAME_CB(libdav1d_receive_frame),
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS |
- FF_CODEC_CAP_AUTO_THREADS,
+ FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_AUTO_THREADS,
.p.priv_class = &libdav1d_class,
.p.wrapper_name = "libdav1d",
};
--
2.38.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 2+ messages in thread
* [FFmpeg-devel] [PATCH v2] avcodec/libdav1d: honor the requested skip_frame level
2022-12-08 16:31 [FFmpeg-devel] [PATCH] avcodec/libdav1d: honor the requested skip_frame level James Almer
@ 2022-12-14 23:51 ` James Almer
0 siblings, 0 replies; 2+ messages in thread
From: James Almer @ 2022-12-14 23:51 UTC (permalink / raw)
To: ffmpeg-devel
This allows dropping non-reference, non-intra, or non-key frames on supported
libdav1d versions.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/libdav1d.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index 2f151d2d1b..5a4daa3e23 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -260,6 +260,20 @@ static av_cold int libdav1d_init(AVCodecContext *c)
s.n_frame_threads, s.n_tile_threads);
#endif
+#if FF_DAV1D_VERSION_AT_LEAST(6,8)
+ switch (c->skip_frame) {
+ case AVDISCARD_NONREF:
+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_REFERENCE;
+ break;
+ case AVDISCARD_NONINTRA:
+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_INTRA;
+ break;
+ case AVDISCARD_NONKEY:
+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_KEY;
+ break;
+ }
+#endif
+
res = libdav1d_parse_extradata(c);
if (res < 0)
return res;
--
2.38.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-12-14 23:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-08 16:31 [FFmpeg-devel] [PATCH] avcodec/libdav1d: honor the requested skip_frame level James Almer
2022-12-14 23:51 ` [FFmpeg-devel] [PATCH v2] " James Almer
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git