[FFmpeg-devel] [PATCH 11/21] avcodec/smacker: Don't zero-initialize unnecessarily

Paul B Mahol onemda at gmail.com
Sat Aug 1 17:03:29 EEST 2020


I prefer in this case av_calloc or av_malloc_array, if memset hurts.

Anyway LGTM

On 8/1/20, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
> With the possible exception of the "last" values when decoding video,
> only the part that is actually initialized with values derived from the
> bitstream is used afterwards, so it is unnecessary to zero everything at
> the beginning. This is also no problem for the "last" values at all,
> because they are reset for every frame anyway.
>
> While at it, use sizeof(variable) instead of sizeof(type).
>
> Performance increased slightly: For GCC, from 2068389 decicycles per call
> to smka_decode_frame() when decoding the sample from ticket #2425 to 2053758
> decicycles; for Clang, from 1534188 to 1523153 decicycles.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavcodec/smacker.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c
> index 27de30f0e1..c249ce7514 100644
> --- a/libavcodec/smacker.c
> +++ b/libavcodec/smacker.c
> @@ -197,14 +197,15 @@ static int smacker_decode_header_tree(SmackVContext
> *smk, GetBitContext *gb, int
>      for (int i = 0; i < 2; i++) {
>          h[i].length  = 256;
>          h[i].current = 0;
> -        h[i].bits    = av_mallocz(256 * sizeof(h[i].bits[0]));
> -        h[i].lengths = av_mallocz(256 * sizeof(h[i].lengths[0]));
> -        h[i].values  = av_mallocz(256 * sizeof(h[i].values[0]));
> +        h[i].bits    = av_malloc(256 * sizeof(h[i].bits[0]));
> +        h[i].lengths = av_malloc(256 * sizeof(h[i].lengths[0]));
> +        h[i].values  = av_malloc(256 * sizeof(h[i].values[0]));
>          if (!h[i].bits || !h[i].lengths || !h[i].values) {
>              err = AVERROR(ENOMEM);
>              goto error;
>          }
>          if (!get_bits1(gb)) {
> +            h[i].values[0] = 0;
>              av_log(smk->avctx, AV_LOG_ERROR, "Skipping %s bytes tree\n",
>                     i ? "high" : "low");
>              continue;
> @@ -242,7 +243,7 @@ static int smacker_decode_header_tree(SmackVContext
> *smk, GetBitContext *gb, int
>
>      huff.length = (size + 3) >> 2;
>      huff.current = 0;
> -    huff.values = av_mallocz_array(huff.length + 3,
> sizeof(huff.values[0]));
> +    huff.values = av_malloc_array(huff.length + 3, sizeof(huff.values[0]));
>      if (!huff.values) {
>          err = AVERROR(ENOMEM);
>          goto error;
> @@ -645,9 +646,9 @@ static int smka_decode_frame(AVCodecContext *avctx, void
> *data,
>      for(i = 0; i < (1 << (bits + stereo)); i++) {
>          h[i].length = 256;
>          h[i].current = 0;
> -        h[i].bits = av_mallocz(256 * 4);
> -        h[i].lengths = av_mallocz(256 * sizeof(int));
> -        h[i].values = av_mallocz(256 * sizeof(int));
> +        h[i].bits    = av_malloc(256 * sizeof(h[i].bits));
> +        h[i].lengths = av_malloc(256 * sizeof(h[i].lengths));
> +        h[i].values  = av_malloc(256 * sizeof(h[i].values));
>          if (!h[i].bits || !h[i].lengths || !h[i].values) {
>              ret = AVERROR(ENOMEM);
>              goto error;
> --
> 2.20.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list