in FFmpegInterop/Source/UncompressedVideoSampleProvider.cpp [45:88]
HRESULT UncompressedVideoSampleProvider::AllocateResources()
{
HRESULT hr = S_OK;
hr = UncompressedSampleProvider::AllocateResources();
if (SUCCEEDED(hr))
{
// Setup software scaler to convert any decoder pixel format (e.g. YUV420P) to NV12 that is supported in Windows & Windows Phone MediaElement
m_pSwsCtx = sws_getContext(
m_pAvCodecCtx->width,
m_pAvCodecCtx->height,
m_pAvCodecCtx->pix_fmt,
m_pAvCodecCtx->width,
m_pAvCodecCtx->height,
AV_PIX_FMT_NV12,
SWS_BICUBIC,
NULL,
NULL,
NULL);
if (m_pSwsCtx == nullptr)
{
hr = E_OUTOFMEMORY;
}
}
if (SUCCEEDED(hr))
{
m_pAvFrame = av_frame_alloc();
if (m_pAvFrame == nullptr)
{
hr = E_OUTOFMEMORY;
}
}
if (SUCCEEDED(hr))
{
if (av_image_alloc(m_rgVideoBufferData, m_rgVideoBufferLineSize, m_pAvCodecCtx->width, m_pAvCodecCtx->height, AV_PIX_FMT_NV12, 1) < 0)
{
hr = E_FAIL;
}
}
return hr;
}