[FFmpeg-cvslog] pthread_frame: do not copy a range of AVCodecContext fields at once
Anton Khirnov
git at videolan.org
Fri Apr 10 17:53:22 EEST 2020
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Jan 15 13:56:42 2017 +0100| [29445374305fcc422fb2abe55bb5a877b95c0ef2] | committer: Anton Khirnov
pthread_frame: do not copy a range of AVCodecContext fields at once
This is extremely fragile against reordering and hides what is actually
being copied. Copy all the fields manually instead.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=29445374305fcc422fb2abe55bb5a877b95c0ef2
---
libavcodec/pthread_frame.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 2a3c15549f..f0a162bc92 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -322,7 +322,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
*/
static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src)
{
-#define copy_fields(s, e) memcpy(&dst->s, &src->s, (char*)&dst->e - (char*)&dst->s);
dst->flags = src->flags;
dst->draw_horiz_band= src->draw_horiz_band;
@@ -336,7 +335,9 @@ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src)
dst->flags2 = src->flags2;
dst->export_side_data = src->export_side_data;
- copy_fields(skip_loop_filter, subtitle_header);
+ dst->skip_loop_filter = src->skip_loop_filter;
+ dst->skip_idct = src->skip_idct;
+ dst->skip_frame = src->skip_frame;
dst->frame_number = src->frame_number;
dst->reordered_opaque = src->reordered_opaque;
@@ -354,7 +355,6 @@ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src)
}
dst->slice_count = src->slice_count;
return 0;
-#undef copy_fields
}
/// Releases the buffers that this decoding thread was the last user of.
More information about the ffmpeg-cvslog
mailing list