On Wed,  6 Mar 2013 15:56:33 +0200, Martin Storsjö <[email protected]> wrote:
> From: "Ronald S. Bultje" <[email protected]>
> 
> Error resilience is enabled and used if automatically enabled
> by other components built in.
> ---
>  configure         |    4 ++--
>  libavcodec/h264.c |   26 ++++++++++++++++++--------
>  2 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/configure b/configure
> index 0aed51d..2b9d679 100755
> --- a/configure
> +++ b/configure
> @@ -1542,7 +1542,7 @@ h263_decoder_select="error_resilience h263_parser 
> mpegvideo"
>  h263_encoder_select="aandcttables error_resilience mpegvideoenc"
>  h263i_decoder_select="h263_decoder"
>  h263p_encoder_select="h263_encoder"
> -h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred 
> h264qpel videodsp"
> +h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
>  huffyuv_encoder_select="huffman"
>  iac_decoder_select="fft mdct sinewin"
>  imc_decoder_select="fft mdct sinewin"
> @@ -1689,7 +1689,7 @@ wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
>  wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
>  
>  # parsers
> -h264_parser_select="error_resilience golomb h264chroma h264dsp h264pred 
> h264qpel videodsp"
> +h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
>  mpeg4video_parser_select="error_resilience mpegvideo"
>  mpegvideo_parser_select="error_resilience mpegvideo"
>  vc1_parser_select="error_resilience mpegvideo"
> diff --git a/libavcodec/h264.c b/libavcodec/h264.c
> index 0b43248..c11207a 100644
> --- a/libavcodec/h264.c
> +++ b/libavcodec/h264.c
> @@ -1237,6 +1237,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;
> @@ -1276,6 +1277,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;
> +    }
>  

Missing reindent (unless i failed to notice a subsequent patch for this)

>      return 0;
>  
> @@ -1684,7 +1686,9 @@ 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);
> +    if (CONFIG_ERROR_RESILIENCE) {
> +        ff_er_frame_start(&h->er);
> +    }
>  
>      assert(h->linesize && h->uvlinesize);
>  
> @@ -2722,7 +2726,7 @@ 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) {
> +    if (CONFIG_ERROR_RESILIENCE && !FIELD_PICTURE) {
>          h->er.cur_pic  = h->cur_pic_ptr;
>          h->er.last_pic = h->ref_count[0] ? &h->ref_list[0][0] : NULL;
>          h->er.next_pic = h->ref_count[1] ? &h->ref_list[1][0] : NULL;
> @@ -4021,10 +4025,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);
> +    }

I'd prefer an #if construct here, it saves us one indentation level and is more
correct i think

>  }
>  
>  static int decode_slice(struct AVCodecContext *avctx, void *arg)
> @@ -4208,7 +4214,9 @@ static int execute_decode_slices(H264Context *h, int 
> context_count)
>      } else {
>          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;
> +            }

Unnecessary change, we only care that the nonexisting ER functions aren't called

>          }
>  
>          avctx->execute(avctx, decode_slice, h->thread_context,
> @@ -4220,8 +4228,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;
> +        }
>      }

same

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to