Lines Matching refs:ctx
262 static av_cold void lame_window_init(AacPsyContext *ctx, AVCodecContext *avctx)
267 AacPsyChannel *pch = &ctx->ch[i];
301 static av_cold int psy_3gpp_init(FFPsyContext *ctx) {
306 int chan_bitrate = ctx->avctx->bit_rate / ((ctx->avctx->flags & AV_CODEC_FLAG_QSCALE) ? 2.0f : ctx->avctx->ch_layout.nb_channels);
308 const int bandwidth = ctx->cutoff ? ctx->cutoff : AAC_CUTOFF(ctx->avctx);
314 ctx->model_priv_data = av_mallocz(sizeof(AacPsyContext));
315 if (!ctx->model_priv_data)
317 pctx = ctx->model_priv_data;
318 pctx->global_quality = (ctx->avctx->global_quality ? ctx->avctx->global_quality : 120) * 0.01f;
320 if (ctx->avctx->flags & AV_CODEC_FLAG_QSCALE) {
322 chan_bitrate = (int)(chan_bitrate / 120.0 * (ctx->avctx->global_quality ? ctx->avctx->global_quality : 120));
326 pctx->frame_bits = FFMIN(2560, chan_bitrate * AAC_BLOCK_SIZE_LONG / ctx->avctx->sample_rate);
327 pctx->pe.min = 8.0f * AAC_BLOCK_SIZE_LONG * bandwidth / (ctx->avctx->sample_rate * 2.0f);
328 pctx->pe.max = 12.0f * AAC_BLOCK_SIZE_LONG * bandwidth / (ctx->avctx->sample_rate * 2.0f);
329 ctx->bitres.size = 6144 - pctx->frame_bits;
330 ctx->bitres.size -= ctx->bitres.size % 8;
331 pctx->fill_level = ctx->bitres.size;
335 const uint8_t *band_sizes = ctx->bands[j];
336 float line_to_frequency = ctx->avctx->sample_rate / (j ? 256.f : 2048.0f);
337 float avg_chan_bits = chan_bitrate * (j ? 128.0f : 1024.0f) / ctx->avctx->sample_rate;
346 for (g = 0; g < ctx->num_bands[j]; g++) {
352 for (g = 0; g < ctx->num_bands[j] - 1; g++) {
364 for (g = 0; g < ctx->num_bands[j]; g++) {
373 pctx->ch = av_calloc(ctx->avctx->ch_layout.nb_channels, sizeof(*pctx->ch));
375 av_freep(&ctx->model_priv_data);
379 lame_window_init(pctx, ctx->avctx);
408 static av_unused FFPsyWindowInfo psy_3gpp_window(FFPsyContext *ctx,
414 int br = ((AacPsyContext*)ctx->model_priv_data)->chan_bitrate;
416 AacPsyContext *pctx = (AacPsyContext*) ctx->model_priv_data;
494 static int calc_bit_demand(AacPsyContext *ctx, float pe, int bits, int size,
505 ctx->fill_level += ctx->frame_bits - bits;
506 ctx->fill_level = av_clip(ctx->fill_level, 0, size);
507 fill_level = av_clipf((float)ctx->fill_level / size, clip_low, clip_high);
508 clipped_pe = av_clipf(pe, ctx->pe.min, ctx->pe.max);
519 bit_factor = 1.0f - bit_save + ((bit_spend - bit_save) / (ctx->pe.max - ctx->pe.min)) * (clipped_pe - ctx->pe.min);
524 ctx->pe.max = FFMAX(pe, ctx->pe.max);
525 forgetful_min_pe = ((ctx->pe.min * PSY_PE_FORGET_SLOPE)
526 + FFMAX(ctx->pe.min, pe * (pe / ctx->pe.max))) / (PSY_PE_FORGET_SLOPE + 1);
527 ctx->pe.min = FFMIN(pe, forgetful_min_pe);
533 ctx->frame_bits * bit_factor,
534 FFMAX(ctx->frame_bits + size - bits, ctx->frame_bits / 8));
652 static void psy_3gpp_analyze_channel(FFPsyContext *ctx, int channel,
655 AacPsyContext *pctx = (AacPsyContext*) ctx->model_priv_data;
661 const int num_bands = ctx->num_bands[wi->num_windows == 8];
662 const uint8_t *band_sizes = ctx->bands[wi->num_windows == 8];
665 const int bandwidth = ctx->cutoff ? ctx->cutoff : AAC_CUTOFF(ctx->avctx);
666 const int cutoff = bandwidth * 2048 / wi->num_windows / ctx->avctx->sample_rate;
709 ctx->ch[channel].entropy = pe;
710 if (ctx->avctx->flags & AV_CODEC_FLAG_QSCALE) {
714 desired_pe = pe * (ctx->avctx->global_quality ? ctx->avctx->global_quality : 120) / (2 * 2.5f * 120.0f);
719 if (ctx->bitres.bits > 0) {
727 desired_bits = calc_bit_demand(pctx, pe, ctx->bitres.bits, ctx->bitres.size, wi->num_windows == 8);
734 if (ctx->bitres.bits > 0)
735 desired_pe *= av_clipf(pctx->pe.previous / PSY_3GPP_BITS_TO_PE(ctx->bitres.bits),
739 ctx->bitres.alloc = desired_bits;
836 FFPsyBand *psy_band = &ctx->ch[channel].psy_bands[w+g];
848 static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
852 FFPsyChannelGroup *group = ff_psy_find_group(ctx, channel);
855 psy_3gpp_analyze_channel(ctx, channel + ch, coeffs[ch], &wi[ch]);
866 static void lame_apply_block_type(AacPsyChannel *ctx, FFPsyWindowInfo *wi, int uselongblock)
870 if (ctx->next_window_seq == EIGHT_SHORT_SEQUENCE)
874 if (ctx->next_window_seq == ONLY_LONG_SEQUENCE)
875 ctx->next_window_seq = LONG_START_SEQUENCE;
876 if (ctx->next_window_seq == LONG_STOP_SEQUENCE)
877 ctx->next_window_seq = EIGHT_SHORT_SEQUENCE;
880 wi->window_type[0] = ctx->next_window_seq;
881 ctx->next_window_seq = blocktype;
884 static FFPsyWindowInfo psy_lame_window(FFPsyContext *ctx, const float *audio,
887 AacPsyContext *pctx = (AacPsyContext*) ctx->model_priv_data;