自己用directshow写的播放器 释放内存上好像有有关问题

自己用directshow写的播放器 释放内存上好像有问题
自己用directshow写的播放器 释放内存上好像有问题 每放一个电影占用内存都会增加4mb左右 不知道哪里没有释放掉 求高手看看。。。

///player.cpp

#include "CSampleGrabberCB.h"
#pragma comment(lib,"Strmiids.lib")
#define TIMERID 1
#define BUTTONNUM 7
#define SCROLLRANGE 500
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent=NULL;
IVideoWindow *pVidWin = NULL;
IBasicAudio *pAudio=NULL;
IMediaSeeking *pSeeking=NULL;

IBaseFilter *pGrabberF=NULL;
ISampleGrabber *pGrabber=NULL;


const int InfoWindowWidth=400;
const int InfoWindowHeight=600;
const int volumes[] = {-10000,-6418,-6147,-6000,
-5892,-4826,-4647,-4540
-4477, -4162,-3876, -3614, -3500,
-3492,-3374,-3261,-3100,-3153,-3048,-2947,-2849,-2755,-2700,
-2663,-2575,-2520,-2489,-2406,-2325,-2280,-2246,-2170,-2095,-2050,
-2023,-1952,-1900, -1884,-1834, -1820, -1800,-1780, -1757,-1695,-1636,-1579,
-1521,-1500,-1464,-1436,-1420, -1408,-1353,-1299,-1246,-1195,-1144,
-1096,-1060, -1049,-1020,-1003,-957,-912,-868, -800, -774,-784, -760, -744,
-705,-667,-630,-610,-594,-570 ,-558,-525,-493,-462,-432,-403,
-375,-348,-322,-297,-285, -273,-250,-228,-207,-187,-176, -168,
-150,-102,-75,-19,-10,0,0};

TCHAR *content[]={TEXT("打开"),TEXT("播放"),TEXT("暂停"),TEXT("停止"),TEXT("增大音量"),TEXT("减小音量"),TEXT("截图")};
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
DWORD dwRegister;

void RemoveFromRot(DWORD pdwRegister);
HRESULT AddToRot(IUnknown *pUnkGraph,DWORD *pdwRegister);
BOOL HasVideo(IGraphBuilder *pGraph);
//获取音量
int myGetVolume()
{
int i;
if (pAudio == NULL) return 0;
long volume = 0;
pAudio->get_Volume(&volume);
  for (i=0;i<100;i++)
if (volumes[i] >= volume) 

volume = volumes[i]; 
break; 
}
return i;
}

//设置音量
void mySetVolume(int value)
{
int nowVolume=myGetVolume()+value;
nowVolume=nowVolume>100?100:nowVolume;
nowVolume=nowVolume<0?0:nowVolume;
pAudio->put_Volume(volumes[nowVolume]);
}

//初始化接口
void myInit()
{
LRESULT hr;
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
MessageBox(NULL,TEXT("ERROR - Could not create the Filter Graph Manager."),TEXT(""),0);
return ;
}
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
pGraph->QueryInterface(IID_IBasicAudio,(void **)&pAudio);
pGraph->QueryInterface(IID_IMediaSeeking,(void **)&pSeeking);

hr=CoCreateInstance(CLSID_SampleGrabber,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void **)&pGrabberF);
if (FAILED(hr))
{
MessageBox(NULL,TEXT("ERROR - Could not create the SampleGrabber."),TEXT(""),0);
return ;
}
pGraph->AddFilter(pGrabberF,L"Sample Grabber");

hr=pGrabberF->QueryInterface(IID_ISampleGrabber,(void **)&pGrabber);
if (FAILED(hr))
{