Changeset 333


Ignore:
Timestamp:
Oct 5, 2014, 1:57:35 PM (7 years ago)
Author:
roman
Message:

Added filter graph runtime property bag and events through IRegisterServiceProvider

Location:
trunk/DirectShowSpy
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/DirectShowSpy/FilterGraphHelper.h

    r325 r333  
    16961696                                TYPE_FILTER,
    16971697                                TYPE_FILTERPROPERTYPAGE,
     1698                                TYPE_SERVICES,
     1699                                TYPE_SERVICEPROPERTYPAGE,
    16981700                                TYPE_MEMORYALLOCATOR,
    16991701                                TYPE_ACTION,
     
    17481750                                m_BaseFilterClassIdentifier(CLSID_NULL),
    17491751                                m_PropertyPageClassIdentifier(PropertyPageClassIdentifier),
     1752                                m_pPropertyPage(pPropertyPage),
     1753                                m_bSiteActivated(FALSE)
     1754                        {
     1755                                _A(pPropertyPage);
     1756                        }
     1757                        CData(IPropertyPage* pPropertyPage) :
     1758                                m_Type(TYPE_SERVICEPROPERTYPAGE),
     1759                                m_BaseFilterClassIdentifier(CLSID_NULL),
     1760                                m_PropertyPageClassIdentifier(CLSID_NULL),
    17501761                                m_pPropertyPage(pPropertyPage),
    17511762                                m_bSiteActivated(FALSE)
     
    17681779                        }
    17691780                };
     1781
     1782                ////////////////////////////////////////////////////
     1783                // CObjectPropertyPage
     1784
     1785                class CObjectPropertyPage
     1786                {
     1787                public:
     1788                        CComPtr<IUnknown> m_pUnknown;
     1789                        CComPtr<IPropertyPage> m_pPropertyPage;
     1790
     1791                public:
     1792                // CObjectPropertyPage
     1793                        CObjectPropertyPage()
     1794                        {
     1795                        }
     1796                        CObjectPropertyPage(IUnknown* pUnknown, IPropertyPage* pPropertyPage) :
     1797                                m_pUnknown(pUnknown),
     1798                                m_pPropertyPage(pPropertyPage)
     1799                        {
     1800                        }
     1801                };
     1802
     1803                typedef CRoArrayT<CObjectPropertyPage> CObjectPropertyPageArray;
    17701804
    17711805        private:
     
    18201854                        CWindowRedraw TreeViewRedraw(m_TreeView);
    18211855                        m_TreeView.DeleteAllItems();
     1856                        CTreeItem LastItem;
    18221857                        #pragma region Filter
    18231858                        CTreeItem FiltersItem = m_TreeView.InsertItem(NULL, NULL, CData(CData::TYPE_FILTERS), _T("Filters"));
     
    18761911                        m_FiltersItem.m_hTreeItem = FiltersItem;
    18771912                        m_FiltersItem.m_pTreeView = &m_TreeView;
     1913                        LastItem = FiltersItem;
    18781914                        #pragma endregion
    1879                         CTreeItem MemoryAllocatorItem = m_TreeView.InsertItem(NULL, FiltersItem, CData(CData::TYPE_MEMORYALLOCATOR), _T("Memory Allocators"));
     1915                        #pragma region Services
     1916                        _ATLTRY
     1917                        {
     1918                                CObjectPropertyPageArray ObjectPropertyPageArray;
     1919                                const CComQIPtr<IServiceProvider> pServiceProvider = m_Owner.m_pFilterGraph;
     1920                                if(pServiceProvider)
     1921                                {
     1922                                        #pragma region RunPropertyBagAware
     1923                                        CComPtr<IRunPropertyBagAware> pRunPropertyBagAware;
     1924                                        if(SUCCEEDED(pServiceProvider->QueryService<IRunPropertyBagAware>(__uuidof(IRunPropertyBagAware), &pRunPropertyBagAware)))
     1925                                                _ATLTRY
     1926                                                {
     1927                                                        _A(pRunPropertyBagAware);
     1928                                                        CObjectPtr<CRunPropertyBagPropertyPage> pRunPropertyBagPropertyPage;
     1929                                                        pRunPropertyBagPropertyPage.Construct();
     1930                                                        ObjectPropertyPageArray.Add(CObjectPropertyPage(pRunPropertyBagAware, pRunPropertyBagPropertyPage));
     1931                                                }
     1932                                                _ATLCATCHALL()
     1933                                                {
     1934                                                        _Z_EXCEPTION();
     1935                                                }
     1936                                        #pragma endregion
     1937                                        #pragma region RunEventAware
     1938                                        CComPtr<IRunEventAware> pRunEventAware;
     1939                                        if(SUCCEEDED(pServiceProvider->QueryService<IRunEventAware>(__uuidof(IRunEventAware), &pRunEventAware)))
     1940                                                _ATLTRY
     1941                                                {
     1942                                                        _A(pRunEventAware);
     1943                                                        CObjectPtr<CRunEventPropertyPage> pRunEventPropertyPage;
     1944                                                        pRunEventPropertyPage.Construct();
     1945                                                        ObjectPropertyPageArray.Add(CObjectPropertyPage(pRunEventAware, pRunEventPropertyPage));
     1946                                                }
     1947                                                _ATLCATCHALL()
     1948                                                {
     1949                                                        _Z_EXCEPTION();
     1950                                                }
     1951                                        #pragma endregion
     1952                                }
     1953                                if(!ObjectPropertyPageArray.IsEmpty())
     1954                                {
     1955                                        CTreeItem ServicesItem = m_TreeView.InsertItem(NULL, LastItem, CData(CData::TYPE_SERVICES), _T("Services"));
     1956                                        LastItem = ServicesItem;
     1957                                        CTreeItem PreviousServiceItem;
     1958                                        for(auto&& ObjectPropertyPage: ObjectPropertyPageArray)
     1959                                        {
     1960                                                CData Data(ObjectPropertyPage.m_pPropertyPage);
     1961                                                Data.m_pSite.Construct()->Initialize(this, ObjectPropertyPage.m_pUnknown, ObjectPropertyPage.m_pPropertyPage);
     1962                                                CTreeItem ServiceItem = m_TreeView.InsertItem(ServicesItem, PreviousServiceItem, Data, Data.GetPropertyPageTitle());
     1963                                                PreviousServiceItem = ServiceItem;
     1964                                        }
     1965                                        m_TreeView.Expand(ServicesItem);
     1966                                }
     1967                        }
     1968                        _ATLCATCHALL()
     1969                        {
     1970                                _Z_EXCEPTION();
     1971                        }
     1972                        #pragma endregion
     1973                        #pragma region Other
     1974                        CTreeItem MemoryAllocatorItem = m_TreeView.InsertItem(NULL, LastItem, CData(CData::TYPE_MEMORYALLOCATOR), _T("Memory Allocators"));
    18801975                        m_MemoryAllocatorItem.m_hTreeItem = MemoryAllocatorItem;
    18811976                        m_MemoryAllocatorItem.m_pTreeView = &m_TreeView;
     
    18891984                        m_EmailLogItem.m_hTreeItem = EmailLogItem;
    18901985                        m_EmailLogItem.m_pTreeView = &m_TreeView;
     1986                        #pragma endregion
    18911987                        m_TreeView.Expand(EmailItem);
    18921988                }
     
    20572153                {
    20582154                        _A(pHeader);
     2155                        #pragma region Tree Item
    20592156                        CTreeItem TreeItem(pHeader->itemNew.hItem);
    20602157                        if(TreeItem)
     
    20692166                                if(Data.m_Type != CData::TYPE_EMAIL_LOG)
    20702167                                        m_EmailLogDialog.ShowWindow(SW_HIDE);
     2168                                #pragma region Filter
    20712169                                if(Data.m_pBaseFilter)
    20722170                                {
     2171                                        #pragma region Property Page
    20732172                                        if(Data.m_pPropertyPage)
    20742173                                        {
     
    20862185                                                HandleStatusChange(m_pCurrentSite);
    20872186                                        } else
     2187                                        #pragma endregion
     2188                                        #pragma region Text
    20882189                                        {
    20892190                                                CWaitCursor WaitCursor;
     
    21802281                                                m_ApplyButton.EnableWindow(FALSE);
    21812282                                        }
     2283                                        #pragma endregion
    21822284                                } else
     2285                                #pragma endregion
     2286                                #pragma region Service Property Page
     2287                                if(Data.m_pPropertyPage)
     2288                                {
     2289                                        m_TextEdit.ShowWindow(SW_HIDE);
     2290                                        if(Data.m_pSite != m_pCurrentSite)
     2291                                                HideCurrentSite();
     2292                                        if(!Data.m_bSiteActivated)
     2293                                        {
     2294                                                __C(Data.m_pPropertyPage->Activate(m_hWnd, GetTextEditPosition(), TRUE));
     2295                                                Data.m_bSiteActivated = TRUE;
     2296                                        } else
     2297                                                __C(Data.m_pPropertyPage->Move(GetTextEditPosition()));
     2298                                        __C(Data.m_pPropertyPage->Show(SW_SHOWNORMAL));
     2299                                        m_pCurrentSite = Data.m_pSite;
     2300                                        HandleStatusChange(m_pCurrentSite);
     2301                                } else
     2302                                #pragma endregion
     2303                                #pragma region Other
    21832304                                {
    21842305                                        CWaitCursor WaitCursor;
     
    22202341                                        m_ApplyButton.EnableWindow(FALSE);
    22212342                                }
     2343                                #pragma endregion
    22222344                        } else
     2345                        #pragma endregion
     2346                        #pragma region No Tree Item
    22232347                        {
    22242348                                HideCurrentSite();
     
    22302354                                m_ApplyButton.EnableWindow(FALSE);
    22312355                        }
     2356                        #pragma endregion
    22322357                        return 0;
    22332358                }
     
    29303055                if(!pFilterGraph)
    29313056                        return (LPCTSTR) NULL;
     3057                const CComQIPtr<IServiceProvider> pServiceProvider = pFilterGraph;
    29323058                const CComQIPtr<ISpy> pSpy = pFilterGraph;
    29333059                CString sText;
     
    31803306                        #pragma endregion
    31813307                        #pragma region Runtime Property Bag
     3308                        const CString sRunPropertyBagHeader = AtlFormatString(_T("## ") _T("Runtime Properties") _T("\r\n") _T("\r\n"));
    31823309                        BOOL bRunPropertyBagHeaderAdded = FALSE;
    3183                         for(SIZE_T nIndex = 0; nIndex < FilterArray.GetCount(); nIndex++)
     3310                        {
     3311                                const CString sPropertyBagText = CRunPropertyBagHelper::GetPropertyBagText(pFilterGraph, pSpy);
     3312                                if(!sPropertyBagText.IsEmpty())
     3313                                {
     3314                                        sText += sRunPropertyBagHeader;
     3315                                        bRunPropertyBagHeaderAdded = TRUE;
     3316                                        sText += sPropertyBagText;
     3317                                        sText += _T("\r\n");
     3318                                }
     3319                        }
     3320                        for(auto&& pBaseFilter: FilterArray)
     3321                        {
    31843322                                _ATLTRY
    31853323                                {
    3186                                         const CComPtr<IBaseFilter>& pBaseFilter = FilterArray[nIndex];
    3187                                         //_Z4(atlTraceGeneral, 4, _T("pBaseFilter 0x%p \"%ls\"\n"), pBaseFilter, _FilterGraphHelper::GetFilterName(pBaseFilter));
    31883324                                        const CString sPropertyBagText = CRunPropertyBagHelper::GetPropertyBagText(pBaseFilter, pSpy);
    31893325                                        if(sPropertyBagText.IsEmpty())
     
    31913327                                        if(!bRunPropertyBagHeaderAdded)
    31923328                                        {
    3193                                                 sText += AtlFormatString(_T("## ") _T("Runtime Properties") _T("\r\n") _T("\r\n"));
     3329                                                sText += sRunPropertyBagHeader;
    31943330                                                bRunPropertyBagHeaderAdded = TRUE;
    31953331                                        }
     
    32023338                                        _Z_EXCEPTION();
    32033339                                }
     3340                        }
    32043341                        #pragma endregion
    32053342                }
  • trunk/DirectShowSpy/RunPropertyBag.h

    r312 r333  
    282282        __if_exists(ISpy)
    283283        {
     284                static CString GetPropertyBagText(IRunPropertyBagAware* pRunPropertyBagAware, ISpy* pSpy = NULL)
     285                {
     286                        if(pSpy)
     287                        {
     288                                CComVariantArray vValue;
     289                                __C(pSpy->ReadRunPropertyBag(pRunPropertyBagAware, ATL_VARIANT_TRUE, &vValue));
     290                                return GetPropertyBagText(vValue);
     291                        }
     292                        if(!pRunPropertyBagAware)
     293                                return _T("");
     294                        return GetPropertyBagText(ReadRunPropertyBag(pRunPropertyBagAware));
     295                }
    284296                static CString GetPropertyBagText(IUnknown* pBaseFilterUnknown, ISpy* pSpy = NULL)
    285297                {
     
    288300                        if(!pEffectiveSpy && pRunPropertyBagAware)
    289301                                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));
     302                        return GetPropertyBagText(pRunPropertyBagAware, pEffectiveSpy);
     303                }
     304                static CString GetPropertyBagText(IFilterGraph* pFilterGraph, ISpy* pSpy = NULL)
     305                {
     306                        const CComQIPtr<IServiceProvider> pServiceProvider = pFilterGraph;
     307                        if(pServiceProvider)
     308                        {
     309                                CComPtr<IRunPropertyBagAware> pRunPropertyBagAware;
     310                                pServiceProvider->QueryService<IRunPropertyBagAware>(__uuidof(IRunPropertyBagAware), &pRunPropertyBagAware);
     311                                if(pRunPropertyBagAware)
     312                                        return GetPropertyBagText(pRunPropertyBagAware, pSpy);
     313                        }
     314                        return _T("");
    299315                }
    300316        }
Note: See TracChangeset for help on using the changeset viewer.