in FFmpegInterop/Source/UncompressedAudioSampleProvider.cpp [37:75]
HRESULT UncompressedAudioSampleProvider::AllocateResources()
{
HRESULT hr = S_OK;
hr = UncompressedSampleProvider::AllocateResources();
if (SUCCEEDED(hr))
{
// Set default channel layout when the value is unknown (0)
int64 inChannelLayout = m_pAvCodecCtx->channel_layout ? m_pAvCodecCtx->channel_layout : av_get_default_channel_layout(m_pAvCodecCtx->channels);
int64 outChannelLayout = av_get_default_channel_layout(m_pAvCodecCtx->channels);
// Set up resampler to convert any PCM format (e.g. AV_SAMPLE_FMT_FLTP) to AV_SAMPLE_FMT_S16 PCM format that is expected by Media Element.
// Additional logic can be added to avoid resampling PCM data that is already in AV_SAMPLE_FMT_S16_PCM.
m_pSwrCtx = swr_alloc_set_opts(
NULL,
outChannelLayout,
AV_SAMPLE_FMT_S16,
m_pAvCodecCtx->sample_rate,
inChannelLayout,
m_pAvCodecCtx->sample_fmt,
m_pAvCodecCtx->sample_rate,
0,
NULL);
if (!m_pSwrCtx)
{
hr = E_OUTOFMEMORY;
}
}
if (SUCCEEDED(hr))
{
if (swr_init(m_pSwrCtx) < 0)
{
hr = E_FAIL;
}
}
return hr;
}