src/3rdparty/phonon/ds9/videorenderer_evr.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
--- a/src/3rdparty/phonon/ds9/videorenderer_evr.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/3rdparty/phonon/ds9/videorenderer_evr.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -43,14 +43,12 @@
         {
             //normally we should use IID_IMFGetService but this introduces another dependency
             //so here we simply define our own IId with the same value
+            ComPointer<T> ret;
             ComPointer<IMFGetService> getService(filter, IID_IMFGetService);
-            Q_ASSERT(getService);
-            T *ptr = 0;
-            HRESULT hr = getService->GetService(guidService, riid, reinterpret_cast<void **>(&ptr));
-            if (!SUCCEEDED(hr) || ptr == 0)
-                Q_ASSERT(!SUCCEEDED(hr) && ptr != 0);
-            ComPointer<T> service(ptr);
-            return service;
+            if (getService) {
+                getService->GetService(guidService, riid, reinterpret_cast<void**>(ret.pparam()));
+            }
+            return ret;
         }
 
         VideoRendererEVR::~VideoRendererEVR()
@@ -70,6 +68,10 @@
             }
 
             ComPointer<IMFVideoDisplayControl> filterControl = getService<IMFVideoDisplayControl>(m_filter, MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl);
+            if (!filterControl) {
+                m_filter = Filter(); //will release the interface
+                return;
+            }
 
             filterControl->SetVideoWindow(reinterpret_cast<HWND>(target->winId()));
             filterControl->SetAspectRatioMode(MFVideoARMode_None); // We're in control of the size