]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/av1dec: add a reference to the raw frame header to AV1Frames
authorJames Almer <jamrial@gmail.com>
Thu, 12 Nov 2020 19:59:37 +0000 (16:59 -0300)
committerJames Almer <jamrial@gmail.com>
Fri, 13 Nov 2020 13:38:18 +0000 (10:38 -0300)
Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/av1dec.c
libavcodec/av1dec.h

index ad8e7d1dd5bc12797163fc778dbf4db6aed666bc..84c9ca93d5a59445ca0940f65166503e872fc244 100644 (file)
@@ -442,6 +442,8 @@ static void av1_frame_unref(AVCodecContext *avctx, AV1Frame *f)
     ff_thread_release_buffer(avctx, &f->tf);
     av_buffer_unref(&f->hwaccel_priv_buf);
     f->hwaccel_picture_private = NULL;
+    av_buffer_unref(&f->header_ref);
+    f->raw_frame_header = NULL;
     f->spatial_id = f->temporal_id = 0;
     f->order_hint = 0;
     memset(f->skip_mode_frame_idx, 0,
@@ -457,6 +459,12 @@ static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *s
     if (ret < 0)
         return ret;
 
+    dst->header_ref = av_buffer_ref(src->header_ref);
+    if (!dst->header_ref)
+        goto fail;
+
+    dst->raw_frame_header = src->raw_frame_header;
+
     if (src->hwaccel_picture_private) {
         dst->hwaccel_priv_buf = av_buffer_ref(src->hwaccel_priv_buf);
         if (!dst->hwaccel_priv_buf)
@@ -643,6 +651,12 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f)
     AVFrame *frame;
     int ret;
 
+    f->header_ref = av_buffer_ref(s->header_ref);
+    if (!f->header_ref)
+        return AVERROR(ENOMEM);
+
+    f->raw_frame_header = s->raw_frame_header;
+
     ret = update_context_with_frame_header(avctx, header);
     if (ret < 0) {
         av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n");
index bed9376a36dbb231730c5559c8e45720573641ae..533ca2b30f8a44cb0f3e66e02cd6307c68624b0c 100644 (file)
@@ -36,6 +36,9 @@ typedef struct AV1Frame {
     AVBufferRef *hwaccel_priv_buf;
     void *hwaccel_picture_private;
 
+    AVBufferRef *header_ref;
+    AV1RawFrameHeader *raw_frame_header;
+
     int temporal_id;
     int spatial_id;