annotate loader/dshow/DS_Filter.c @ 3130:623cdb771e97

avifile sync. seems to some bugs fixed...
author arpi
date Mon, 26 Nov 2001 00:56:11 +0000
parents 213b35f84cf3
children e3bbf44dbab2
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"
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
2 #include "driver.h"
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
3 #include "com.h"
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
4 #include <stdio.h>
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
5 #include <string.h>
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
6
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
7 typedef long STDCALL (*GETCLASS) (const GUID*, const GUID*, void**);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
8
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
9 //extern "C" STDCALL void* GetProcAddress(int, const char*); // STDCALL has to be first NetBSD
244
1c3029be6713 Setup_FS fix for directshow
arpi_esp
parents: 168
diff changeset
10
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
11 static void DS_Filter_Start(DS_Filter* This)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
12 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
13 HRESULT hr;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
14
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
15 if (This->m_iState != 1)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
16 return;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
17
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
18 //Debug printf("DS_Filter_Start(%p)\n", This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
19 hr = This->m_pFilter->vt->Run(This->m_pFilter, 0);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
20 if (hr != 0)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
21 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
22 Debug printf("WARNING: m_Filter->Run() failed, error code %x\n", (int)hr);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
23 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
24 hr = This->m_pImp->vt->GetAllocator(This->m_pImp, &This->m_pAll);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
25
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
26 if (hr || !This->m_pAll)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
27 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
28 Debug printf("WARNING: error getting IMemAllocator interface %x\n", (int)hr);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
29 This->m_pImp->vt->Release((IUnknown*)This->m_pImp);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
30 return;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
31 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
32 This->m_pImp->vt->NotifyAllocator(This->m_pImp, This->m_pAll, 0);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
33 This->m_iState = 2;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
34 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
35
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
36 static void DS_Filter_Stop(DS_Filter* This)
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
37 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
38 if (This->m_iState == 2)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
39 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
40 This->m_iState = 1;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
41 //Debug printf("DS_Filter_Stop(%p)\n", This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
42 if (This->m_pFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
43 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
44 //printf("vt: %p\n", m_pFilter->vt);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
45 //printf("vtstop %p\n", m_pFilter->vt->Stop);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
46 This->m_pFilter->vt->Stop(This->m_pFilter); // causes weird crash ??? FIXME
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
47 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
48 else
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
49 printf("WARNING: DS_Filter::Stop() m_pFilter is NULL!\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
50 This->m_pAll->vt->Release((IUnknown*)This->m_pAll);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
51 This->m_pAll = 0;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
52 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
53 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
54
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
55 void DS_Filter_Destroy(DS_Filter* This)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
56 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
57 This->Stop(This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
58
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
59 This->m_iState = 0;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
60
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
61 if (This->m_pOurInput)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
62 This->m_pOurInput->vt->Release((IUnknown*)This->m_pOurInput);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
63 if (This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
64 This->m_pInputPin->vt->Disconnect(This->m_pInputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
65 if (This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
66 This->m_pOutputPin->vt->Disconnect(This->m_pOutputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
67 if (This->m_pFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
68 This->m_pFilter->vt->Release((IUnknown*)This->m_pFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
69 if (This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
70 This->m_pOutputPin->vt->Release((IUnknown*)This->m_pOutputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
71 if (This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
72 This->m_pInputPin->vt->Release((IUnknown*)This->m_pInputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
73 if (This->m_pImp)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
74 This->m_pImp->vt->Release((IUnknown*)This->m_pImp);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
75
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
76 if (This->m_pOurOutput)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
77 This->m_pOurOutput->vt->Release((IUnknown*)This->m_pOurOutput);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
78 if (This->m_pParentFilter)
3130
623cdb771e97 avifile sync. seems to some bugs fixed...
arpi
parents: 3056
diff changeset
79 This->m_pParentFilter->vt->Release((IUnknown*)This->m_pParentFilter);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
80 if (This->m_pSrcFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
81 This->m_pSrcFilter->vt->Release((IUnknown*)This->m_pSrcFilter);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
82
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
83 // FIXME - we are still leaving few things allocated!
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
84 if (This->m_iHandle)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
85 FreeLibrary(This->m_iHandle);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
86
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
87 free(This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
88
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
89 CodecRelease();
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
90 }
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
91
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
92 DS_Filter* DS_FilterCreate(const char* dllname, const GUID* id,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
93 AM_MEDIA_TYPE* in_fmt,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
94 AM_MEDIA_TYPE* out_fmt)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
95 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
96 DS_Filter* This = (DS_Filter*) malloc(sizeof(DS_Filter));
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
97 if (!This)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
98 return NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
99
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
100 CodecAlloc();
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
101
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
102 This->m_pFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
103 This->m_pInputPin = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
104 This->m_pOutputPin = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
105 This->m_pSrcFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
106 This->m_pParentFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
107 This->m_pOurInput = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
108 This->m_pOurOutput = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
109 This->m_pAll = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
110 This->m_pImp = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
111 This->m_iState = 0;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
112
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
113 This->Start = DS_Filter_Start;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
114 This->Stop = DS_Filter_Stop;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
115
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
116 for (;;)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
117 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
118 HRESULT result;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
119 GETCLASS func;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
120 struct IClassFactory* factory = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
121 struct IUnknown* object = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
122 IEnumPins* enum_pins = 0;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
123 IPin* array[256];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
124 ULONG fetched;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
125 unsigned int i;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
126
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
127 This->m_iHandle = LoadLibraryA(dllname);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
128 if (!This->m_iHandle)
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
129 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
130 printf("Could not open DirectShow DLL: %.200s\n", dllname);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
131 break;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
132 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
133 func = (GETCLASS)GetProcAddress(This->m_iHandle, "DllGetClassObject");
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
134 if (!func)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
135 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
136 printf("Illegal or corrupt DirectShow DLL: %.200s\n", dllname);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
137 break;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
138 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
139 result = func(id, &IID_IClassFactory, (void**)&factory);
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
140 if (result || !factory)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
141 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
142 printf("No such class object\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
143 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
144 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
145 result = factory->vt->CreateInstance(factory, 0, &IID_IUnknown, (void**)&object);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
146 factory->vt->Release((IUnknown*)factory);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
147 if (result || !object)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
148 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
149 printf("Class factory failure\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
150 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
151 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
152 result = object->vt->QueryInterface(object, &IID_IBaseFilter, (void**)&This->m_pFilter);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
153 object->vt->Release((IUnknown*)object);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
154 if (result || !This->m_pFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
155 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
156 printf("Object does not have IBaseFilter interface\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
157 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
158 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
159 // enumerate pins
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
160 result = This->m_pFilter->vt->EnumPins(This->m_pFilter, &enum_pins);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
161 if (result || !enum_pins)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
162 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
163 printf("Could not enumerate pins\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
164 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
165 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
166
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
167 enum_pins->vt->Reset(enum_pins);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
168 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
169 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
170
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
171 for (i = 0; i < fetched; i++)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
172 {
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
173 int direction = -1;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
174 array[i]->vt->QueryDirection(array[i], (PIN_DIRECTION*)&direction);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
175 if (!This->m_pInputPin && direction == 0)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
176 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
177 This->m_pInputPin = array[i];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
178 This->m_pInputPin->vt->AddRef((IUnknown*)This->m_pInputPin);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
179 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
180 if (!This->m_pOutputPin && direction == 1)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
181 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
182 This->m_pOutputPin = array[i];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
183 This->m_pOutputPin->vt->AddRef((IUnknown*)This->m_pOutputPin);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
184 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
185 array[i]->vt->Release((IUnknown*)(array[i]));
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
186 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
187 if (!This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
188 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
189 printf("Input pin not found\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
190 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
191 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
192 if (!This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
193 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
194 printf("Output pin not found\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
195 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
196 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
197 result = This->m_pInputPin->vt->QueryInterface((IUnknown*)This->m_pInputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
198 &IID_IMemInputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
199 (void**)&This->m_pImp);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
200 if (result)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
201 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
202 printf("Error getting IMemInputPin interface\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
203 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
204 }
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
205
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
206 This->m_pOurType = in_fmt;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
207 This->m_pDestType = out_fmt;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
208 result = This->m_pInputPin->vt->QueryAccept(This->m_pInputPin, This->m_pOurType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
209 if (result)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
210 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
211 printf("Source format is not accepted\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
212 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
213 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
214 This->m_pParentFilter = CBaseFilter2Create();
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
215 This->m_pSrcFilter = CBaseFilterCreate(This->m_pOurType, This->m_pParentFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
216 This->m_pOurInput = This->m_pSrcFilter->GetPin(This->m_pSrcFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
217 This->m_pOurInput->vt->AddRef((IUnknown*)This->m_pOurInput);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
218
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
219 result = This->m_pInputPin->vt->ReceiveConnection(This->m_pInputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
220 This->m_pOurInput,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
221 This->m_pOurType);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
222 if (result)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
223 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
224 printf("Error connecting to input pin\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
225 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
226 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
227
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
228 This->m_pOurOutput = COutputPinCreate(This->m_pDestType);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
229
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
230 result = This->m_pOutputPin->vt->ReceiveConnection(This->m_pOutputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
231 (IPin*) This->m_pOurOutput,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
232 This->m_pDestType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
233 if (result)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
234 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
235 //printf("Tracking ACELP %d 0%x\n", result);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
236 printf("Error connecting to output pin\n");
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
237 break;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
238 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
239
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
240 printf("Using DirectShow codec: %s\n", dllname);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
241 This->m_iState = 1;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
242 break;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
243 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
244
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
245 if (This->m_iState != 1)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
246 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
247 DS_Filter_Destroy(This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
248 This = 0;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
249 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
250 return This;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
251 }