mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
atrac3plus: add support for GHA phase inversion.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
ac2dad9690
commit
d765e07322
@ -1724,11 +1724,7 @@ static int decode_tones_info(GetBitContext *gb, Atrac3pChanUnitCtx *ctx,
|
|||||||
if (num_channels == 2) {
|
if (num_channels == 2) {
|
||||||
get_subband_flags(gb, ctx->waves_info->tone_sharing, ctx->waves_info->num_tone_bands);
|
get_subband_flags(gb, ctx->waves_info->tone_sharing, ctx->waves_info->num_tone_bands);
|
||||||
get_subband_flags(gb, ctx->waves_info->tone_master, ctx->waves_info->num_tone_bands);
|
get_subband_flags(gb, ctx->waves_info->tone_master, ctx->waves_info->num_tone_bands);
|
||||||
if (get_subband_flags(gb, ctx->waves_info->phase_shift,
|
get_subband_flags(gb, ctx->waves_info->phase_shift, ctx->waves_info->num_tone_bands);
|
||||||
ctx->waves_info->num_tone_bands)) {
|
|
||||||
avpriv_report_missing_feature(avctx, "GHA Phase shifting");
|
|
||||||
return AVERROR_PATCHWELCOME;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->waves_info->tones_index = 0;
|
ctx->waves_info->tones_index = 0;
|
||||||
|
@ -116,6 +116,7 @@ av_cold void ff_atrac3p_init_wave_synth(void)
|
|||||||
* @param[in] synth_param ptr to common synthesis parameters
|
* @param[in] synth_param ptr to common synthesis parameters
|
||||||
* @param[in] waves_info parameters for each sine wave
|
* @param[in] waves_info parameters for each sine wave
|
||||||
* @param[in] envelope envelope data for all waves in a group
|
* @param[in] envelope envelope data for all waves in a group
|
||||||
|
* @param[in] fdsp ptr to floating-point DSP context
|
||||||
* @param[in] phase_shift flag indicates 180° phase shift
|
* @param[in] phase_shift flag indicates 180° phase shift
|
||||||
* @param[in] reg_offset region offset for trimming envelope data
|
* @param[in] reg_offset region offset for trimming envelope data
|
||||||
* @param[out] out receives sythesized data
|
* @param[out] out receives sythesized data
|
||||||
@ -123,6 +124,7 @@ av_cold void ff_atrac3p_init_wave_synth(void)
|
|||||||
static void waves_synth(Atrac3pWaveSynthParams *synth_param,
|
static void waves_synth(Atrac3pWaveSynthParams *synth_param,
|
||||||
Atrac3pWavesData *waves_info,
|
Atrac3pWavesData *waves_info,
|
||||||
Atrac3pWaveEnvelope *envelope,
|
Atrac3pWaveEnvelope *envelope,
|
||||||
|
AVFloatDSPContext *fdsp,
|
||||||
int phase_shift, int reg_offset, float *out)
|
int phase_shift, int reg_offset, float *out)
|
||||||
{
|
{
|
||||||
int i, wn, inc, pos;
|
int i, wn, inc, pos;
|
||||||
@ -146,6 +148,10 @@ static void waves_synth(Atrac3pWaveSynthParams *synth_param,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 180° phase shift if requested */
|
||||||
|
if (phase_shift)
|
||||||
|
fdsp->vector_fmul_scalar(out, out, -1.0f, 128);
|
||||||
|
|
||||||
/* fade in with steep Hann window if requested */
|
/* fade in with steep Hann window if requested */
|
||||||
if (envelope->has_start_point) {
|
if (envelope->has_start_point) {
|
||||||
pos = (envelope->start_pos << 2) - reg_offset;
|
pos = (envelope->start_pos << 2) - reg_offset;
|
||||||
@ -216,11 +222,11 @@ void ff_atrac3p_generate_tones(Atrac3pChanUnitCtx *ch_unit, AVFloatDSPContext *f
|
|||||||
/* synthesize waves for both overlapping regions */
|
/* synthesize waves for both overlapping regions */
|
||||||
if (tones_now->num_wavs && reg1_env_nonzero)
|
if (tones_now->num_wavs && reg1_env_nonzero)
|
||||||
waves_synth(ch_unit->waves_info_prev, tones_now, &tones_now->curr_env,
|
waves_synth(ch_unit->waves_info_prev, tones_now, &tones_now->curr_env,
|
||||||
ch_unit->waves_info_prev->phase_shift[sb] & ch_num,
|
fdsp, ch_unit->waves_info_prev->phase_shift[sb] & ch_num,
|
||||||
128, wavreg1);
|
128, wavreg1);
|
||||||
|
|
||||||
if (tones_next->num_wavs && reg2_env_nonzero)
|
if (tones_next->num_wavs && reg2_env_nonzero)
|
||||||
waves_synth(ch_unit->waves_info, tones_next, &tones_next->curr_env,
|
waves_synth(ch_unit->waves_info, tones_next, &tones_next->curr_env, fdsp,
|
||||||
ch_unit->waves_info->phase_shift[sb] & ch_num, 0, wavreg2);
|
ch_unit->waves_info->phase_shift[sb] & ch_num, 0, wavreg2);
|
||||||
|
|
||||||
/* Hann windowing for non-faded wave signals */
|
/* Hann windowing for non-faded wave signals */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user