/**
* @file
- * H.264 / AVC / MPEG4 part10 codec.
+ * H.264 / AVC / MPEG-4 part10 codec.
* @author Michael Niedermayer <michaelni@gmx.at>
*/
int ff_h264_alloc_tables(H264Context *h)
{
const int big_mb_num = h->mb_stride * (h->mb_height + 1);
- const int row_mb_num = 2*h->mb_stride*FFMAX(h->avctx->thread_count, 1);
+ const int row_mb_num = 2*h->mb_stride*FFMAX(h->nb_slice_ctx, 1);
int x, y;
FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->intra4x4_pred_mode,
h->cur_chroma_format_idc = -1;
h->picture_structure = PICT_FRAME;
- h->slice_context_count = 1;
h->workaround_bugs = avctx->workaround_bugs;
h->flags = avctx->flags;
h->poc.prev_poc_msb = 1 << 16;
avctx->chroma_sample_location = AVCHROMA_LOC_LEFT;
- h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? H264_MAX_THREADS : 1;
+ h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? avctx->thread_count : 1;
h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx));
if (!h->slice_ctx) {
h->nb_slice_ctx = 0;
h->cur_pic_ptr = NULL;
- for (i = 0; i < h->nb_slice_ctx; i++)
- av_freep(&h->slice_ctx[i].rbsp_buffer);
av_freep(&h->slice_ctx);
h->nb_slice_ctx = 0;
ff_h264_sei_uninit(&h->sei);
-
- for (i = 0; i < MAX_SPS_COUNT; i++)
- av_buffer_unref(&h->ps.sps_list[i]);
-
- for (i = 0; i < MAX_PPS_COUNT; i++)
- av_buffer_unref(&h->ps.pps_list[i]);
-
- av_buffer_unref(&h->ps.sps_ref);
- av_buffer_unref(&h->ps.pps_ref);
+ ff_h264_ps_uninit(&h->ps);
ff_h2645_packet_uninit(&h->pkt);
H264Picture *cur = h->cur_pic_ptr;
int i, pics, out_of_order, out_idx;
- h->cur_pic_ptr->f->pict_type = h->pict_type;
-
if (h->next_output_pic)
return;
h->nal_unit_type= 0;
- if(!h->slice_context_count)
- h->slice_context_count= 1;
- h->max_contexts = h->slice_context_count;
+ h->max_contexts = h->nb_slice_ctx;
if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS)) {
h->current_slice = 0;
if (!h->first_field)
goto end;
context_count = 0;
}
- /* Slice could not be decoded in parallel mode, restart. Note
- * that rbsp_buffer is not transferred, but since we no longer
- * run in parallel mode this should not be an issue. */
+ /* Slice could not be decoded in parallel mode, restart. */
sl = &h->slice_ctx[0];
goto again;
}