\r
//Build filter graph\r
HRESULT hres;\r
-\r
+//So this is the real code, this prevents the feeder from calling noexisting objects!\r
+ WaitForSingleObject(filtermutex,INFINITE);\r
if (hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,\r
IID_IGraphBuilder,(void**)&dsgraphbuilder)!=S_OK) {\r
+ ReleaseMutex(filtermutex);\r
return 0;\r
}\r
#ifdef DS_DEBUG\r
#endif\r
//This is just a try to see if building the graph works\r
// dsgraphbuilder->RenderFile(L"D:\\Projekte\\VTP Client\\test.mpa" ,NULL);\r
- //So this is the real code, this prevents the feeder from calling noexisting objects!\r
- WaitForSingleObject(filtermutex,INFINITE);\r
+ \r
firstsynched=false;\r
sourcefilter=new DsSourceFilter(); //Creating our Source filter for pushing Data\r
// to DirectShow\r
+ sourcefilter->AddRef();\r
if (hres=dsgraphbuilder->AddFilter(sourcefilter,L"Vomp Win Source Filter")!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed adding Vomp Source Filter!");\r
+ ReleaseMutex(filtermutex);\r
CleanupDS();\r
- ReleaseMutex(filtermutex);\r
return 0;\r
}\r
//if (audioon) {\r
- if (hres=dsgraphbuilder->Render(sourcefilter->GetPin(0)/*audio*/)!=S_OK) {\r
+ if (hres=dsgraphbuilder->Render((IPin*)sourcefilter->GetAudioPin()/*audio*/)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed rendering audio!");\r
+ ReleaseMutex(filtermutex);\r
CleanupDS();\r
- ReleaseMutex(filtermutex);\r
return 0;\r
}\r
//}\r
if (hres=CoCreateInstance(CLSID_VideoMixingRenderer9,0,\r
CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void**) &dsvmrrenderer)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN ,"Failed creating VMR9 renderer!");\r
+ ReleaseMutex(filtermutex);\r
CleanupDS();\r
- ReleaseMutex(filtermutex);\r
+ \r
}\r
/*VMR 9 stuff**/\r
if (hres=dsgraphbuilder->AddFilter(dsvmrrenderer,L"VMR9")!=S_OK) {\r
+ ReleaseMutex(filtermutex);\r
CleanupDS();\r
Log::getInstance()->log("VideoWin", Log::WARN ,"Failed adding VMR9 renderer!");\r
- ReleaseMutex(filtermutex);\r
+ \r
return 0;\r
}\r
IVMRFilterConfig9* vmrfilconfig;\r
if (dsvmrrenderer->QueryInterface(IID_IVMRFilterConfig9,(void**)&vmrfilconfig)!=S_OK) {\r
- CleanupDS();\r
- Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Filterconfig interface!");\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
+ Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Filterconfig interface!");\r
return 0;\r
}\r
vmrfilconfig->SetRenderingMode(VMR9Mode_Renderless);\r
vmrfilconfig->Release();\r
\r
if (dsvmrrenderer->QueryInterface(IID_IVMRSurfaceAllocatorNotify9,(void**)& dsvmrsurfnotify)!=S_OK) {\r
- CleanupDS();\r
- Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Surface Allocator interface!");\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
+ Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Surface Allocator interface!");\r
+ \r
return 0;\r
}\r
allocatorvmr=new DsAllocator();\r
IFilterGraph2*fg2=NULL;\r
if (dsgraphbuilder->QueryInterface(IID_IFilterGraph2,(void**)&fg2)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed querying for FilterGraph2 Interface!");\r
- CleanupDS();\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
- if (hres=fg2->RenderEx(sourcefilter->GetPin(1)/*video*/,\r
+ if (hres=fg2->RenderEx((IPin*)sourcefilter->GetVideoPin()/*video*/,\r
AM_RENDEREX_RENDERTOEXISTINGRENDERERS,NULL)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed rendering Video!");\r
fg2->Release();\r
- CleanupDS();\r
- ReleaseMutex(filtermutex);\r
+ ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
fg2->Release();\r
}\r
\r
dsgraphbuilder->QueryInterface(IID_IMediaFilter,(void **) &dsmediafilter);\r
- dsmediafilter->SetSyncSource(dsrefclock);\r
+ HRESULT hresdeb=dsmediafilter->SetSyncSource(dsrefclock);\r
\r
dsgraphbuilder->QueryInterface(IID_IMediaControl,(void **) &dsmediacontrol);\r
dsgraphbuilder->QueryInterface(IID_IBasicAudio,(void **) &dsbasicaudio); \r
\r
- dsmediacontrol->Run();\r
+ hresdeb=dsmediacontrol->Run();\r
iframemode=false;//exit iframe mode\r
ReleaseMutex(filtermutex);\r
return 1;\r
{\r
if (!initted) return 0;\r
CleanupDS();\r
+ //So this is the real code, this prevents the feeder from calling noexisting objects!\r
+ WaitForSingleObject(filtermutex,INFINITE);\r
iframemode=true;//enter iframe mode\r
//Build filter graph\r
HRESULT hres;\r
if (hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,\r
IID_IGraphBuilder,(void**)&dsgraphbuilder)!=S_OK) {\r
+ ReleaseMutex(filtermutex);\r
return 0;\r
}\r
#ifdef DS_DEBUG\r
AddToRot(dsgraphbuilder,&graphidentifier);\r
#endif\r
- //So this is the real code, this prevents the feeder from calling noexisting objects!\r
- WaitForSingleObject(filtermutex,INFINITE);\r
+ \r
//firstsynched=false;\r
sourcefilter=new DsSourceFilter(); //Creating our Source filter for pushing Data\r
// to DirectShow\r
+ sourcefilter->AddRef();\r
if (hres=dsgraphbuilder->AddFilter(sourcefilter,L"Vomp Win Source Filter")!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed adding Vomp Source Filter!");\r
+ ReleaseMutex(filtermutex); \r
CleanupDS();\r
- ReleaseMutex(filtermutex);\r
return 0;\r
}\r
#ifdef DO_VIDEO\r
if (hres=CoCreateInstance(CLSID_VideoMixingRenderer9,0,\r
CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void**) &dsvmrrenderer)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN ,"Failed creating VMR9 renderer!");\r
- CleanupDS();\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
/*VMR 9 stuff**/\r
if (hres=dsgraphbuilder->AddFilter(dsvmrrenderer,L"VMR9")!=S_OK) {\r
- CleanupDS();\r
Log::getInstance()->log("VideoWin", Log::WARN ,"Failed adding VMR9 renderer!");\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
IVMRFilterConfig9* vmrfilconfig;\r
if (dsvmrrenderer->QueryInterface(IID_IVMRFilterConfig9,(void**)&vmrfilconfig)!=S_OK) {\r
- CleanupDS();\r
- Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Filterconfig interface!");\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
+ Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Filterconfig interface!");\r
+ \r
return 0;\r
}\r
vmrfilconfig->SetRenderingMode(VMR9Mode_Renderless);\r
vmrfilconfig->Release();\r
\r
- if (dsvmrrenderer->QueryInterface(IID_IVMRSurfaceAllocatorNotify9,(void**)& dsvmrsurfnotify)!=S_OK) {\r
- CleanupDS();\r
+ if (dsvmrrenderer->QueryInterface(IID_IVMRSurfaceAllocatorNotify9,(void**)& dsvmrsurfnotify)!=S_OK) { \r
Log::getInstance()->log("VideoWin", Log::WARN ,"Failed getting VMR9 Surface Allocator interface!");\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
allocatorvmr=new DsAllocator();\r
IFilterGraph2*fg2=NULL;\r
if (dsgraphbuilder->QueryInterface(IID_IFilterGraph2,(void**)&fg2)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed querying for FilterGraph2 Interface!");\r
- CleanupDS();\r
ReleaseMutex(filtermutex);\r
+ CleanupDS();\r
return 0;\r
}\r
- if (hres=fg2->RenderEx(sourcefilter->GetPin(1)/*video*/,\r
+ if (hres=fg2->RenderEx((IPin*)sourcefilter->GetVideoPin()/*video*/,\r
AM_RENDEREX_RENDERTOEXISTINGRENDERERS,NULL)!=S_OK) {\r
Log::getInstance()->log("VideoWin", Log::WARN , "Failed rendering Video!");\r
fg2->Release();\r
+ ReleaseMutex(filtermutex);\r
CleanupDS();\r
- ReleaseMutex(filtermutex);\r
return 0;\r
}\r
fg2->Release();\r
int VideoWin::dspause()\r
{\r
if (!initted) return 0;\r
+ WaitForSingleObject(filtermutex,INFINITE);\r
if (dsmediacontrol) dsmediacontrol->Pause();\r
+ ReleaseMutex(filtermutex);\r
return 1;\r
}\r
\r
int VideoWin::dsunPause() // FIXME get rid - same as play!!\r
{//No on windows this is not the same, I don't get rid of!\r
if (!initted) return 0;\r
+ WaitForSingleObject(filtermutex,INFINITE);\r
if (dsmediacontrol) dsmediacontrol->Run();\r
+ ReleaseMutex(filtermutex);\r
+\r
return 1;\r
}\r
\r
#endif\r
dsgraphbuilder->Release();\r
dsgraphbuilder=NULL;\r
+ sourcefilter->Release();\r
sourcefilter=NULL; //The Graph Builder destroys our SourceFilter\r
}\r
ReleaseMutex(filtermutex);\r
{\r
/*First Check, if we have an audio sample*/\r
#ifdef DO_VIDEO\r
+ if (!videoon) {\r
+ *samplepos+=packet.length;\r
+ MILLISLEEP(0); //yet not implemented//bad idea\r
+ return packet.length;\r
+ }\r
/*First Check, if we have an audio sample*/\r
if (iframemode) {\r
samplepos=0;\r
UINT ms_length;\r
UINT ms_pos;\r
UINT haveToCopy;\r
+ \r
if (!getCurrentVideoMediaSample(&ms) || ms==NULL) {// get the current sample\r
samplepos=0;\r
MILLISLEEP(10);\r
IMediaSample* ms=NULL;\r
REFERENCE_TIME reftime1=0;\r
REFERENCE_TIME reftime2=0;\r
+ if (!videoon) return;\r
+\r
if (!getCurrentVideoMediaSample(&ms) || ms==NULL) {// get the current sample\r
MILLISLEEP(10);\r
return ;\r
DWORD ms_length;\r
ms->GetPointer(&ms_buf);\r
ms_length=ms->GetSize();\r
-\r
+ \r
/*First Check, if we have an video sample*/\r
DWORD read_pos = 0, write_pos = 0;\r
DWORD pattern, packet_length;\r
\r
#else\r
\r
- *samplepos+=packet.length;\r
+ // *samplepos+=packet.length;\r
MILLISLEEP(0); //yet not implemented//bad idea\r
- return packet.length;\r
+ return ;\r
#endif\r
}\r
\r