diff options
author | Muhammad Faiz <mfcc64@gmail.com> | 2018-02-03 01:18:27 +0700 |
---|---|---|
committer | Muhammad Faiz <mfcc64@gmail.com> | 2018-02-04 06:11:07 +0700 |
commit | 3caecf7ce8e9642cd17942e61f12803bbab52ad2 (patch) | |
tree | 82ade65db730c02046761e30325490cf4a0ed308 /libavcodec/jpeg2000dec.c | |
parent | 8e50bd61e4ff97bd7fc6cbd7ec4ca514e17a70c4 (diff) | |
download | ffmpeg-3caecf7ce8e9642cd17942e61f12803bbab52ad2.tar.gz |
avcodec: do not use init_static_data on some codecs
They don't modify AVCodec, no needs to call it at register. They will be
wasteful if these codecs are unused. Instead, call static data initialization
at codecs' init.
Benchmark:
old: 51281340 decicycles in avcodec_register_all, 1 runs, 0 skips
new: 6738960 decicycles in avcodec_register_all, 1 runs, 0 skips
Reviewed-by: wm4 <nfxjfg@googlemail.com>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libavcodec/jpeg2000dec.c')
-rw-r--r-- | libavcodec/jpeg2000dec.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 01fe4b3949..4cf8a2880c 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -34,6 +34,7 @@ #include "libavutil/imgutils.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "bytestream.h" #include "internal.h" @@ -2142,10 +2143,18 @@ static int jp2_find_codestream(Jpeg2000DecoderContext *s) return 0; } +static av_cold void jpeg2000_init_static_data(void) +{ + ff_jpeg2000_init_tier1_luts(); + ff_mqc_init_context_tables(); +} + static av_cold int jpeg2000_decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; Jpeg2000DecoderContext *s = avctx->priv_data; + ff_thread_once(&init_static_once, jpeg2000_init_static_data); ff_jpeg2000dsp_init(&s->dsp); return 0; @@ -2223,12 +2232,6 @@ end: return ret; } -static av_cold void jpeg2000_init_static_data(AVCodec *codec) -{ - ff_jpeg2000_init_tier1_luts(); - ff_mqc_init_context_tables(); -} - #define OFFSET(x) offsetof(Jpeg2000DecoderContext, x) #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM @@ -2252,7 +2255,6 @@ AVCodec ff_jpeg2000_decoder = { .id = AV_CODEC_ID_JPEG2000, .capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_DR1, .priv_data_size = sizeof(Jpeg2000DecoderContext), - .init_static_data = jpeg2000_init_static_data, .init = jpeg2000_decode_init, .decode = jpeg2000_decode_frame, .priv_class = &jpeg2000_class, |