Ignore:
Timestamp:
Aug 30, 2014, 7:14:36 AM (8 years ago)
Author:
roman
Message:

Proper code sharing between Spy and external dependencies

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DirectShowSpy/RunPropertyBag.h

    r310 r312  
    5454                CComVariantArray vValue;
    5555                CRoArrayT<CComVariantArray> Array;
    56                 const CComQIPtr<IRunPropertyBagAware> pRunPropertyBagAware = pBaseFilterUnknown;
     56                const CComQIPtr<DIRECTSHOWSPY_NAMESPACE_PREFIX IRunPropertyBagAware> pRunPropertyBagAware = pBaseFilterUnknown;
    5757                CComQIPtr<IPropertyBag2> pPropertyBag2;
    5858                #pragma region Extension
     
    280280                return GetPropertyBagText(reinterpret_cast<CComVariantArray&>(vValue));
    281281        }
    282         static CString GetPropertyBagText(IUnknown* pBaseFilterUnknown, ISpy* pSpy = NULL)
    283         {
    284                 const CComQIPtr<IRunPropertyBagAware> pRunPropertyBagAware = pBaseFilterUnknown;
    285                 CComQIPtr<ISpy> pEffectiveSpy = pSpy;
    286                 if(!pEffectiveSpy && pRunPropertyBagAware)
    287                         pEffectiveSpy = _FilterGraphHelper::GetFilterGraph(CComQIPtr<IBaseFilter>(pBaseFilterUnknown));
    288                 if(pEffectiveSpy)
    289                 {
    290                         CComVariantArray vValue;
    291                         __C(pEffectiveSpy->ReadRunPropertyBag(pBaseFilterUnknown, ATL_VARIANT_TRUE, &vValue));
    292                         return GetPropertyBagText(vValue);
    293                 }
    294                 if(!pRunPropertyBagAware)
    295                         return _T("");
    296                 return GetPropertyBagText(ReadRunPropertyBag(pRunPropertyBagAware));
     282        __if_exists(ISpy)
     283        {
     284                static CString GetPropertyBagText(IUnknown* pBaseFilterUnknown, ISpy* pSpy = NULL)
     285                {
     286                        const CComQIPtr<IRunPropertyBagAware> pRunPropertyBagAware = pBaseFilterUnknown;
     287                        CComQIPtr<ISpy> pEffectiveSpy = pSpy;
     288                        if(!pEffectiveSpy && pRunPropertyBagAware)
     289                                pEffectiveSpy = _FilterGraphHelper::GetFilterGraph(CComQIPtr<IBaseFilter>(pBaseFilterUnknown));
     290                        if(pEffectiveSpy)
     291                        {
     292                                CComVariantArray vValue;
     293                                __C(pEffectiveSpy->ReadRunPropertyBag(pBaseFilterUnknown, ATL_VARIANT_TRUE, &vValue));
     294                                return GetPropertyBagText(vValue);
     295                        }
     296                        if(!pRunPropertyBagAware)
     297                                return _T("");
     298                        return GetPropertyBagText(ReadRunPropertyBag(pRunPropertyBagAware));
     299                }
    297300        }
    298301};
     302
     303#if !defined(DIRECTSHOWSPY)
     304
     305////////////////////////////////////////////////////////////
     306// CRunPropertyBagAwareT
     307
     308template <typename T>
     309class ATL_NO_VTABLE CRunPropertyBagAwareT :
     310        public IDispatchImpl<DIRECTSHOWSPY_NAMESPACE_PREFIX IRunPropertyBagAware, &__uuidof(DIRECTSHOWSPY_NAMESPACE_PREFIX IRunPropertyBagAware), &__uuidof(DIRECTSHOWSPY_NAMESPACE_PREFIX __AlaxInfoDirectShowSpy)>
     311{
     312public:
     313// CRunPropertyBagAwareT
     314
     315// AlaxInfoDirectShowSpy::IRunPropertyBagAware
     316        STDMETHOD(get_Value)(IUnknown** ppPropertyBagUnknown)
     317        {
     318                _Z4(atlTraceCOM, 4, _T("...\n"));
     319                _ATLTRY
     320                {
     321                        __D(ppPropertyBagUnknown, E_POINTER);
     322                        T* pT = static_cast<T*>(this);
     323                        *ppPropertyBagUnknown = (IPropertyBag*) pT->CreatePerformancePropertyBag().Detach();
     324                }
     325                _ATLCATCH(Exception)
     326                {
     327                        _C(Exception);
     328                }
     329                return S_OK;
     330        }
     331};
     332
     333#endif // !defined(DIRECTSHOWSPY)
Note: See TracChangeset for help on using the changeset viewer.