[FFmpeg-cvslog] h264: avoid pointless copying of ref lists
Anton Khirnov
git at videolan.org
Fri Jan 18 14:00:09 CET 2013
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Thu Jan 17 12:25:31 2013 +0100| [940b8b5861241df7aff8977774e1de6e67de5b83] | committer: Anton Khirnov
h264: avoid pointless copying of ref lists
ref_list is constructed from other fields per slice when needed, so do
not copy it for both frame and slice threading.
default_ref_list is constructed per frame and still needs to be copied
to per-slice contexts for slice threading, but a copy is not needed for
frame threading.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=940b8b5861241df7aff8977774e1de6e67de5b83
---
libavcodec/h264.c | 3 +--
libavcodec/h264.h | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 2a711bd..5b7b18c 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1253,7 +1253,7 @@ static int decode_update_thread_context(AVCodecContext *dst,
// reference lists
copy_fields(h, h1, ref_count, list_count);
- copy_fields(h, h1, ref_list, intra_gb);
+ copy_fields(h, h1, ref2frm, intra_gb);
copy_fields(h, h1, short_ref, cabac_init_idc);
copy_picture_range(h->short_ref, h1->short_ref, 32, s, s1);
@@ -2369,7 +2369,6 @@ static int clone_slice(H264Context *dst, H264Context *src)
memcpy(dst->short_ref, src->short_ref, sizeof(dst->short_ref));
memcpy(dst->long_ref, src->long_ref, sizeof(dst->long_ref));
memcpy(dst->default_ref_list, src->default_ref_list, sizeof(dst->default_ref_list));
- memcpy(dst->ref_list, src->ref_list, sizeof(dst->ref_list));
memcpy(dst->dequant4_coeff, src->dequant4_coeff, sizeof(src->dequant4_coeff));
memcpy(dst->dequant8_coeff, src->dequant8_coeff, sizeof(src->dequant8_coeff));
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 898ebf7..cdfe1b6 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -481,9 +481,9 @@ typedef struct H264Context {
int redundant_pic_count;
+ Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
Picture *short_ref[32];
Picture *long_ref[32];
- Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
Picture *delayed_pic[MAX_DELAYED_PIC_COUNT + 2]; // FIXME size?
int last_pocs[MAX_DELAYED_PIC_COUNT];
Picture *next_output_pic;
More information about the ffmpeg-cvslog
mailing list