annotate loader/dshow/DS_Filter.c @ 1716:b8b17db5e3cc

*** empty log message ***
author gabucino
date Mon, 27 Aug 2001 16:46:09 +0000
parents da26060c81ef
children ce45cce7f7a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
1 #include "DS_Filter.h"
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
2 //#include "../loader/loader.h"
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
3 #include <libwin32.h>
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
4 #include <string>
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
5 #include <stdio.h>
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
6 #include <string.h>
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
7
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
8 #define __MODULE__ "DirectShow generic filter"
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
9
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
10 using namespace std;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
11
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
12 extern "C" int STDCALL expLoadLibraryA(const char*);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
13
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
14 typedef long STDCALL (*GETCLASS) (const GUID*, const GUID*, void**);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
15
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
16 //extern "C" int STDCALL LoadLibraryA(const char*);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
17 //extern "C" STDCALL void* GetProcAddress(int, const char*); // STDCALL has to be first NetBSD
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
18 //extern "C" int STDCALL FreeLibrary(int);
244
1c3029be6713 Setup_FS fix for directshow
arpi_esp
parents: 168
diff changeset
19
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
20 DS_Filter::DS_Filter()
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
21 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
22 m_iHandle = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
23 m_pFilter = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
24 m_pInputPin = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
25 m_pOutputPin = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
26 m_pSrcFilter = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
27 m_pParentFilter = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
28 m_pOurInput = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
29 m_pOurOutput = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
30 m_pAll = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
31 m_pImp = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
32 m_iState = 0;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
33 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
34
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
35 DS_Filter::~DS_Filter()
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
36 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
37 //cout << "Destruction of DS_FILTER" << endl;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
38 Stop();
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
39 destroy();
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
40 //cout << "Destruction of DS_FILTER done" << endl;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
41 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
42
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
43 void DS_Filter::destroy()
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
44 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
45 if (m_iState == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
46 return;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
47 m_iState = 0;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
48
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
49 if (m_pOurInput)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
50 m_pOurInput->vt->Release((IUnknown*)m_pOurInput);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
51 if (m_pInputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
52 m_pInputPin->vt->Disconnect(m_pInputPin);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
53 if (m_pOutputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
54 m_pOutputPin->vt->Disconnect(m_pOutputPin);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
55 if (m_pFilter)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
56 m_pFilter->vt->Release((IUnknown*)m_pFilter);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
57 if (m_pOutputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
58 m_pOutputPin->vt->Release((IUnknown*)m_pOutputPin);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
59 if (m_pInputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
60 m_pInputPin->vt->Release((IUnknown*)m_pInputPin);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
61 if (m_pImp)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
62 m_pImp->vt->Release((IUnknown*)m_pImp);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
63
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
64 delete m_pOurOutput;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
65 delete m_pParentFilter;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
66 delete m_pSrcFilter;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
67
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
68 // FIXME - we are still leaving few things allocated!
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
69 if (m_iHandle)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
70 FreeLibrary(m_iHandle);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
71 }
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
72
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
73 void DS_Filter::Create(const char* dllname, const GUID* id,
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
74 AM_MEDIA_TYPE* in_fmt,
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
75 AM_MEDIA_TYPE* out_fmt)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
76 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
77 try
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
78 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
79 m_iHandle = expLoadLibraryA(dllname);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
80 if (!m_iHandle)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
81 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
82 char e[256];
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
83 printf("Could not open DirectShow DLL: %.200s", dllname);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
84 throw FATAL(e);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
85 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
86 GETCLASS func = (GETCLASS)GetProcAddress(m_iHandle, "DllGetClassObject");
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
87 if (!func)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
88 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
89 char e[256];
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
90 printf("Illegal or corrupt DirectShow DLL: %.200s", dllname);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
91 throw FATAL(e);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
92 }
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
93
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
94 HRESULT result;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
95 IClassFactory* factory = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
96 result = func(id, &IID_IClassFactory, (void**)&factory);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
97 if (result || !factory)
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
98 throw FATAL("No such class object");;
244
1c3029be6713 Setup_FS fix for directshow
arpi_esp
parents: 168
diff changeset
99
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
100 IUnknown* object = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
101 result = factory->vt->CreateInstance(factory, 0, &IID_IUnknown, (void**)&object);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
102 factory->vt->Release((IUnknown*)factory);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
103 if (result || !object)
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
104 throw FATAL("Class factory failure");
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
105
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
106 result = object->vt->QueryInterface(object, &IID_IBaseFilter, (void**)&m_pFilter);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
107 object->vt->Release((IUnknown*)object);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
108 if (result || !m_pFilter)
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
109 throw FATAL("Object does not have IBaseFilter interface");
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
110
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
111 IEnumPins* enum_pins = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
112 // enumerate pins
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
113 result = m_pFilter->vt->EnumPins(m_pFilter, &enum_pins);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
114 if (result || !enum_pins)
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
115 throw FATAL("Could not enumerate pins");
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
116
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
117 IPin* array[256];
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
118 ULONG fetched;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
119 enum_pins->vt->Reset(enum_pins);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
120 result = enum_pins->vt->Next(enum_pins, (ULONG)256, (IPin**)array, &fetched);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
121 Debug printf("Pins enumeration returned %ld pins, error is %x\n", fetched, (int)result);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
122
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
123 for (unsigned i = 0; i < fetched; i++)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
124 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
125 int direction = -1;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
126 array[i]->vt->QueryDirection(array[i], (PIN_DIRECTION*)&direction);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
127 if (!m_pInputPin && direction == 0)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
128 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
129 m_pInputPin = array[i];
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
130 m_pInputPin->vt->AddRef((IUnknown*)m_pInputPin);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
131 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
132 if (!m_pOutputPin && direction == 1)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
133 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
134 m_pOutputPin = array[i];
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
135 m_pOutputPin->vt->AddRef((IUnknown*)m_pOutputPin);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
136 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
137 array[i]->vt->Release((IUnknown*)(array[i]));
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
138 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
139 if (!m_pInputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
140 throw FATAL("Input pin not found");
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
141 if (!m_pOutputPin)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
142 throw FATAL("Output pin not found");
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
143
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
144 result = m_pInputPin->vt->QueryInterface((IUnknown*)m_pInputPin,
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
145 &IID_IMemInputPin,
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
146 (void**)&m_pImp);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
147 if (result)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
148 throw FATAL("Error getting IMemInputPin interface");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
149 m_pOurType = in_fmt;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
150 m_pDestType = out_fmt;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
151 result = m_pInputPin->vt->QueryAccept(m_pInputPin, m_pOurType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
152 if (result)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
153 throw FATAL("Source format is not accepted");
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
154
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
155 m_pParentFilter = new CBaseFilter2;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
156 m_pSrcFilter = new CBaseFilter(*m_pOurType, m_pParentFilter);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
157 m_pOurInput = m_pSrcFilter->GetPin();
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
158 m_pOurInput->vt->AddRef((IUnknown*)m_pOurInput);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
159
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
160 result = m_pInputPin->vt->ReceiveConnection(m_pInputPin,
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
161 m_pOurInput,
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
162 m_pOurType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
163 if (result)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
164 throw FATAL("Error connecting to input pin");
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
165
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
166 m_pOurOutput = new COutputPin(*m_pDestType);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
167
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
168 //extern void trapbug();
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
169 //trapbug();
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
170 result = m_pOutputPin->vt->ReceiveConnection(m_pOutputPin,
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
171 m_pOurOutput,
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
172 m_pDestType);
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
173 if (result)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
174 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
175 //printf("Tracking ACELP %d 0%x\n", result);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
176 throw FATAL("Error connecting to output pin");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
177 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
178
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
179 printf("Using DirectShow codec: %s\n", dllname);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
180 m_iState = 1;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
181 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
182 catch (FatalError e)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
183 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
184 //e.PrintAll();
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
185 destroy();
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
186 throw;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
187 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
188 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
189
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
190 void DS_Filter::Start()
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
191 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
192 if (m_iState != 1)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
193 return;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
194
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
195 HRESULT hr=m_pFilter->vt->Run(m_pFilter, 0);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
196 if (hr != 0)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
197 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
198 Debug printf("WARNING: m_Filter->Run() failed, error code %x\n", (int)hr);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
199 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
200 hr = m_pImp->vt->GetAllocator(m_pImp, &m_pAll);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
201 if (hr)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
202 {
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
203 Debug printf("Error getting IMemAllocator interface %x\n", (int)hr);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
204 m_pImp->vt->Release((IUnknown*)m_pImp);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
205 return;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
206 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
207 m_pImp->vt->NotifyAllocator(m_pImp, m_pAll, 0);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
208 m_iState = 2;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
209 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
210
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
211 void DS_Filter::Stop()
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
212 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
213 if (m_iState == 2)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
214 {
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
215 m_pAll->vt->Release((IUnknown*)m_pAll);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
216 m_pFilter->vt->Stop(m_pFilter); // causes weird crash ??? FIXME
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
217 m_pAll = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
218 m_iState = 1;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
219 }
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
220 }