ffmpeg重采样补偿解释

        if (wanted_nb_samples != af->frame->nb_samples) {
            int sample_delta = (wanted_nb_samples - af->frame->nb_samples) * is->audio_tgt.freq
                    / af->frame->sample_rate;
            int compensation_distance = wanted_nb_samples * is->audio_tgt.freq / af->frame->sample_rate;
            // swr_set_compensation
            if (swr_set_compensation(is->swr_ctx,
                 sample_delta,
                    compensation_distance) < 0) {
                av_log(NULL, AV_LOG_ERROR, "swr_set_compensation() failed\n");
                return -1;
            }
        }

这段代码是关于音频重采样过程中,如何处理输入和目标样本数不匹配的情况。具体来说,它是在音频重采样的过程中,检测到输入音频的样本数与目标样本数 (wanted_nb_samples) 不一致时,通过 swr_set_compensation 来进行补偿,以确保重采样后的音频数据能够更好地适配目标设备或目标格式。下面是详细的解释:

代码分解

if (wanted_nb_samples != af->frame->nb_samples) {
  • 这一行判断是否目标音频样本数(wanted_nb_samples)和当前音频帧中的样本数(af->frame->nb_samples)不一致。
  • wanted_nb_samples 是希望得到的样本数,可能是根据目标音频设备的要求或目标采样率计算的。
  • af->frame->nb_samples 是当前音频帧中的样本数。

如果这两个值不同,说明当前音频帧的样本数需要通过补偿或调整来匹配目标样本数。

计算补偿量

int sample_delta = (wanted_nb_samples - af->frame->nb_samples) * is->audio_tgt.freq / af->frame->sample_rate;
  • sample_delta 是计算需要进行的样本数差异的补偿量。
  • wanted_nb_samples - af->frame->nb_samples 是目标样本数与当前样本数的差值。
  • 乘上目标采样率 is->audio_tgt.freq,再除以当前音频的采样率 af->frame->sample_rate,目的是根据目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值