source: trunk/DirectShowSpy/BdaHooks/StateControlHook.h @ 171

Last change on this file since 171 was 95, checked in by roman, 12 years ago

DirectShowSpy? moved from Assembla

  • Property svn:keywords set to Id
File size: 3.8 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2008-2009
3// Created by Roman Ryltsov roman@alax.info
4//
5// $Id: StateControlHook.h 95 2012-08-17 17:21:13Z roman $
6
7#pragma once
8
9#include "Common.h"
10#include "BdaHooks_i.h"
11
12////////////////////////////////////////////////////////////
13// CStateControlHook
14
15class ATL_NO_VTABLE CStateControlHook :
16        public CComObjectRootEx<CComMultiThreadModel>,
17        public CComCoClass<CStateControlHook, &CLSID_StateControlHook>,
18        public IDispatchImpl<IStateControlHook>,
19        public IFilterGraphStateControlHook
20{
21public:
22        enum { IDR = IDR_STATECONTROLHOOK };
23
24//DECLARE_REGISTRY_RESOURCEID(IDR)
25
26DECLARE_PROTECT_FINAL_CONSTRUCT()
27
28//DECLARE_GET_CONTROLLING_UNKNOWN()
29
30//DECLARE_QI_TRACE(CStateControlHook)
31
32BEGIN_COM_MAP(CStateControlHook)
33        COM_INTERFACE_ENTRY(IStateControlHook)
34        COM_INTERFACE_ENTRY(IDispatch)
35        COM_INTERFACE_ENTRY(IFilterGraphStateControlHook)
36END_COM_MAP()
37
38public:
39// CStateControlHook
40        static CString GetObjectFriendlyName()
41        {
42                return _StringHelper::GetLine(IDR, 2);
43        }
44        static HRESULT WINAPI UpdateRegistry(BOOL bRegister) throw()
45        {
46                _Z2(atlTraceRegistrar, 2, _T("bRegister %d\n"), bRegister);
47                _ATLTRY
48                {
49                        UpdateRegistryFromResource<CStateControlHook>(bRegister);
50                }
51                _ATLCATCH(Exception)
52                {
53                        _C(Exception);
54                }
55                return S_OK;
56        }
57        CStateControlHook() throw()
58        {
59                _Z4(atlTraceRefcount, 4, _T("this 0x%08x\n"), this);
60        }
61        ~CStateControlHook() throw()
62        {
63                _Z4(atlTraceRefcount, 4, _T("this 0x%08x\n"), this);
64        }
65
66// IStateControlHook
67
68// IFilterGraphStateControlHook
69        STDMETHOD(OnRun)(ISpy* pSpy, BOOL* pbDefault) throw()
70        {
71                _Z4(atlTraceCOM, 4, _T("...\n"));
72                _ATLTRY
73                {
74                        CAtlArray<CComPtr<IBaseFilter> > BaseFilterArray;
75                        _FilterGraphHelper::GetGraphFilters(CComQIPtr<IGraphBuilder>(pSpy), BaseFilterArray);
76                        for(SIZE_T nFilterIndex = 0; nFilterIndex < BaseFilterArray.GetCount(); nFilterIndex++)
77                        {
78                                const CComPtr<IBaseFilter>& pBaseFilter = BaseFilterArray[nFilterIndex];
79                                CComQIPtr<IMpeg2Demultiplexer> pMpeg2Demultiplexer = pBaseFilter;
80                                if(!pMpeg2Demultiplexer)
81                                        continue;
82                                _FilterGraphHelper::CPinArray OutputPinArray;
83                                _FilterGraphHelper::GetFilterPins(pBaseFilter, OutputPinArray);
84                                for(SIZE_T nPinIndex = 0; nPinIndex < OutputPinArray.GetCount(); nPinIndex++)
85                                {
86                                        const CComPtr<IPin> pPin = OutputPinArray[nPinIndex];
87                                        _Z4(atlTraceGeneral, 4, _T("nPinIndex %d, pPin %ls\n"), nPinIndex, _FilterGraphHelper::GetPinFullName(pPin));
88                                        CComQIPtr<IMPEG2PIDMap> pMpeg2PidMap = pPin;
89                                        if(pMpeg2PidMap)
90                                        {
91                                                CComPtr<IEnumPIDMap> pEnumPidMap;
92                                                __C(pMpeg2PidMap->EnumPIDMap(&pEnumPidMap));
93                                                PID_MAP PidMap;
94                                                while(pEnumPidMap->Next(1, &PidMap, NULL) == S_OK)
95                                                        _Z4(atlTraceGeneral, 4, _T("PidMap { ulPID %d, PidMap.MediaSampleContent %d }\n"), PidMap.ulPID, PidMap.MediaSampleContent);
96                                        }
97                                        CComQIPtr<IMPEG2StreamIdMap> pMpeg2StreamIdMap = pPin;
98                                        if(pMpeg2StreamIdMap)
99                                        {
100                                                CComPtr<IEnumStreamIdMap> pEnumStreamIdMap;
101                                                __C(pMpeg2StreamIdMap->EnumStreamIdMap(&pEnumStreamIdMap));
102                                                STREAM_ID_MAP StreamIdMap;
103                                                while(pEnumStreamIdMap->Next(1, &StreamIdMap, NULL) == S_OK)
104                                                        _Z4(atlTraceGeneral, 4, _T("StreamIdMap { stream_id %d, StreamIdMap.dwMediaSampleContent %d, StreamIdMap.ulSubstreamFilterValue %d, iDataOffset %d }\n"), StreamIdMap.stream_id, StreamIdMap.dwMediaSampleContent, StreamIdMap.ulSubstreamFilterValue, StreamIdMap.iDataOffset);
105                                        }
106                                }
107                        }
108                }
109                _ATLCATCH(Exception)
110                {
111                        _C(Exception);
112                }
113                return S_OK;
114        }
115        STDMETHOD(OnPause)(ISpy* pSpy, BOOL* pbDefault) throw()
116        {
117                _Z4(atlTraceCOM, 4, _T("...\n"));
118                return S_OK;
119        }
120        STDMETHOD(OnStop)(ISpy* pSpy, BOOL* pbDefault) throw()
121        {
122                _Z4(atlTraceCOM, 4, _T("...\n"));
123                return S_OK;
124        }
125};
126
127OBJECT_ENTRY_AUTO(__uuidof(StateControlHook), CStateControlHook)
Note: See TracBrowser for help on using the repository browser.