示例#1
0
/* Input and output sampling rate are at most 48000 Hz  */
int silk_resampler(silk_resampler_state_struct * S,	/* I/O  Resampler state                                             */
			int16_t out[],	/* O    Output signal                                               */
			const int16_t in[],	/* I    Input signal                                                */
			int32_t inLen	/* I    Number of input samples                                     */
    )
{
	int nSamples;

	/* Need at least 1 ms of input data */
	assert(inLen >= S->Fs_in_kHz);
	/* Delay can't exceed the 1 ms of buffering */
	assert(S->inputDelay <= S->Fs_in_kHz);

	nSamples = S->Fs_in_kHz - S->inputDelay;

	/* Copy to delay buffer */
	memcpy(&S->delayBuf[S->inputDelay], in,
		    nSamples * sizeof(int16_t));

	switch (S->resampler_function) {
	case USE_silk_resampler_private_up2_HQ_wrapper:
		silk_resampler_private_up2_HQ_wrapper(S, out, S->delayBuf,
						      S->Fs_in_kHz);
		silk_resampler_private_up2_HQ_wrapper(S, &out[S->Fs_out_kHz],
						      &in[nSamples],
						      inLen - S->Fs_in_kHz);
		break;
	case USE_silk_resampler_private_IIR_FIR:
		silk_resampler_private_IIR_FIR(S, out, S->delayBuf,
					       S->Fs_in_kHz);
		silk_resampler_private_IIR_FIR(S, &out[S->Fs_out_kHz],
					       &in[nSamples],
					       inLen - S->Fs_in_kHz);
		break;
	case USE_silk_resampler_private_down_FIR:
		silk_resampler_private_down_FIR(S, out, S->delayBuf,
						S->Fs_in_kHz);
		silk_resampler_private_down_FIR(S, &out[S->Fs_out_kHz],
						&in[nSamples],
						inLen - S->Fs_in_kHz);
		break;
	default:
		memcpy(out, S->delayBuf,
			    S->Fs_in_kHz * sizeof(int16_t));
		memcpy(&out[S->Fs_out_kHz], &in[nSamples],
			    (inLen - S->Fs_in_kHz) * sizeof(int16_t));
	}

	/* Copy to delay buffer */
	memcpy(S->delayBuf, &in[inLen - S->inputDelay],
		    S->inputDelay * sizeof(int16_t));

	return 0;
}
示例#2
0
/* Resampler: convert from one sampling rate to another */
opus_int silk_resampler(
    silk_resampler_state_struct *S,                 /* I/O   Resampler state                                            */
    opus_int16                  out[],              /* O     Output signal                                              */
    const opus_int16            in[],               /* I     Input signal                                               */
    opus_int32                  inLen               /* I     Number of input samples                                    */
)
{
    /* Input and output sampling rate are at most 48000 Hz */
    switch( S->resampler_function ) {
    case USE_silk_resampler_private_up2_HQ_wrapper:
        silk_resampler_private_up2_HQ_wrapper( S, out, in, inLen );
        break;
    case USE_silk_resampler_private_IIR_FIR:
        silk_resampler_private_IIR_FIR( S, out, in, inLen );
        break;
    case USE_silk_resampler_private_down_FIR:
        silk_resampler_private_down_FIR( S, out, in, inLen );
        break;
    default:
        silk_memcpy( out, in, inLen * sizeof( opus_int16 ) );
    }
    return 0;
}