Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2013-03-03 04:57:26 +0400
committerMichael Niedermayer <michaelni@gmx.at>2013-03-03 15:19:15 +0400
commitd4e649cca6de9e5b25f8ebb28c82a95bd24a9e9c (patch)
treedffeba96fc0b6e004ec93c92a6aefe6da821602a /libavcodec
parentfd464d4d01b313eccc423cac8811d2b4b970ea6f (diff)
h264: make it possible to compile without error_resilience.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.c49
-rw-r--r--libavcodec/h264.h2
2 files changed, 34 insertions, 17 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index bb33878af4..9d86e01fa7 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1270,6 +1270,7 @@ static int context_init(H264Context *h)
h->ref_cache[1][scan8[7] + 1] =
h->ref_cache[1][scan8[13] + 1] = PART_NOT_AVAILABLE;
+ if (CONFIG_ERROR_RESILIENCE) {
/* init ER */
er->avctx = h->avctx;
er->dsp = &h->dsp;
@@ -1309,6 +1310,7 @@ static int context_init(H264Context *h)
er->dc_val[2] = er->dc_val[1] + c_size;
for (i = 0; i < yc_size; i++)
h->dc_val_base[i] = 1024;
+ }
return 0;
@@ -1339,9 +1341,11 @@ static av_cold void common_init(H264Context *h)
h->dequant_coeff_pps = -1;
- h->dsp.dct_bits = 16;
- /* needed so that IDCT permutation is known early */
- ff_dsputil_init(&h->dsp, h->avctx);
+ if (CONFIG_ERROR_RESILIENCE) {
+ h->dsp.dct_bits = 16;
+ /* needed so that IDCT permutation is known early */
+ ff_dsputil_init(&h->dsp, h->avctx);
+ }
ff_videodsp_init(&h->vdsp, 8);
memset(h->pps.scaling_matrix4, 16, 6 * 16 * sizeof(uint8_t));
@@ -1765,9 +1769,11 @@ int ff_h264_frame_start(H264Context *h)
h->cur_pic = *h->cur_pic_ptr;
h->cur_pic.f.extended_data = h->cur_pic.f.data;
- ff_er_frame_start(&h->er);
- h->er.last_pic =
- h->er.next_pic = NULL;
+ if (CONFIG_ERROR_RESILIENCE) {
+ ff_er_frame_start(&h->er);
+ h->er.last_pic =
+ h->er.next_pic = NULL;
+ }
assert(h->linesize && h->uvlinesize);
@@ -2777,7 +2783,8 @@ static int field_end(H264Context *h, int in_setup)
* past end by one (callers fault) and resync_mb_y != 0
* causes problems for the first MB line, too.
*/
- if (!FIELD_PICTURE && h->current_slice && !h->sps.new) {
+ if (CONFIG_ERROR_RESILIENCE &&
+ !FIELD_PICTURE && h->current_slice && !h->sps.new) {
h->er.cur_pic = h->cur_pic_ptr;
ff_er_frame_end(&h->er);
}
@@ -2880,8 +2887,10 @@ static int h264_set_parameter_from_sps(H264Context *h)
ff_h264qpel_init(&h->h264qpel, h->sps.bit_depth_luma);
ff_h264_pred_init(&h->hpc, h->avctx->codec_id, h->sps.bit_depth_luma,
h->sps.chroma_format_idc);
- h->dsp.dct_bits = h->sps.bit_depth_luma > 8 ? 32 : 16;
- ff_dsputil_init(&h->dsp, h->avctx);
+ if (CONFIG_ERROR_RESILIENCE) {
+ h->dsp.dct_bits = h->sps.bit_depth_luma > 8 ? 32 : 16;
+ ff_dsputil_init(&h->dsp, h->avctx);
+ }
ff_videodsp_init(&h->vdsp, h->sps.bit_depth_luma);
} else {
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth: %d\n",
@@ -3043,7 +3052,9 @@ static int h264_slice_header_init(H264Context *h, int reinit)
H264Context *c;
c = h->thread_context[i] = av_mallocz(sizeof(H264Context));
c->avctx = h->avctx;
- c->dsp = h->dsp;
+ if (CONFIG_ERROR_RESILIENCE) {
+ c->dsp = h->dsp;
+ }
c->vdsp = h->vdsp;
c->h264dsp = h->h264dsp;
c->h264qpel = h->h264qpel;
@@ -4152,10 +4163,12 @@ static void decode_finish_row(H264Context *h)
static void er_add_slice(H264Context *h, int startx, int starty,
int endx, int endy, int status)
{
- ERContext *er = &h->er;
+ if (CONFIG_ERROR_RESILIENCE) {
+ ERContext *er = &h->er;
- er->ref_count = h->ref_count[0];
- ff_er_add_slice(er, startx, starty, endx, endy, status);
+ er->ref_count = h->ref_count[0];
+ ff_er_add_slice(er, startx, starty, endx, endy, status);
+ }
}
static int decode_slice(struct AVCodecContext *avctx, void *arg)
@@ -4344,7 +4357,9 @@ static int execute_decode_slices(H264Context *h, int context_count)
av_assert0(context_count > 0);
for (i = 1; i < context_count; i++) {
hx = h->thread_context[i];
- hx->er.error_count = 0;
+ if (CONFIG_ERROR_RESILIENCE) {
+ hx->er.error_count = 0;
+ }
hx->x264_build = h->x264_build;
}
@@ -4357,8 +4372,10 @@ static int execute_decode_slices(H264Context *h, int context_count)
h->mb_y = hx->mb_y;
h->droppable = hx->droppable;
h->picture_structure = hx->picture_structure;
- for (i = 1; i < context_count; i++)
- h->er.error_count += h->thread_context[i]->er.error_count;
+ if (CONFIG_ERROR_RESILIENCE) {
+ for (i = 1; i < context_count; i++)
+ h->er.error_count += h->thread_context[i]->er.error_count;
+ }
}
return 0;
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index d391b229c7..03be472c51 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -256,7 +256,6 @@ typedef struct MMCO {
*/
typedef struct H264Context {
AVCodecContext *avctx;
- DSPContext dsp;
VideoDSPContext vdsp;
H264DSPContext h264dsp;
H264ChromaContext h264chroma;
@@ -264,6 +263,7 @@ typedef struct H264Context {
MotionEstContext me;
ParseContext parse_context;
GetBitContext gb;
+ DSPContext dsp;
ERContext er;
Picture *DPB;