summaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-21 21:41:17 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-03-21 21:41:17 +0100
commit0f8bb0efc3cf9e2b86c7e518f24133ea358566d5 (patch)
treedacb1546d0e82b1f27766c419b5dfddc877b42a5 /libavcodec
parent8bdcec31116594b07e83a8845b64a5e8172884f2 (diff)
parent5bf3c0fa49afd5bbf43aa841ff78007d72c80736 (diff)
downloadffmpeg-streaming-0f8bb0efc3cf9e2b86c7e518f24133ea358566d5.zip
ffmpeg-streaming-0f8bb0efc3cf9e2b86c7e518f24133ea358566d5.tar.gz
Merge commit '5bf3c0fa49afd5bbf43aa841ff78007d72c80736'
* commit '5bf3c0fa49afd5bbf43aa841ff78007d72c80736': h264: drop the now unused per-slice H264Contexts Conflicts: libavcodec/h264_slice.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.c11
-rw-r--r--libavcodec/h264.h2
-rw-r--r--libavcodec/h264_parser.c1
-rw-r--r--libavcodec/h264_slice.c79
4 files changed, 11 insertions, 82 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 16830d8..d708461 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -365,7 +365,6 @@ static int decode_rbsp_trailing(H264Context *h, const uint8_t *src)
void ff_h264_free_tables(H264Context *h, int free_rbsp)
{
int i;
- H264Context *hx;
av_freep(&h->intra4x4_pred_mode);
av_freep(&h->chroma_pred_mode_table);
@@ -398,15 +397,6 @@ void ff_h264_free_tables(H264Context *h, int free_rbsp)
h->cur_pic_ptr = NULL;
- for (i = 0; i < H264_MAX_THREADS; i++) {
- hx = h->thread_context[i];
- if (!hx)
- continue;
-
- if (i)
- av_freep(&h->thread_context[i]);
- }
-
for (i = 0; i < h->nb_slice_ctx; i++) {
H264SliceContext *sl = &h->slice_ctx[i];
@@ -683,7 +673,6 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
return AVERROR(ENOMEM);
}
- h->thread_context[0] = h;
for (i = 0; i < h->nb_slice_ctx; i++)
h->slice_ctx[i].h264 = h;
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 6ceb9dd..5ecff73 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -651,8 +651,6 @@ typedef struct H264Context {
* @name Members for slice based multithreading
* @{
*/
- struct H264Context *thread_context[H264_MAX_THREADS];
-
/**
* current slice number, used to initialize slice_num of each thread/context
*/
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index f4b97e6..516c68f 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -612,7 +612,6 @@ static av_cold int init(AVCodecParserContext *s)
return 0;
h->nb_slice_ctx = 1;
- h->thread_context[0] = h;
h->slice_context_count = 1;
ff_h264dsp_init(&h->h264dsp, 8, 1);
return 0;
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index eef28ae..39b3722 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -392,31 +392,6 @@ void ff_h264_init_dequant_tables(H264Context *h)
}
}
-/**
- * Mimic alloc_tables(), but for every context thread.
- */
-static void clone_tables(H264Context *dst, H264SliceContext *sl,
- H264Context *src, int i)
-{
- sl->intra4x4_pred_mode = src->intra4x4_pred_mode + i * 8 * 2 * src->mb_stride;
- sl->mvd_table[0] = src->mvd_table[0] + i * 8 * 2 * src->mb_stride;
- sl->mvd_table[1] = src->mvd_table[1] + i * 8 * 2 * src->mb_stride;
-
- dst->non_zero_count = src->non_zero_count;
- dst->slice_table = src->slice_table;
- dst->cbp_table = src->cbp_table;
- dst->mb2b_xy = src->mb2b_xy;
- dst->mb2br_xy = src->mb2br_xy;
- dst->chroma_pred_mode_table = src->chroma_pred_mode_table;
- dst->direct_table = src->direct_table;
- dst->list_counts = src->list_counts;
- dst->DPB = src->DPB;
- dst->cur_pic_ptr = src->cur_pic_ptr;
- dst->cur_pic = src->cur_pic;
- ff_h264_pred_init(&dst->hpc, src->avctx->codec_id, src->sps.bit_depth_luma,
- src->sps.chroma_format_idc);
-}
-
#define IN_RANGE(a, b, size) (((a) >= (b)) && ((a) < ((b) + (size))))
#define REBASE_PICTURE(pic, new_ctx, old_ctx) \
@@ -591,7 +566,6 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
}
}
- h->thread_context[0] = h;
h->context_initialized = h1->context_initialized;
}
@@ -657,7 +631,7 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
copy_fields(h, h1, poc_lsb, default_ref_list);
// reference lists
- copy_fields(h, h1, short_ref, thread_context);
+ copy_fields(h, h1, short_ref, current_slice);
copy_picture_range(h->short_ref, h1->short_ref, 32, h, h1);
copy_picture_range(h->long_ref, h1->long_ref, 32, h, h1);
@@ -1176,50 +1150,19 @@ static int h264_slice_header_init(H264Context *h, int reinit)
goto fail;
}
} else {
- for (i = 1; i < h->slice_context_count; i++) {
- H264Context *c;
- c = h->thread_context[i] = av_mallocz(sizeof(H264Context));
- if (!c) {
- ret = AVERROR(ENOMEM);
- goto fail;
- }
- c->avctx = h->avctx;
- c->vdsp = h->vdsp;
- c->h264dsp = h->h264dsp;
- c->h264qpel = h->h264qpel;
- c->h264chroma = h->h264chroma;
- c->sps = h->sps;
- c->pps = h->pps;
- c->pixel_shift = h->pixel_shift;
- c->cur_chroma_format_idc = h->cur_chroma_format_idc;
- c->width = h->width;
- c->height = h->height;
- c->linesize = h->linesize;
- c->uvlinesize = h->uvlinesize;
- c->chroma_x_shift = h->chroma_x_shift;
- c->chroma_y_shift = h->chroma_y_shift;
- c->droppable = h->droppable;
- c->low_delay = h->low_delay;
- c->mb_width = h->mb_width;
- c->mb_height = h->mb_height;
- c->mb_stride = h->mb_stride;
- c->mb_num = h->mb_num;
- c->flags = h->flags;
- c->workaround_bugs = h->workaround_bugs;
- c->pict_type = h->pict_type;
-
- h->slice_ctx[i].h264 = c;
-
- init_scan_tables(c);
- clone_tables(c, &h->slice_ctx[i], h, i);
- c->context_initialized = 1;
- }
+ for (i = 0; i < h->slice_context_count; i++) {
+ H264SliceContext *sl = &h->slice_ctx[i];
+
+ sl->h264 = h;
+ sl->intra4x4_pred_mode = h->intra4x4_pred_mode + i * 8 * 2 * h->mb_stride;
+ sl->mvd_table[0] = h->mvd_table[0] + i * 8 * 2 * h->mb_stride;
+ sl->mvd_table[1] = h->mvd_table[1] + i * 8 * 2 * h->mb_stride;
- for (i = 0; i < h->slice_context_count; i++)
- if ((ret = ff_h264_slice_context_init(h, &h->slice_ctx[i])) < 0) {
+ if ((ret = ff_h264_slice_context_init(h, sl)) < 0) {
av_log(h->avctx, AV_LOG_ERROR, "context_init() failed.\n");
goto fail;
}
+ }
}
h->context_initialized = 1;
@@ -2357,7 +2300,7 @@ static void er_add_slice(H264SliceContext *sl,
static int decode_slice(struct AVCodecContext *avctx, void *arg)
{
H264SliceContext *sl = arg;
- const H264Context *h = avctx->priv_data;
+ const H264Context *h = sl->h264;
int lf_x_start = sl->mb_x;
int ret;
OpenPOWER on IntegriCloud