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