summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-04-11 09:27:08 +0200
committerAnton Khirnov <anton@khirnov.net>2016-04-24 10:06:24 +0200
commit0ba471d7d864c712f45d7ac6aca4829aba025adc (patch)
tree8d098d344f369746d23082526bee789f0d015fef /libavcodec
parent72da8d9bb24d1b1bf74c2f1108650c0da0054d2e (diff)
h264: eliminate copy_fields
It is very fragile against fields being moved and hides what is actually being copied. Copy all the fields explicitly instead.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264_slice.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 5cbfee122c..8f921645d1 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -304,10 +304,6 @@ static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
}
}
-#define copy_fields(to, from, start_field, end_field) \
- memcpy(&to->start_field, &from->start_field, \
- (char *)&to->end_field - (char *)&to->start_field)
-
static int h264_slice_header_init(H264Context *h);
int ff_h264_update_thread_context(AVCodecContext *dst,
@@ -408,8 +404,24 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
h->is_avc = h1->is_avc;
h->nal_length_size = h1->nal_length_size;
- // POC timing
- copy_fields(h, h1, poc, current_slice);
+ memcpy(&h->poc, &h1->poc, sizeof(h->poc));
+
+ h->curr_pic_num = h1->curr_pic_num;
+ h->max_pic_num = h1->max_pic_num;
+
+ memcpy(h->short_ref, h1->short_ref, sizeof(h->short_ref));
+ memcpy(h->long_ref, h1->long_ref, sizeof(h->long_ref));
+ memcpy(h->delayed_pic, h1->delayed_pic, sizeof(h->delayed_pic));
+ memcpy(h->last_pocs, h1->last_pocs, sizeof(h->last_pocs));
+
+ h->next_output_pic = h1->next_output_pic;
+ h->next_outputed_poc = h1->next_outputed_poc;
+
+ memcpy(h->mmco, h1->mmco, sizeof(h->mmco));
+ h->mmco_index = h1->mmco_index;
+ h->mmco_reset = h1->mmco_reset;
+ h->long_ref_count = h1->long_ref_count;
+ h->short_ref_count = h1->short_ref_count;
copy_picture_range(h->short_ref, h1->short_ref, 32, h, h1);
copy_picture_range(h->long_ref, h1->long_ref, 32, h, h1);