aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h264.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-21 20:10:49 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-03-21 20:16:21 +0100
commit84ae7294cbaa413b80d632f79d539270dd4bd6b5 (patch)
treee44e4c10830565c3072d871405c57a64661eef85 /libavcodec/h264.c
parent830e548b9ec32ad7ab02be056db15cbcf3c58346 (diff)
parent3178f4d33ff62243f7cdddb081db516ea34396c9 (diff)
downloadffmpeg-84ae7294cbaa413b80d632f79d539270dd4bd6b5.tar.gz
Merge commit '3178f4d33ff62243f7cdddb081db516ea34396c9'
* commit '3178f4d33ff62243f7cdddb081db516ea34396c9': h264: move rbsp_buffer into the per-slice context Conflicts: libavcodec/h264.c libavcodec/h264_parser.c libavcodec/h264_slice.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r--libavcodec/h264.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 63f063a7f3..4a19a2e357 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -233,7 +233,8 @@ int ff_h264_check_intra_pred_mode(const H264Context *h, H264SliceContext *sl,
return mode;
}
-const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
+const uint8_t *ff_h264_decode_nal(H264Context *h, H264SliceContext *sl,
+ const uint8_t *src,
int *dst_length, int *consumed, int length)
{
int i, si, di;
@@ -293,8 +294,8 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
}
#endif
- av_fast_padded_malloc(&h->rbsp_buffer, &h->rbsp_buffer_size, length+MAX_MBPAIR_SIZE);
- dst = h->rbsp_buffer;
+ av_fast_padded_malloc(&sl->rbsp_buffer, &sl->rbsp_buffer_size, length+MAX_MBPAIR_SIZE);
+ dst = sl->rbsp_buffer;
if (!dst)
return NULL;
@@ -402,10 +403,6 @@ void ff_h264_free_tables(H264Context *h, int free_rbsp)
if (!hx)
continue;
- if (free_rbsp) {
- av_freep(&hx->rbsp_buffer);
- hx->rbsp_buffer_size = 0;
- }
if (i)
av_freep(&h->thread_context[i]);
}
@@ -427,6 +424,11 @@ void ff_h264_free_tables(H264Context *h, int free_rbsp)
sl->edge_emu_buffer_allocated = 0;
sl->top_borders_allocated[0] = 0;
sl->top_borders_allocated[1] = 0;
+
+ if (free_rbsp) {
+ av_freep(&sl->rbsp_buffer);
+ sl->rbsp_buffer_size = 0;
+ }
}
}
@@ -745,8 +747,6 @@ static int decode_init_thread_copy(AVCodecContext *avctx)
h->slice_ctx[i].h264 = h;
h->avctx = avctx;
- h->rbsp_buffer = NULL;
- h->rbsp_buffer_size = 0;
h->context_initialized = 0;
return 0;
@@ -1392,7 +1392,7 @@ static int get_last_needed_nal(H264Context *h, const uint8_t *buf, int buf_size)
continue;
}
- ptr = ff_h264_decode_nal(h, buf + buf_index, &dst_length, &consumed,
+ ptr = ff_h264_decode_nal(h, &h->slice_ctx[0], buf + buf_index, &dst_length, &consumed,
next_avc - buf_index);
if (!ptr || dst_length < 0)
@@ -1494,7 +1494,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size,
hx = h->thread_context[context_count];
sl = &h->slice_ctx[context_count];
- ptr = ff_h264_decode_nal(hx, buf + buf_index, &dst_length,
+ ptr = ff_h264_decode_nal(hx, sl, buf + buf_index, &dst_length,
&consumed, next_avc - buf_index);
if (!ptr || dst_length < 0) {
ret = -1;