Mercurial > mplayer.hg
annotate loader/dshow/DS_Filter.c @ 26999:0b21ffa03b9c
Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can
conflict with the header by the same name in loader/wine/driver.h.
author | diego |
---|---|
date | Sun, 08 Jun 2008 10:43:30 +0000 |
parents | b70f5ac9c001 |
children | eda346733b8c |
rev | line source |
---|---|
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
9967
diff
changeset
|
1 /* |
18783 | 2 * Modified for use with MPlayer, detailed changelog at |
3 * http://svn.mplayerhq.hu/mplayer/trunk/ | |
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
9967
diff
changeset
|
4 */ |
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
9967
diff
changeset
|
5 |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
6 #include "config.h" |
1545 | 7 #include "DS_Filter.h" |
26999
0b21ffa03b9c
Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can
diego
parents:
25849
diff
changeset
|
8 #include "drv.h" |
3056 | 9 #include "com.h" |
168 | 10 #include <stdio.h> |
11 #include <string.h> | |
7386 | 12 #include <stdlib.h> |
13 #include "win32.h" // printf macro | |
1545 | 14 |
168 | 15 typedef long STDCALL (*GETCLASS) (const GUID*, const GUID*, void**); |
16 | |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
17 #ifndef WIN32_LOADER |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
18 const GUID IID_IUnknown = |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
19 { |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
20 0x00000000, 0x0000, 0x0000, |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
21 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
22 }; |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
23 const GUID IID_IClassFactory = |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
24 { |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
25 0x00000001, 0x0000, 0x0000, |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
26 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
27 }; |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
28 |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
29 HRESULT STDCALL CoInitialize(LPVOID pvReserved); |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
30 void STDCALL CoUninitialize(void); |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
31 #endif |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
32 |
8292 | 33 //void trapbug(); |
244 | 34 |
3056 | 35 static void DS_Filter_Start(DS_Filter* This) |
168 | 36 { |
3056 | 37 HRESULT hr; |
38 | |
39 //Debug printf("DS_Filter_Start(%p)\n", This); | |
8292 | 40 hr = This->m_pFilter->vt->Run(This->m_pFilter, (REFERENCE_TIME)0); |
3056 | 41 if (hr != 0) |
42 { | |
43 Debug printf("WARNING: m_Filter->Run() failed, error code %x\n", (int)hr); | |
44 } | |
168 | 45 } |
46 | |
3056 | 47 static void DS_Filter_Stop(DS_Filter* This) |
713 | 48 { |
3467 | 49 if (This->m_pAll) |
3056 | 50 { |
51 //Debug printf("DS_Filter_Stop(%p)\n", This); | |
3467 | 52 This->m_pFilter->vt->Stop(This->m_pFilter); // causes weird crash ??? FIXME |
3056 | 53 This->m_pAll->vt->Release((IUnknown*)This->m_pAll); |
54 This->m_pAll = 0; | |
55 } | |
1545 | 56 } |
57 | |
3056 | 58 void DS_Filter_Destroy(DS_Filter* This) |
1545 | 59 { |
3056 | 60 This->Stop(This); |
61 | |
62 if (This->m_pOurInput) | |
63 This->m_pOurInput->vt->Release((IUnknown*)This->m_pOurInput); | |
64 if (This->m_pInputPin) | |
65 This->m_pInputPin->vt->Disconnect(This->m_pInputPin); | |
66 if (This->m_pOutputPin) | |
67 This->m_pOutputPin->vt->Disconnect(This->m_pOutputPin); | |
68 if (This->m_pFilter) | |
69 This->m_pFilter->vt->Release((IUnknown*)This->m_pFilter); | |
70 if (This->m_pOutputPin) | |
71 This->m_pOutputPin->vt->Release((IUnknown*)This->m_pOutputPin); | |
72 if (This->m_pInputPin) | |
73 This->m_pInputPin->vt->Release((IUnknown*)This->m_pInputPin); | |
74 if (This->m_pImp) | |
75 This->m_pImp->vt->Release((IUnknown*)This->m_pImp); | |
713 | 76 |
3056 | 77 if (This->m_pOurOutput) |
78 This->m_pOurOutput->vt->Release((IUnknown*)This->m_pOurOutput); | |
79 if (This->m_pParentFilter) | |
3130 | 80 This->m_pParentFilter->vt->Release((IUnknown*)This->m_pParentFilter); |
3056 | 81 if (This->m_pSrcFilter) |
82 This->m_pSrcFilter->vt->Release((IUnknown*)This->m_pSrcFilter); | |
713 | 83 |
84 // FIXME - we are still leaving few things allocated! | |
3056 | 85 if (This->m_iHandle) |
8292 | 86 FreeLibrary((unsigned)This->m_iHandle); |
3056 | 87 |
88 free(This); | |
89 | |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
90 #ifdef WIN32_LOADER |
3056 | 91 CodecRelease(); |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
92 #else |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
93 CoUninitialize(); |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
94 #endif |
713 | 95 } |
96 | |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
97 static HRESULT STDCALL DS_Filter_CopySample(void* pUserData,IMediaSample* pSample){ |
24405 | 98 BYTE* pointer; |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
99 int len; |
25682 | 100 SampleProcUserData* pData=pUserData; |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
101 Debug printf("CopySample called(%p,%p)\n",pSample,pUserData); |
25682 | 102 if (pSample->vt->GetPointer(pSample, &pointer)) |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
103 return 1; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
104 len = pSample->vt->GetActualDataLength(pSample); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
105 if (len == 0) |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
106 len = pSample->vt->GetSize(pSample);//for iv50 |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
107 |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
108 pData->frame_pointer = pointer; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
109 pData->frame_size = len; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
110 /* |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
111 FILE* file=fopen("./uncompr.bmp", "wb"); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
112 char head[14]={0x42, 0x4D, 0x36, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00}; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
113 *(int*)(&head[2])=len+0x36; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
114 fwrite(head, 14, 1, file); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
115 fwrite(&((VIDEOINFOHEADER*)me.type.pbFormat)->bmiHeader, sizeof(BITMAPINFOHEADER), 1, file); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
116 fwrite(pointer, len, 1, file); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
117 fclose(file); |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
118 */ |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
119 return 0; |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
120 } |
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
121 |
3056 | 122 DS_Filter* DS_FilterCreate(const char* dllname, const GUID* id, |
123 AM_MEDIA_TYPE* in_fmt, | |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
124 AM_MEDIA_TYPE* out_fmt,SampleProcUserData* pUserData) |
168 | 125 { |
3467 | 126 int init = 0; |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7386
diff
changeset
|
127 // char eb[250]; |
3467 | 128 const char* em = NULL; |
22304
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
129 MemAllocator* tempAll; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
130 ALLOCATOR_PROPERTIES props,props1; |
25677 | 131 DS_Filter* This = malloc(sizeof(DS_Filter)); |
3056 | 132 if (!This) |
133 return NULL; | |
134 | |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
135 #ifdef WIN32_LOADER |
3056 | 136 CodecAlloc(); |
9967
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
137 #else |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
138 CoInitialize(0L); |
b0d1b415320c
cygwin support patch by Sascha Sommer and some fixes by me
alex
parents:
8292
diff
changeset
|
139 #endif |
3056 | 140 |
22304
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
141 /* |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
142 tempAll is not used anywhere. |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
143 MemAllocatorCreate() is called to ensure that RegisterComObject for IMemoryAllocator |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
144 will be called before possible call |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
145 to CoCreateInstance(...,&IID_IMemoryAllocator,...) from binary codec. |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
146 */ |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
147 tempAll=MemAllocatorCreate(); |
3056 | 148 This->m_pFilter = NULL; |
149 This->m_pInputPin = NULL; | |
150 This->m_pOutputPin = NULL; | |
151 This->m_pSrcFilter = NULL; | |
152 This->m_pParentFilter = NULL; | |
153 This->m_pOurInput = NULL; | |
154 This->m_pOurOutput = NULL; | |
155 This->m_pAll = NULL; | |
156 This->m_pImp = NULL; | |
157 | |
158 This->Start = DS_Filter_Start; | |
159 This->Stop = DS_Filter_Stop; | |
160 | |
161 for (;;) | |
168 | 162 { |
3056 | 163 GETCLASS func; |
164 struct IClassFactory* factory = NULL; | |
165 struct IUnknown* object = NULL; | |
166 IEnumPins* enum_pins = 0; | |
167 IPin* array[256]; | |
168 ULONG fetched; | |
25679
12fcf17e83e0
Move variable declaration into block where it is used.
reimar
parents:
25678
diff
changeset
|
169 HRESULT result; |
3056 | 170 unsigned int i; |
171 | |
172 This->m_iHandle = LoadLibraryA(dllname); | |
173 if (!This->m_iHandle) | |
713 | 174 { |
3467 | 175 em = "could not open DirectShow DLL"; |
3056 | 176 break; |
713 | 177 } |
8292 | 178 func = (GETCLASS)GetProcAddress((unsigned)This->m_iHandle, "DllGetClassObject"); |
713 | 179 if (!func) |
180 { | |
3467 | 181 em = "illegal or corrupt DirectShow DLL"; |
3056 | 182 break; |
713 | 183 } |
24405 | 184 result = func(id, &IID_IClassFactory, (void*)&factory); |
1545 | 185 if (result || !factory) |
3056 | 186 { |
3467 | 187 em = "no such class object"; |
3056 | 188 break; |
189 } | |
24405 | 190 result = factory->vt->CreateInstance(factory, 0, &IID_IUnknown, (void*)&object); |
168 | 191 factory->vt->Release((IUnknown*)factory); |
1545 | 192 if (result || !object) |
3056 | 193 { |
3467 | 194 em = "class factory failure"; |
3056 | 195 break; |
196 } | |
24405 | 197 result = object->vt->QueryInterface(object, &IID_IBaseFilter, (void*)&This->m_pFilter); |
168 | 198 object->vt->Release((IUnknown*)object); |
3056 | 199 if (result || !This->m_pFilter) |
200 { | |
7386 | 201 em = "object does not provide IBaseFilter interface"; |
3056 | 202 break; |
203 } | |
204 // enumerate pins | |
205 result = This->m_pFilter->vt->EnumPins(This->m_pFilter, &enum_pins); | |
206 if (result || !enum_pins) | |
207 { | |
3467 | 208 em = "could not enumerate pins"; |
3056 | 209 break; |
210 } | |
713 | 211 |
168 | 212 enum_pins->vt->Reset(enum_pins); |
1545 | 213 result = enum_pins->vt->Next(enum_pins, (ULONG)256, (IPin**)array, &fetched); |
8292 | 214 Debug printf("Pins enumeration returned %ld pins, error is %x\n", fetched, (int)result); |
713 | 215 |
3056 | 216 for (i = 0; i < fetched; i++) |
168 | 217 { |
24405 | 218 PIN_DIRECTION direction = -1; |
25680 | 219 array[i]->vt->QueryDirection(array[i], &direction); |
24405 | 220 if (!This->m_pInputPin && direction == PINDIR_INPUT) |
168 | 221 { |
3056 | 222 This->m_pInputPin = array[i]; |
223 This->m_pInputPin->vt->AddRef((IUnknown*)This->m_pInputPin); | |
168 | 224 } |
24405 | 225 if (!This->m_pOutputPin && direction == PINDIR_OUTPUT) |
168 | 226 { |
3056 | 227 This->m_pOutputPin = array[i]; |
228 This->m_pOutputPin->vt->AddRef((IUnknown*)This->m_pOutputPin); | |
168 | 229 } |
230 array[i]->vt->Release((IUnknown*)(array[i])); | |
231 } | |
3056 | 232 if (!This->m_pInputPin) |
233 { | |
3467 | 234 em = "could not find input pin"; |
3056 | 235 break; |
236 } | |
237 if (!This->m_pOutputPin) | |
238 { | |
3467 | 239 em = "could not find output pin"; |
3056 | 240 break; |
241 } | |
242 result = This->m_pInputPin->vt->QueryInterface((IUnknown*)This->m_pInputPin, | |
243 &IID_IMemInputPin, | |
24405 | 244 (void*)&This->m_pImp); |
713 | 245 if (result) |
3056 | 246 { |
3467 | 247 em = "could not get IMemInputPin interface"; |
3056 | 248 break; |
249 } | |
168 | 250 |
3056 | 251 This->m_pOurType = in_fmt; |
252 This->m_pDestType = out_fmt; | |
253 result = This->m_pInputPin->vt->QueryAccept(This->m_pInputPin, This->m_pOurType); | |
713 | 254 if (result) |
3056 | 255 { |
3467 | 256 em = "source format is not accepted"; |
3056 | 257 break; |
258 } | |
259 This->m_pParentFilter = CBaseFilter2Create(); | |
260 This->m_pSrcFilter = CBaseFilterCreate(This->m_pOurType, This->m_pParentFilter); | |
261 This->m_pOurInput = This->m_pSrcFilter->GetPin(This->m_pSrcFilter); | |
262 This->m_pOurInput->vt->AddRef((IUnknown*)This->m_pOurInput); | |
713 | 263 |
3056 | 264 result = This->m_pInputPin->vt->ReceiveConnection(This->m_pInputPin, |
265 This->m_pOurInput, | |
266 This->m_pOurType); | |
267 if (result) | |
268 { | |
3467 | 269 em = "could not connect to input pin"; |
3056 | 270 break; |
271 } | |
22304
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
272 result = This->m_pImp->vt->GetAllocator(This->m_pImp, &This->m_pAll); |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
273 if (result || !This->m_pAll) |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
274 { |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
275 em="error getting IMemAllocator interface"; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
276 break; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
277 } |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
278 |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
279 //Seting allocator property according to our media type |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
280 props.cBuffers=1; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
281 props.cbBuffer=This->m_pOurType->lSampleSize; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
282 props.cbAlign=1; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
283 props.cbPrefix=0; |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
284 This->m_pAll->vt->SetProperties(This->m_pAll, &props, &props1); |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
285 |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
286 //Notify remote pin about choosed allocator |
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
287 This->m_pImp->vt->NotifyAllocator(This->m_pImp, This->m_pAll, 0); |
3056 | 288 |
22398
49f01f8fbd60
Rework of copying samples from directshow codecs.
voroshil
parents:
22304
diff
changeset
|
289 This->m_pOurOutput = COutputPinCreate(This->m_pDestType,DS_Filter_CopySample,pUserData); |
3056 | 290 |
291 result = This->m_pOutputPin->vt->ReceiveConnection(This->m_pOutputPin, | |
292 (IPin*) This->m_pOurOutput, | |
293 This->m_pDestType); | |
713 | 294 if (result) |
1545 | 295 { |
3467 | 296 em = "could not connect to output pin"; |
3056 | 297 break; |
1545 | 298 } |
299 | |
3467 | 300 init++; |
3056 | 301 break; |
168 | 302 } |
22304
254733f57707
Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents:
18783
diff
changeset
|
303 tempAll->vt->Release(tempAll); |
3056 | 304 |
3467 | 305 if (!init) |
168 | 306 { |
3056 | 307 DS_Filter_Destroy(This); |
25678
ebf1c7d24ca2
Remove result from warning string, it has no useful meaning here.
reimar
parents:
25677
diff
changeset
|
308 printf("Warning: DS_Filter() %s. (DLL=%.200s)\n", em, dllname); |
3056 | 309 This = 0; |
168 | 310 } |
3056 | 311 return This; |
168 | 312 } |