- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have a .NET test app testing our C++/CLI library that calls the Media Foundation API to play videos in a loop using the IMFSequencerSource. The library is called by a very simple .NET WPF app with a System.Windows.Forms.PictureBox within a WindowsFormHost element supplying the window handle for video rendering.
I am profiling this little app using RedGate's Memory Profiler. My first snapshot shows igdvidproc32 using only 324KB. After 6hrs of video looping it has jumped to 57MB and after 12hrs is now 144MB.
Other units running nVidia ION (ASUS AT5IONT-I) and Intel GMA950 (nexcom) show no such large increases in private bytes, even over longer periods like 24hrs.
Is it possible this is a coding error on our part? How can I tell? I can provide the example app and code demonstrating the leak to Intel engineers on request and the RedGate Memory Profiler results.
Attached are performance counters from the Intel GMA3650 unit from an earlier test:
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What is the driver version you are using? These are the latest ones:
- https://downloadcenter.intel.com/download/23473/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit https://downloadcenter.intel.com/download/23473/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit
- https://downloadcenter.intel.com/download/22633/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit https://downloadcenter.intel.com/download/22633/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit
- https://downloadcenter.intel.com/download/22479/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit https://downloadcenter.intel.com/download/22479/Intel-Graphics-Media-Accelerator-3600-Series-for-Windows-7-32-bit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, yes I installed the latest driver version 8.0.4.1.1096 as part of my testing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Running DebugDiag on this sample program shows after an 8 hour test:
\igdvidproc32.dll is responsible for 92.09 MBytes worth of outstanding allocations. The following are the top 2 memory consuming functions:
igdvidproc32+1066: 92.09 MBytes worth of outstanding allocations.
Top 22 modules by allocation count
igdvidproc32 1,724,075 allocation(s)
mfplat 1,650 allocation(s)
ntdll 236 allocation(s)
Function details
Function igdvidproc32+1066
Source Line
Allocation type C/C++ runtime allocation(s)
Allocation Count 1724075 allocation(s)
Allocation Size 92.09 MBytes
Leak Probability 100%
Call stack sample 1
Address 0x00003912
Allocation Time 00:05:02 since tracking started
Allocation Size 56 Bytes
igdvidproc32+1066 igdvidproc32!VidProcOpenAdapter+53ff
gdi32!NtGdiDdDDICreateSynchronizationObject+c
gdi32!D3DKMTCreateSynchronizationObject+59 gdi32!NtGdiDdDDICreateSynchronizationObject
igdumd32+438dc
igdumd32!OpenAdapter+383d
d3d9!VideoProcessBltLH+19e
d3d9!CVideoProcessDevice::VideoProcessBlt+12c
dxva2!CVideoProcessorDevice::VideoProcessBlt+34f
evr!CMFVideoMixer9::ProcessVideo+87e
evr!CMFVideoMixer::MFTProcessOutput+2d8
evr!CMFVideoMixer9::MFTProcessOutput+2a evr!CMFVideoMixer::MFTProcessOutput
evr!CMFVideoPresenter::ProcessOutput+25e
evr!CMFVideoPresenter::ProcessOutputLoop+16
evr!CMFVideoPresenter::ProcessMessage+b7 evr!CMFVideoPresenter::ProcessOutputLoop
mf!MFCreateVideoRenderer+dfd
mf!MFCreateMediaSession+59d3
mf!MFCreateMediaSession+70c4
mfplat!CCompletionPort::InvokeCallback+12
mfplat!CWorkQueue::CThread::ThreadMain+a5
mfplat!CWorkQueue::CThread::ThreadFunc+d
msvcrt!_endthreadex+44
msvcrt!_endthreadex+ce
kernel32!BaseThreadInitThunk+e
ntdll!__RtlUserThreadStart+70
ntdll!_RtlUserThreadStart+1b ntdll!__RtlUserThreadStart
msvcrt!_endthreadex+6f
I've isolated the leak to this function call in my code:
HRESULT CPlayer::CallCurrentImage() {
DWORD dwBitmapSize = 0;
BYTE* pDataBuffer = NULL;
LONGLONG llTimeStamp = 0;
BITMAPINFOHEADER bmpInfo = { 0 };
bmpInfo.biSize = sizeof(BITMAPINFOHEADER);
HRESULT hr = m_pVideoDisplay->GetCurrentImage(&bmpInfo, &pDataBuffer, &dwBitmapSize, &llTimeStamp);
CoTaskMemFree(pDataBuffer);
return hr;
}
This code frees memory as noted in https://msdn.microsoft.com/en-us/library/windows/desktop/ms695342%28v=vs.85%29.aspx IMFVideoDisplayControl::GetCurrentImage method (Windows). The leak is present with this function call, and not present without it.I have to conclude the Intel driver contains a leak and this is causing my software (video display) to crash if run for extended periods.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page