[FFmpeg-devel] [PATCH] avcodec/atrac3: use AVCodec.init_static_data() to initialize static data
Paul B Mahol
onemda at gmail.com
Fri Jan 6 15:54:42 EET 2017
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...
More information about the ffmpeg-devel
mailing list