#include "mpc.h"
#include "mpcdata.h"
-av_cold void ff_mpc_init(void)
-{
- ff_mpa_synth_init_fixed(ff_mpa_synth_window_fixed);
-}
-
/**
* Process decoded Musepack data and produce PCM
*/
DECLARE_ALIGNED(16, int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT];
} MPCContext;
-void ff_mpc_init(void);
void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, int16_t **out, int channels);
#endif /* AVCODEC_MPC_H */
ff_bswapdsp_init(&c->bdsp);
ff_mpadsp_init(&c->mpadsp);
c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
- ff_mpc_init();
init_get_bits(&gb, buf, 128);
c->IS = get_bits1(&gb);
}
}
vlc_initialized = 1;
+ ff_mpa_synth_init_fixed();
return 0;
}
av_lfg_init(&c->rnd, 0xDEADBEEF);
ff_mpadsp_init(&c->mpadsp);
- ff_mpc_init();
-
init_get_bits(&gb, avctx->extradata, 16);
skip_bits(&gb, 3);//sample rate
&mpc8_q8_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
}
vlc_initialized = 1;
+ ff_mpa_synth_init_fixed();
return 0;
}
scale_factor_mult[i][2]);
}
- RENAME(ff_mpa_synth_init)(RENAME(ff_mpa_synth_window));
-
/* huffman decode tables */
offset = 0;
for (i = 1; i < 16; i++) {
csa_table[i][3] = ca - cs;
#endif
}
+ RENAME(ff_mpa_synth_init)();
}
static av_cold int decode_init(AVCodecContext * avctx)
void ff_mpadsp_init_mipsfpu(MPADSPContext *s);
void ff_mpadsp_init_mipsdsp(MPADSPContext *s);
-void ff_mpa_synth_init_float(float *window);
-void ff_mpa_synth_init_fixed(int32_t *window);
+void ff_mpa_synth_init_float(void);
+void ff_mpa_synth_init_fixed(void);
void ff_mpadsp_apply_window_float(float *synth_buf, float *window,
int *dither_state, float *samples,
#include "libavutil/attributes.h"
#include "libavutil/mem.h"
+#include "libavutil/thread.h"
#include "dct32.h"
#include "mathops.h"
#include "mpegaudiodsp.h"
*synth_buf_offset = offset;
}
-av_cold void RENAME(ff_mpa_synth_init)(MPA_INT *window)
+static av_cold void mpa_synth_init(MPA_INT *window)
{
int i, j;
window[512+128+16*i+j] = window[64*i+48-j];
}
+static av_cold void mpa_synth_window_init(void)
+{
+ mpa_synth_init(RENAME(ff_mpa_synth_window));
+}
+
+av_cold void RENAME(ff_mpa_synth_init)(void)
+{
+ static AVOnce init_static_once = AV_ONCE_INIT;
+ ff_thread_once(&init_static_once, mpa_synth_window_init);
+}
+
/* cos(pi*i/18) */
#define C1 FIXHR(0.98480775301220805936/2)
#define C2 FIXHR(0.93969262078590838405/2)
return;
qdm2_init_vlc();
- ff_mpa_synth_init_float(ff_mpa_synth_window_float);
softclip_table_init();
rnd_table_init();
init_noise_samples();
+ ff_mpa_synth_init_float();
+
done = 1;
}