[FFmpeg-devel] [PATCH] avcodec/atrac3: use AVCodec.init_static_data() to initialize static data

Michael Niedermayer michael at niedermayer.cc
Fri Jan 6 16:39:39 EET 2017


On Fri, Jan 06, 2017 at 02:54:42PM +0100, Paul B Mahol wrote:
> On 1/6/17, James Almer <jamrial at gmail.com> wrote:
> > On 1/6/2017 6:26 AM, Paul B Mahol wrote:
> >> On 1/6/17, James Almer <jamrial at gmail.com> wrote:
> >>> Signed-off-by: James Almer <jamrial at gmail.com>
> >>> ---
> >>>  libavcodec/atrac3.c | 8 ++------
> >>>  1 file changed, 2 insertions(+), 6 deletions(-)
> >>>
> >>> diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
> >>> index 256990b..208762d 100644
> >>> --- a/libavcodec/atrac3.c
> >>> +++ b/libavcodec/atrac3.c
> >>> @@ -771,7 +771,7 @@ static int atrac3_decode_frame(AVCodecContext *avctx,
> >>> void *data,
> >>>      return avctx->block_align;
> >>>  }
> >>>
> >>> -static av_cold void atrac3_init_static_data(void)
> >>> +static av_cold void atrac3_decode_init_static_data(AVCodec *codec)
> >>>  {
> >>>      int i;
> >>>
> >>> @@ -791,7 +791,6 @@ static av_cold void atrac3_init_static_data(void)
> >>>
> >>>  static av_cold int atrac3_decode_init(AVCodecContext *avctx)
> >>>  {
> >>> -    static int static_init_done;
> >>>      int i, ret;
> >>>      int version, delay, samples_per_frame, frame_factor;
> >>>      const uint8_t *edata_ptr = avctx->extradata;
> >>> @@ -802,10 +801,6 @@ static av_cold int atrac3_decode_init(AVCodecContext
> >>> *avctx)
> >>>          return AVERROR(EINVAL);
> >>>      }
> >>>
> >>> -    if (!static_init_done)
> >>> -        atrac3_init_static_data();
> >>> -    static_init_done = 1;
> >>> -
> >>>      /* Take care of the codec-specific extradata. */
> >>>      if (avctx->extradata_size == 14) {
> >>>          /* Parse the extradata, WAV format */
> >>> @@ -932,6 +927,7 @@ AVCodec ff_atrac3_decoder = {
> >>>      .id               = AV_CODEC_ID_ATRAC3,
> >>>      .priv_data_size   = sizeof(ATRAC3Context),
> >>>      .init             = atrac3_decode_init,
> >>> +    .init_static_data = atrac3_decode_init_static_data,
> >>>      .close            = atrac3_decode_close,
> >>>      .decode           = atrac3_decode_frame,
> >>>      .capabilities     = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1,
> >>> --
> >>> 2.10.2
> >>
> >> The issue is that init_static_data is called even when codec is never
> >> gonna be used.
> >> And it is called for both encoder and decoder.
> >>
> >> Do we really want such startup speed and memory overhead?
> >
> > Supposedly hardcoded tables builds were added to counter that, at least
> > partially.
> >
> > In any case it's not important for me, so this can be dropped if it has
> > no real advantages. I remember more than one email from people loathing
> > global state, so I assumed it would be proper to do it this way.
> 
> I have no real opinion on this, but maybe others do have?
> 

> We could add smarter init_static_data...

+1


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Frequently ignored answer#1 FFmpeg bugs should be sent to our bugtracker. User
questions about the command line tools should be sent to the ffmpeg-user ML.
And questions about how to use libav* should be sent to the libav-user ML.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170106/004d8f35/attachment.sig>


More information about the ffmpeg-devel mailing list