Lines Matching refs:ctx

120         AMRWBContext *ctx = &s->ch[ch];
122 av_lfg_init(&ctx->prng, 1);
124 ctx->excitation = &ctx->excitation_buf[AMRWB_P_DELAY_MAX + LP_ORDER + 1];
125 ctx->first_frame = 1;
128 ctx->isf_past_final[i] = isf_init[i] * (1.0f / (1 << 15));
131 ctx->prediction_error[i] = MIN_ENERGY;
133 ff_acelp_filter_init(&ctx->acelpf_ctx);
134 ff_acelp_vectors_init(&ctx->acelpv_ctx);
135 ff_celp_filter_init(&ctx->celpf_ctx);
136 ff_celp_math_init(&ctx->celpm_ctx);
146 * @param[in] ctx The Context
151 static int decode_mime_header(AMRWBContext *ctx, const uint8_t *buf)
154 ctx->fr_cur_mode = buf[0] >> 3 & 0x0F;
155 ctx->fr_quality = (buf[0] & 0x4) == 0x4;
325 * @param[in,out] ctx The context
329 static void decode_pitch_vector(AMRWBContext *ctx,
335 float *exc = ctx->excitation;
336 enum Mode mode = ctx->fr_cur_mode;
340 &ctx->base_pitch_lag, subframe, mode);
343 &ctx->base_pitch_lag, subframe);
345 ctx->pitch_lag_int = pitch_lag_int;
350 ctx->acelpf_ctx.acelp_interpolatef(exc,
359 memcpy(ctx->pitch_vector, exc, AMRWB_SFR_SIZE * sizeof(float));
362 ctx->pitch_vector[i] = 0.18 * exc[i - 1] + 0.64 * exc[i] +
364 memcpy(exc, ctx->pitch_vector, AMRWB_SFR_SIZE * sizeof(float));
587 * @param[in] ctx The context
592 static void pitch_sharpening(AMRWBContext *ctx, float *fixed_vector)
598 fixed_vector[i] -= fixed_vector[i - 1] * ctx->tilt_coef;
601 for (i = ctx->pitch_lag_int; i < AMRWB_SFR_SIZE; i++)
602 fixed_vector[i] += fixed_vector[i - ctx->pitch_lag_int] * 0.85;
610 * @param[in] ctx The context
616 CELPMContext *ctx)
618 double p_ener = (double) ctx->dot_productf(p_vector, p_vector,
621 double f_ener = (double) ctx->dot_productf(f_vector, f_vector,
632 * @param[in] ctx The context
638 static float *anti_sparseness(AMRWBContext *ctx,
643 if (ctx->fr_cur_mode > MODE_8k85) // no filtering in higher modes
646 if (ctx->pitch_gain[0] < 0.6) {
648 } else if (ctx->pitch_gain[0] < 0.9) {
654 if (ctx->fixed_gain[0] > 3.0 * ctx->fixed_gain[1]) {
661 if (ctx->pitch_gain[i] < 0.6)
667 if (ir_filter_nr > ctx->prev_ir_filter_nr + 1)
672 ctx->prev_ir_filter_nr = ir_filter_nr;
674 ir_filter_nr += (ctx->fr_cur_mode == MODE_8k85);
774 * @param[in] ctx Pointer to the AMRWBContext
781 static void synthesis(AMRWBContext *ctx, float *lpc, float *excitation,
785 ctx->acelpv_ctx.weighted_vector_sumf(excitation, ctx->pitch_vector, fixed_vector,
786 ctx->pitch_gain[0], fixed_gain, AMRWB_SFR_SIZE);
789 if (ctx->pitch_gain[0] > 0.5 && ctx->fr_cur_mode <= MODE_8k85) {
791 float energy = ctx->celpm_ctx.dot_productf(excitation, excitation,
796 float pitch_factor = 0.25 * ctx->pitch_gain[0] * ctx->pitch_gain[0];
799 excitation[i] += pitch_factor * ctx->pitch_vector[i];
805 ctx->celpf_ctx.celp_lp_synthesis_filterf(samples, lpc, excitation,
837 * @param[in] ctx The context
839 static void upsample_5_4(float *out, const float *in, int o_size, CELPMContext *ctx)
852 out[i] = ctx->dot_productf(in0 + int_part,
866 * @param[in] ctx The context
871 static float find_hb_gain(AMRWBContext *ctx, const float *synth,
878 if (ctx->fr_cur_mode == MODE_23k85)
881 tmp = ctx->celpm_ctx.dot_productf(synth, synth + 1, AMRWB_SFR_SIZE - 1);
884 tilt = tmp / ctx->celpm_ctx.dot_productf(synth, synth, AMRWB_SFR_SIZE);
896 * @param[in] ctx The context
901 static void scaled_hb_excitation(AMRWBContext *ctx, float *hb_exc,
905 float energy = ctx->celpm_ctx.dot_productf(synth_exc, synth_exc,
910 hb_exc[i] = 32768.0 - (uint16_t) av_lfg_get(&ctx->prng);
1019 * @param[in] ctx The context
1026 static void hb_synthesis(AMRWBContext *ctx, int subframe, float *samples,
1030 enum Mode mode = ctx->fr_cur_mode;
1036 ctx->acelpv_ctx.weighted_vector_sumf(e_isf, isf_past, isf, isfp_inter[subframe],
1047 lpc_weighting(hb_lpc, ctx->lp_coef[subframe], 0.6, LP_ORDER);
1050 ctx->celpf_ctx.celp_lp_synthesis_filterf(samples, hb_lpc, exc, AMRWB_SFR_SIZE_16k,
1089 static void update_sub_state(AMRWBContext *ctx)
1091 memmove(&ctx->excitation_buf[0], &ctx->excitation_buf[AMRWB_SFR_SIZE],
1094 memmove(&ctx->pitch_gain[1], &ctx->pitch_gain[0], 5 * sizeof(float));
1095 memmove(&ctx->fixed_gain[1], &ctx->fixed_gain[0], 1 * sizeof(float));
1097 memmove(&ctx->samples_az[0], &ctx->samples_az[AMRWB_SFR_SIZE],
1099 memmove(&ctx->samples_up[0], &ctx->samples_up[AMRWB_SFR_SIZE],
1101 memmove(&ctx->samples_hb[0], &ctx->samples_hb[AMRWB_SFR_SIZE_16k],
1119 AMRWBContext *ctx = &s->ch[ch];
1120 AMRWBFrame *cf = &ctx->frame;
1133 header_size = decode_mime_header(ctx, buf);
1134 expected_fr_size = ((cf_sizes_wb[ctx->fr_cur_mode] + 7) >> 3) + 1;
1136 if (!ctx->fr_quality)
1139 if (ctx->fr_cur_mode == NO_DATA || !ctx->fr_quality) {
1147 if (ctx->fr_cur_mode > MODE_SID) {
1149 "Invalid mode %d\n", ctx->fr_cur_mode);
1160 if (ctx->fr_cur_mode == MODE_SID) { /* Comfort noise frame */
1165 ff_amr_bit_reorder((uint16_t *) &ctx->frame, sizeof(AMRWBFrame),
1166 buf + header_size, amr_bit_orderings_by_mode[ctx->fr_cur_mode]);
1169 if (ctx->fr_cur_mode == MODE_6k60) {
1170 decode_isf_indices_36b(cf->isp_id, ctx->isf_cur);
1172 decode_isf_indices_46b(cf->isp_id, ctx->isf_cur);
1175 isf_add_mean_and_past(ctx->isf_cur, ctx->isf_q_past);
1176 ff_set_min_dist_lsf(ctx->isf_cur, MIN_ISF_SPACING, LP_ORDER - 1);
1178 stab_fac = stability_factor(ctx->isf_cur, ctx->isf_past_final);
1180 ctx->isf_cur[LP_ORDER - 1] *= 2.0;
1181 ff_acelp_lsf2lspd(ctx->isp[3], ctx->isf_cur, LP_ORDER);
1184 if (ctx->first_frame) {
1185 ctx->first_frame = 0;
1186 memcpy(ctx->isp_sub4_past, ctx->isp[3], LP_ORDER * sizeof(double));
1188 interpolate_isp(ctx->isp, ctx->isp_sub4_past);
1191 ff_amrwb_lsp2lpc(ctx->isp[sub], ctx->lp_coef[sub], LP_ORDER);
1198 decode_pitch_vector(ctx, cur_subframe, sub);
1200 decode_fixed_vector(ctx->fixed_vector, cur_subframe->pul_ih,
1201 cur_subframe->pul_il, ctx->fr_cur_mode);
1203 pitch_sharpening(ctx, ctx->fixed_vector);
1205 decode_gains(cur_subframe->vq_gain, ctx->fr_cur_mode,
1206 &fixed_gain_factor, &ctx->pitch_gain[0]);
1208 ctx->fixed_gain[0] =
1210 ctx->celpm_ctx.dot_productf(ctx->fixed_vector,
1211 ctx->fixed_vector,
1214 ctx->prediction_error,
1218 voice_fac = voice_factor(ctx->pitch_vector, ctx->pitch_gain[0],
1219 ctx->fixed_vector, ctx->fixed_gain[0],
1220 &ctx->celpm_ctx);
1221 ctx->tilt_coef = voice_fac * 0.25 + 0.25;
1225 ctx->excitation[i] *= ctx->pitch_gain[0];
1226 ctx->excitation[i] += ctx->fixed_gain[0] * ctx->fixed_vector[i];
1227 ctx->excitation[i] = truncf(ctx->excitation[i]);
1231 synth_fixed_gain = noise_enhancer(ctx->fixed_gain[0], &ctx->prev_tr_gain,
1234 synth_fixed_vector = anti_sparseness(ctx, ctx->fixed_vector,
1239 synthesis(ctx, ctx->lp_coef[sub], synth_exc, synth_fixed_gain,
1240 synth_fixed_vector, &ctx->samples_az[LP_ORDER]);
1243 de_emphasis(&ctx->samples_up[UPS_MEM_SIZE],
1244 &ctx->samples_az[LP_ORDER], PREEMPH_FAC, ctx->demph_mem);
1246 ctx->acelpf_ctx.acelp_apply_order_2_transfer_function(&ctx->samples_up[UPS_MEM_SIZE],
1247 &ctx->samples_up[UPS_MEM_SIZE], hpf_zeros, hpf_31_poles,
1248 hpf_31_gain, ctx->hpf_31_mem, AMRWB_SFR_SIZE);
1250 upsample_5_4(sub_buf, &ctx->samples_up[UPS_FIR_SIZE],
1251 AMRWB_SFR_SIZE_16k, &ctx->celpm_ctx);
1254 ctx->acelpf_ctx.acelp_apply_order_2_transfer_function(hb_samples,
1255 &ctx->samples_up[UPS_MEM_SIZE], hpf_zeros, hpf_400_poles,
1256 hpf_400_gain, ctx->hpf_400_mem, AMRWB_SFR_SIZE);
1258 hb_gain = find_hb_gain(ctx, hb_samples,
1261 scaled_hb_excitation(ctx, hb_exc, synth_exc, hb_gain);
1263 hb_synthesis(ctx, sub, &ctx->samples_hb[LP_ORDER_16k],
1264 hb_exc, ctx->isf_cur, ctx->isf_past_final);
1267 hb_fir_filter(hb_samples, bpf_6_7_coef, ctx->bpf_6_7_mem,
1268 &ctx->samples_hb[LP_ORDER_16k]);
1270 if (ctx->fr_cur_mode == MODE_23k85)
1271 hb_fir_filter(hb_samples, lpf_7_coef, ctx->lpf_7_mem,
1279 update_sub_state(ctx);
1283 memcpy(ctx->isp_sub4_past, ctx->isp[3], LP_ORDER * sizeof(ctx->isp[3][0]));
1284 memcpy(ctx->isf_past_final, ctx->isf_cur, LP_ORDER * sizeof(float));