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;
return src;
}
- av_fast_malloc(&h->rbsp_buffer, &h->rbsp_buffer_size,
+ av_fast_malloc(&sl->rbsp_buffer, &sl->rbsp_buffer_size,
length + FF_INPUT_BUFFER_PADDING_SIZE);
- dst = h->rbsp_buffer;
+ dst = sl->rbsp_buffer;
if (!dst)
return NULL;
if (!hx)
continue;
- if (free_rbsp) {
- av_freep(&hx->rbsp_buffer);
- hx->rbsp_buffer_size = 0;
- }
if (i)
av_freep(&h->thread_context[i]);
}
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;
+ }
}
}
h->slice_ctx[i].h264 = h;
h->avctx = avctx;
- h->rbsp_buffer = NULL;
- h->rbsp_buffer_size = 0;
h->context_initialized = 0;
return 0;
break;
}
- 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)
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;
CABACContext cabac;
uint8_t cabac_state[1024];
int cabac_init_idc;
+
+ // rbsp buffer used for this slice
+ uint8_t *rbsp_buffer;
+ unsigned int rbsp_buffer_size;
} H264SliceContext;
/**
int nal_ref_idc;
int nal_unit_type;
- uint8_t *rbsp_buffer;
- unsigned int rbsp_buffer_size;
/**
* Used to parse AVC variant of h264
* or a decode rbsp tailing?
* @return decoded bytes, might be src+1 if no escapes
*/
-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);
/**