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