[FFmpeg-cvslog] avcodec/ffv1dec: Remove redundant writes, fix races

Andreas Rheinhardt git at videolan.org
Sun Dec 19 03:43:23 EET 2021

ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Wed Apr 21 06:24:04 2021 +0200| [17605d1a4afa5761271b27b2aea756a772ca0efc] | committer: Andreas Rheinhardt

avcodec/ffv1dec: Remove redundant writes, fix races

Every modification of the data that is copied in update_thread_context()
is a data race if it happens after ff_thread_finish_setup. ffv1dec's
update_thread_context() simply uses memcpy for updating the new context,
so that every modification of the src's context is a race.
Some of these modifications are unnecessary: picture_number is write-only
for the decoder and cur will be reset when decoding the next frame anyway.
So remove them. And while just at it, also don't set cur for the slice
contexts as this variable is write-only.

Reviewed-by: Anton Khirnov <anton at khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=17605d1a4afa5761271b27b2aea756a772ca0efc

 libavcodec/ffv1dec.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
index 374546f4b3..74c907a156 100644
--- a/libavcodec/ffv1dec.c
+++ b/libavcodec/ffv1dec.c
@@ -924,7 +924,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac
             fs->c.bytestream_end = buf_p + v;
         fs->avctx = avctx;
-        fs->cur = p;
@@ -965,11 +964,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac
     ff_thread_report_progress(&f->picture, INT_MAX, 0);
-    f->picture_number++;
     if (f->last_picture.f)
         ff_thread_release_buffer(avctx, &f->last_picture);
-    f->cur = NULL;
     if ((ret = av_frame_ref(data, f->picture.f)) < 0)
         return ret;

More information about the ffmpeg-cvslog mailing list