[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