[FFmpeg-cvslog] lavc/ffv1dec: drop FFV1Context.cur

Anton Khirnov git at videolan.org
Thu Aug 1 11:16:36 EEST 2024


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Jul  3 14:36:02 2024 +0200| [4da146ba831c51b66a038f6a96c8a6b175e55d35] | committer: Anton Khirnov

lavc/ffv1dec: drop FFV1Context.cur

It is merely a pointer to FFV1Context.picture.f, which can just as well
be used directly.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4da146ba831c51b66a038f6a96c8a6b175e55d35
---

 libavcodec/ffv1.h    |  1 -
 libavcodec/ffv1dec.c | 33 +++++++++++++++++----------------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h
index acec22e83e..d99367ce81 100644
--- a/libavcodec/ffv1.h
+++ b/libavcodec/ffv1.h
@@ -89,7 +89,6 @@ typedef struct FFV1Context {
     ProgressFrame picture, last_picture;
     struct FFV1Context *fsrc;
 
-    AVFrame *cur;
     const AVFrame *cur_enc_frame;
     int plane_count;
     int ac;                              ///< 1=range coder <-> 0=golomb rice
diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
index 7066146477..60d04f04b9 100644
--- a/libavcodec/ffv1dec.c
+++ b/libavcodec/ffv1dec.c
@@ -163,7 +163,8 @@ static int decode_plane(FFV1Context *s, uint8_t *src,
     return 0;
 }
 
-static int decode_slice_header(const FFV1Context *f, FFV1Context *fs)
+static int decode_slice_header(const FFV1Context *f, FFV1Context *fs,
+                               AVFrame *frame)
 {
     RangeCoder *c = &fs->c;
     uint8_t state[CONTEXT_SIZE];
@@ -217,23 +218,23 @@ static int decode_slice_header(const FFV1Context *f, FFV1Context *fs)
 
     ps = get_symbol(c, state, 0);
     if (ps == 1) {
-        f->cur->flags |= AV_FRAME_FLAG_INTERLACED;
-        f->cur->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
+        frame->flags |= AV_FRAME_FLAG_INTERLACED;
+        frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
     } else if (ps == 2) {
-        f->cur->flags |= AV_FRAME_FLAG_INTERLACED;
-        f->cur->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST;
+        frame->flags |= AV_FRAME_FLAG_INTERLACED;
+        frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST;
     } else if (ps == 3) {
-        f->cur->flags &= ~AV_FRAME_FLAG_INTERLACED;
+        frame->flags &= ~AV_FRAME_FLAG_INTERLACED;
     }
-    f->cur->sample_aspect_ratio.num = get_symbol(c, state, 0);
-    f->cur->sample_aspect_ratio.den = get_symbol(c, state, 0);
+    frame->sample_aspect_ratio.num = get_symbol(c, state, 0);
+    frame->sample_aspect_ratio.den = get_symbol(c, state, 0);
 
     if (av_image_check_sar(f->width, f->height,
-                           f->cur->sample_aspect_ratio) < 0) {
+                           frame->sample_aspect_ratio) < 0) {
         av_log(f->avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
-               f->cur->sample_aspect_ratio.num,
-               f->cur->sample_aspect_ratio.den);
-        f->cur->sample_aspect_ratio = (AVRational){ 0, 1 };
+               frame->sample_aspect_ratio.num,
+               frame->sample_aspect_ratio.den);
+        frame->sample_aspect_ratio = (AVRational){ 0, 1 };
     }
 
     if (fs->version > 3) {
@@ -258,7 +259,7 @@ static int decode_slice(AVCodecContext *c, void *arg)
     FFV1Context *f    = fs->avctx->priv_data;
     int width, height, x, y, ret;
     const int ps      = av_pix_fmt_desc_get(c->pix_fmt)->comp[0].step;
-    AVFrame * const p = f->cur;
+    AVFrame * const p = f->picture.f;
     const int      si = (FFV1Context**)arg - f->slice_context;
 
     if (f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY) && f->last_picture.f)
@@ -299,7 +300,7 @@ static int decode_slice(AVCodecContext *c, void *arg)
     if (f->version > 2) {
         if (ff_ffv1_init_slice_state(f, fs) < 0)
             return AVERROR(ENOMEM);
-        if (decode_slice_header(f, fs) < 0) {
+        if (decode_slice_header(f, fs, p) < 0) {
             fs->slice_x = fs->slice_y = fs->slice_height = fs->slice_width = 0;
             fs->slice_damaged = 1;
             return AVERROR_INVALIDDATA;
@@ -307,7 +308,7 @@ static int decode_slice(AVCodecContext *c, void *arg)
     }
     if ((ret = ff_ffv1_init_slice_state(f, fs)) < 0)
         return ret;
-    if ((f->cur->flags & AV_FRAME_FLAG_KEY) || fs->slice_reset_contexts) {
+    if ((p->flags & AV_FRAME_FLAG_KEY) || fs->slice_reset_contexts) {
         ff_ffv1_clear_slice_state(f, fs);
     } else if (fs->slice_damaged) {
         return AVERROR_INVALIDDATA;
@@ -920,7 +921,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     if (ret < 0)
         return ret;
 
-    f->cur = p = f->picture.f;
+    p = f->picture.f;
 
     p->pict_type = AV_PICTURE_TYPE_I; //FIXME I vs. P
     p->flags     = (p->flags & ~AV_FRAME_FLAG_KEY) | key_frame;



More information about the ffmpeg-cvslog mailing list