Browse Source

Merge commit 'e0652795292223f8bc8e5bac019c1fca7323d23c'

* commit 'e0652795292223f8bc8e5bac019c1fca7323d23c':
  h264: remove an artificial restriction on the number of slice threads

Tested with multiple runs of fate-h264 THREADS=50 THREAD_TYPE=slice

Merged-by: Clément Bœsch <clement@stupeflix.com>
tags/n3.1
Clément Bœsch 9 years ago
parent
commit
04aefe205b
3 changed files with 3 additions and 25 deletions
  1. +2
    -5
      libavcodec/h264.c
  2. +0
    -3
      libavcodec/h264.h
  3. +1
    -17
      libavcodec/h264_slice.c

+ 2
- 5
libavcodec/h264.c View File

@@ -312,7 +312,6 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)
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;
@@ -330,7 +329,7 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)

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;
@@ -883,9 +882,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)

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)


+ 0
- 3
libavcodec/h264.h View File

@@ -49,7 +49,6 @@
#include "videodsp.h"

#define H264_MAX_PICTURE_COUNT 36
#define H264_MAX_THREADS 32

#define MAX_SPS_COUNT 32
#define MAX_PPS_COUNT 256
@@ -623,8 +622,6 @@ typedef struct H264Context {
*/
int max_contexts;

int slice_context_count;

/**
* 1 if the single thread fallback warning has already been
* displayed, 0 otherwise.


+ 1
- 17
libavcodec/h264_slice.c View File

@@ -917,9 +917,6 @@ static int init_dimensions(H264Context *h)
static int h264_slice_header_init(H264Context *h)
{
const SPS *sps = h->ps.sps;
int nb_slices = (HAVE_THREADS &&
h->avctx->active_thread_type & FF_THREAD_SLICE) ?
h->avctx->thread_count : 1;
int i, ret;

ff_set_sar(h->avctx, sps->sar);
@@ -981,19 +978,6 @@ static int h264_slice_header_init(H264Context *h)
sps->chroma_format_idc);
ff_videodsp_init(&h->vdsp, sps->bit_depth_luma);

if (nb_slices > H264_MAX_THREADS || (nb_slices > h->mb_height && h->mb_height)) {
int max_slices;
if (h->mb_height)
max_slices = FFMIN(H264_MAX_THREADS, h->mb_height);
else
max_slices = H264_MAX_THREADS;
av_log(h->avctx, AV_LOG_WARNING, "too many threads/slices %d,"
" reducing to %d\n", nb_slices, max_slices);
nb_slices = max_slices;
}
h->slice_context_count = nb_slices;
h->max_contexts = FFMIN(h->max_contexts, nb_slices);

if (!HAVE_THREADS || !(h->avctx->active_thread_type & FF_THREAD_SLICE)) {
ret = ff_h264_slice_context_init(h, &h->slice_ctx[0]);
if (ret < 0) {
@@ -1001,7 +985,7 @@ static int h264_slice_header_init(H264Context *h)
goto fail;
}
} else {
for (i = 0; i < h->slice_context_count; i++) {
for (i = 0; i < h->nb_slice_ctx; i++) {
H264SliceContext *sl = &h->slice_ctx[i];

sl->h264 = h;


Loading…
Cancel
Save