annotate loader/dshow/outputpin.c @ 342:ac9bfa4a1005

using expLoadLibraryA instead of LoadLibraryA
author arpi_esp
date Wed, 11 Apr 2001 02:11:39 +0000
parents bdc4a8fc04d8
children 9355b2ae634e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
1 #include "outputpin.h"
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
2 #include <string.h>
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
3 #include <stdio.h>
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
4 #include "allocator.h"
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
5 #include "iunk.h"
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
6 #define E_NOTIMPL 0x80004001
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
7 /*
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
8 An object beyond interface IEnumMediaTypes.
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
9 Returned by COutputPin through call IPin::EnumMediaTypes().
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
10 */
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
11
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
12 class CEnumMediaTypes: public IEnumMediaTypes
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
13 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
14 AM_MEDIA_TYPE type;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
15 static GUID interfaces[];
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
16 DECLARE_IUNKNOWN(CEnumMediaTypes)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
17 public:
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
18 CEnumMediaTypes(const AM_MEDIA_TYPE&);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
19 ~CEnumMediaTypes(){delete vt;}
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
20 static HRESULT STDCALL Next (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
21 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
22 /* [in] */ ULONG cMediaTypes,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
23 /* [size_is][out] */ AM_MEDIA_TYPE **ppMediaTypes,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
24 /* [out] */ ULONG *pcFetched);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
25
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
26 static HRESULT STDCALL Skip (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
27 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
28 /* [in] */ ULONG cMediaTypes);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
29
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
30 static HRESULT STDCALL Reset (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
31 IEnumMediaTypes * This);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
32
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
33 static HRESULT STDCALL Clone (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
34 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
35 /* [out] */ IEnumMediaTypes **ppEnum);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
36
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
37 };
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
38 GUID CEnumMediaTypes::interfaces[]=
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
39 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
40 IID_IUnknown,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
41 IID_IEnumMediaTypes,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
42 };
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
43 IMPLEMENT_IUNKNOWN(CEnumMediaTypes)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
44 CEnumMediaTypes::CEnumMediaTypes(const AM_MEDIA_TYPE& type)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
45 :refcount(1)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
46 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
47 this->type=type;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
48 vt=new IEnumMediaTypes_vt;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
49 vt->QueryInterface = QueryInterface;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
50 vt->AddRef = AddRef;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
51 vt->Release = Release;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
52 vt->Next = Next;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
53 vt->Skip = Skip;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
54 vt->Reset = Reset;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
55 vt->Clone = Clone;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
56 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
57
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
58 HRESULT STDCALL CEnumMediaTypes::Next (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
59 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
60 /* [in] */ ULONG cMediaTypes,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
61 /* [size_is][out] */ AM_MEDIA_TYPE **ppMediaTypes,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
62 /* [out] */ ULONG *pcFetched)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
63 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
64 AM_MEDIA_TYPE& type=((CEnumMediaTypes*)This)->type;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
65 Debug printf("CEnumMediaTypes::Next() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
66 if(!ppMediaTypes)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
67 if(!pcFetched && (cMediaTypes!=1))return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
68 if(cMediaTypes<=0)return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
69
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
70 if(pcFetched)*pcFetched=1;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
71 ppMediaTypes[0]=(AM_MEDIA_TYPE *)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
72 memcpy(*ppMediaTypes, &type, sizeof(AM_MEDIA_TYPE));
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
73 if(ppMediaTypes[0]->pbFormat)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
74 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
75 ppMediaTypes[0]->pbFormat=(char *)CoTaskMemAlloc(ppMediaTypes[0]->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
76 memcpy(ppMediaTypes[0]->pbFormat, type.pbFormat, ppMediaTypes[0]->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
77 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
78 if(cMediaTypes==1)return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
79 return 1;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
80 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
81 /*
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
82 I expect that these methods are unused.
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
83 */
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
84 HRESULT STDCALL CEnumMediaTypes::Skip (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
85 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
86 /* [in] */ ULONG cMediaTypes)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
87 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
88 Debug printf("CEnumMediaTypes::Skip() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
89 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
90 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
91
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
92 HRESULT STDCALL CEnumMediaTypes::Reset (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
93 IEnumMediaTypes * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
94 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
95 Debug printf("CEnumMediaTypes::Reset() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
96 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
97 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
98
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
99 HRESULT STDCALL CEnumMediaTypes::Clone (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
100 IEnumMediaTypes * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
101 /* [out] */ IEnumMediaTypes **ppEnum)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
102 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
103 Debug printf("CEnumMediaTypes::Clone() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
104 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
105 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
106
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
107 /*
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
108 Implementation of output pin object.
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
109 */
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
110
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
111 // Constructor
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
112
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
113 COutputPin::COutputPin(const AM_MEDIA_TYPE& vh) :refcount(1), type(vh), remote(0), frame_pointer(0), frame_size_pointer(0)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
114 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
115 IPin::vt=new IPin_vt;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
116 IPin::vt->QueryInterface = QueryInterface;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
117 IPin::vt->AddRef = AddRef;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
118 IPin::vt->Release = Release;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
119 IPin::vt->Connect = Connect;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
120 IPin::vt->ReceiveConnection = ReceiveConnection;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
121 IPin::vt->Disconnect=Disconnect;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
122 IPin::vt->ConnectedTo = ConnectedTo;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
123 IPin::vt->ConnectionMediaType = ConnectionMediaType;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
124 IPin::vt->QueryPinInfo = QueryPinInfo;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
125 IPin::vt->QueryDirection = QueryDirection;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
126 IPin::vt->QueryId = QueryId;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
127 IPin::vt->QueryAccept = QueryAccept;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
128 IPin::vt->EnumMediaTypes = EnumMediaTypes;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
129 IPin::vt->QueryInternalConnections = QueryInternalConnections;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
130 IPin::vt->EndOfStream = EndOfStream;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
131 IPin::vt->BeginFlush = BeginFlush;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
132 IPin::vt->EndFlush = EndFlush;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
133 IPin::vt->NewSegment = NewSegment;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
134
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
135 IMemInputPin::vt=new IMemInputPin_vt;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
136 IMemInputPin::vt->QueryInterface = M_QueryInterface;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
137 IMemInputPin::vt->AddRef = M_AddRef;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
138 IMemInputPin::vt->Release = M_Release;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
139 IMemInputPin::vt->GetAllocator = GetAllocator;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
140 IMemInputPin::vt->NotifyAllocator = NotifyAllocator;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
141 IMemInputPin::vt->GetAllocatorRequirements = GetAllocatorRequirements;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
142 IMemInputPin::vt->Receive = Receive;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
143 IMemInputPin::vt->ReceiveMultiple = ReceiveMultiple;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
144 IMemInputPin::vt->ReceiveCanBlock = ReceiveCanBlock;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
145 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
146
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
147 // IPin->IUnknown methods
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
148
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
149 HRESULT STDCALL COutputPin::QueryInterface(IUnknown* This, GUID* iid, void** ppv)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
150 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
151 Debug printf("COutputPin::QueryInterface() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
152 if(!ppv)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
153 if(!memcmp(iid, &IID_IUnknown, 16))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
154 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
155 *ppv=(void*)This;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
156 This->vt->AddRef(This);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
157 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
158 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
159 if(!memcmp(iid, &IID_IMemInputPin, 16))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
160 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
161 *ppv=(void*)(This+1);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
162 This->vt->AddRef(This);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
163 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
164 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
165
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
166 Debug printf("Unknown interface : %08x-%04x-%04x-%02x%02x-" \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
167 "%02x%02x%02x%02x%02x%02x\n",
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
168 iid->f1, iid->f2, iid->f3,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
169 (unsigned char)iid->f4[1], (unsigned char)iid->f4[0],
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
170 (unsigned char)iid->f4[2],(unsigned char)iid->f4[3],(unsigned char)iid->f4[4],
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
171 (unsigned char)iid->f4[5],(unsigned char)iid->f4[6],(unsigned char)iid->f4[7]);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
172 return 0x80004002;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
173 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
174 HRESULT STDCALL COutputPin::AddRef(IUnknown* This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
175 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
176 Debug printf("COutputPin::AddRef() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
177 ((COutputPin*)This)->refcount++;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
178 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
179 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
180 HRESULT STDCALL COutputPin::Release(IUnknown* This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
181 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
182 Debug printf("COutputPin::Release() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
183 if(--((COutputPin*)This)->refcount==0)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
184 delete (COutputPin*)This;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
185 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
186 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
187
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
188 // IPin methods
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
189
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
190 HRESULT STDCALL COutputPin::Connect (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
191 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
192 /* [in] */ IPin *pReceivePin,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
193 /* [in] */ /* const */ AM_MEDIA_TYPE *pmt)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
194 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
195 Debug printf("COutputPin::Connect() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
196 /*
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
197 *pmt=((COutputPin*)This)->type;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
198 if(pmt->cbFormat>0)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
199 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
200 pmt->pbFormat=CoTaskMemAlloc(pmt->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
201 memcpy(pmt->pbFormat, ((COutputPin*)This)->type.pbFormat, pmt->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
202 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
203 */
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
204 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
205 // if I put return 0; here, it crashes
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
206 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
207
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
208 HRESULT STDCALL COutputPin::ReceiveConnection (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
209 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
210 /* [in] */ IPin *pConnector,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
211 /* [in] */ const AM_MEDIA_TYPE *pmt)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
212 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
213 Debug printf("COutputPin::ReceiveConnection() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
214 ((COutputPin*)This)->remote=pConnector;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
215 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
216 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
217
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
218 HRESULT STDCALL COutputPin::Disconnect (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
219 IPin * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
220 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
221 Debug printf("COutputPin::Disconnect() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
222 return 1;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
223 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
224
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
225
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
226 HRESULT STDCALL COutputPin::ConnectedTo (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
227 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
228 /* [out] */ IPin **pPin)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
229 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
230 Debug printf("COutputPin::ConnectedTo() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
231 if(!pPin)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
232 *pPin=((COutputPin*)This)->remote;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
233 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
234 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
235
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
236
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
237
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
238 HRESULT STDCALL COutputPin::ConnectionMediaType (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
239 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
240 /* [out] */ AM_MEDIA_TYPE *pmt)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
241 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
242 Debug printf("CInputPin::ConnectionMediaType() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
243 if(!pmt)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
244 *pmt=((COutputPin*)This)->type;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
245 if(pmt->cbFormat>0)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
246 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
247 pmt->pbFormat=(char *)CoTaskMemAlloc(pmt->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
248 memcpy(pmt->pbFormat, ((COutputPin*)This)->type.pbFormat, pmt->cbFormat);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
249 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
250 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
251 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
252
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
253 HRESULT STDCALL COutputPin::QueryPinInfo (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
254 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
255 /* [out] */ PIN_INFO *pInfo)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
256 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
257 Debug printf("COutputPin::QueryPinInfo() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
258 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
259 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
260
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
261
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
262 HRESULT STDCALL COutputPin::QueryDirection (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
263 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
264 /* [out] */ PIN_DIRECTION *pPinDir)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
265 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
266 Debug printf("COutputPin::QueryDirection() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
267 if(!pPinDir)return -1;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
268 *pPinDir=PINDIR_INPUT;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
269 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
270 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
271
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
272
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
273 HRESULT STDCALL COutputPin::QueryId (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
274 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
275 /* [out] */ LPWSTR *Id)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
276 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
277 Debug printf("COutputPin::QueryId() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
278 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
279 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
280
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
281
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
282 HRESULT STDCALL COutputPin::QueryAccept (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
283 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
284 /* [in] */ const AM_MEDIA_TYPE *pmt)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
285 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
286 Debug printf("COutputPin::QueryAccept() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
287 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
288 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
289
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
290
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
291 HRESULT STDCALL COutputPin::EnumMediaTypes (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
292 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
293 /* [out] */ IEnumMediaTypes **ppEnum)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
294 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
295 Debug printf("COutputPin::EnumMediaTypes() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
296 if(!ppEnum)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
297 *ppEnum=new CEnumMediaTypes(((COutputPin*)This)->type);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
298 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
299 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
300
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
301
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
302 HRESULT STDCALL COutputPin::QueryInternalConnections (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
303 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
304 /* [out] */ IPin **apPin,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
305 /* [out][in] */ ULONG *nPin)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
306 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
307 Debug printf("COutputPin::QueryInternalConnections() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
308 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
309 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
310
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
311 HRESULT STDCALL COutputPin::EndOfStream (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
312 IPin * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
313 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
314 Debug printf("COutputPin::EndOfStream() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
315 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
316 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
317
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
318
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
319 HRESULT STDCALL COutputPin::BeginFlush (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
320 IPin * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
321 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
322 Debug printf("COutputPin::BeginFlush() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
323 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
324 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
325
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
326
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
327 HRESULT STDCALL COutputPin::EndFlush (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
328 IPin * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
329 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
330 Debug printf("COutputPin::EndFlush() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
331 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
332 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
333
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
334 HRESULT STDCALL COutputPin::NewSegment (
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
335 IPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
336 /* [in] */ REFERENCE_TIME tStart,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
337 /* [in] */ REFERENCE_TIME tStop,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
338 /* [in] */ double dRate)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
339 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
340 Debug printf("COutputPin::NewSegment(%ld,%ld,%f) called\n",tStart,tStop,dRate);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
341 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
342 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
343
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
344
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
345
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
346
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
347
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
348
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
349
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
350
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
351
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
352
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
353
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
354
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
355
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
356
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
357
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
358
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
359
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
360
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
361 // IMemInputPin->IUnknown methods
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
362
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
363 HRESULT STDCALL COutputPin::M_QueryInterface(IUnknown* This, GUID* iid, void** ppv)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
364 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
365 Debug printf("COutputPin::QueryInterface() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
366 if(!ppv)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
367 if(!memcmp(iid, &IID_IUnknown, 16))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
368 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
369 COutputPin* ptr=(COutputPin*)(This-1);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
370 *ppv=(void*)ptr;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
371 AddRef((IUnknown*)ptr);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
372 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
373 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
374 /* if(!memcmp(iid, &IID_IPin, 16))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
375 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
376 COutputPin* ptr=(COutputPin*)(This-1);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
377 *ppv=(void*)ptr;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
378 AddRef((IUnknown*)ptr);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
379 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
380 }*/
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
381 if(!memcmp(iid, &IID_IMemInputPin, 16))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
382 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
383 *ppv=(void*)This;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
384 This->vt->AddRef(This);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
385 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
386 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
387 Debug printf("Unknown interface : %08x-%04x-%04x-%02x%02x-" \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
388 "%02x%02x%02x%02x%02x%02x\n",
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
389 iid->f1, iid->f2, iid->f3,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
390 (unsigned char)iid->f4[1], (unsigned char)iid->f4[0],
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
391 (unsigned char)iid->f4[2],(unsigned char)iid->f4[3],(unsigned char)iid->f4[4],
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
392 (unsigned char)iid->f4[5],(unsigned char)iid->f4[6],(unsigned char)iid->f4[7]);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
393 return 0x80004002;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
394 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
395 HRESULT STDCALL COutputPin::M_AddRef(IUnknown* This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
396 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
397 Debug printf("COutputPin::AddRef() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
398 ((COutputPin*)(This-1))->refcount++;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
399 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
400 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
401 HRESULT STDCALL COutputPin::M_Release(IUnknown* This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
402 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
403 Debug printf("COutputPin::Release() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
404 if(--((COutputPin*)(This-1))->refcount==0)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
405 delete (COutputPin*)This;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
406 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
407 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
408
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
409
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
410
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
411
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
412 // IMemInputPin methods
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
413
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
414 HRESULT STDCALL COutputPin::GetAllocator(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
415 IMemInputPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
416 /* [out] */ IMemAllocator **ppAllocator)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
417 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
418 Debug printf("COutputPin::GetAllocator(%x,%x) called\n",This->vt,ppAllocator);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
419 *ppAllocator=new MemAllocator;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
420 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
421 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
422
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
423 HRESULT STDCALL COutputPin::NotifyAllocator(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
424 IMemInputPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
425 /* [in] */ IMemAllocator *pAllocator,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
426 /* [in] */ int bReadOnly)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
427 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
428 Debug printf("COutputPin::NotifyAllocator() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
429 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
430 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
431
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
432 HRESULT STDCALL COutputPin::GetAllocatorRequirements(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
433 IMemInputPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
434 /* [out] */ ALLOCATOR_PROPERTIES *pProps)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
435 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
436 Debug printf("COutputPin::GetAllocatorRequirements() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
437 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
438 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
439
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
440 HRESULT STDCALL COutputPin::Receive(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
441 IMemInputPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
442 /* [in] */ IMediaSample *pSample)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
443 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
444 Debug printf("COutputPin::Receive() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
445 COutputPin& me=*(COutputPin*)This;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
446 if(!pSample)return 0x80004003;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
447 char* pointer;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
448 if(pSample->vt->GetPointer(pSample, (BYTE **)&pointer))
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
449 return -1;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
450 int len=pSample->vt->GetActualDataLength(pSample);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
451 if(len==0)len=pSample->vt->GetSize(pSample);//for iv50
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
452 //if(me.frame_pointer)memcpy(me.frame_pointer, pointer, len);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
453 *me.frame_pointer=pointer;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
454 if(me.frame_size_pointer)*me.frame_size_pointer=len;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
455 /*
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
456 FILE* file=fopen("./uncompr.bmp", "wb");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
457 char head[14]={0x42, 0x4D, 0x36, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00};
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
458 *(int*)(&head[2])=len+0x36;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
459 fwrite(head, 14, 1, file);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
460 fwrite(&((VIDEOINFOHEADER*)me.type.pbFormat)->bmiHeader, sizeof(BITMAPINFOHEADER), 1, file);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
461 fwrite(pointer, len, 1, file);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
462 fclose(file);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
463 */
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
464 // pSample->vt->Release((IUnknown*)pSample);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
465 return 0;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
466 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
467
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
468 HRESULT STDCALL COutputPin::ReceiveMultiple(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
469 IMemInputPin * This,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
470 /* [size_is][in] */ IMediaSample **pSamples,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
471 /* [in] */ long nSamples,
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
472 /* [out] */ long *nSamplesProcessed)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
473 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
474 Debug printf("COutputPin::ReceiveMultiple() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
475 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
476 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
477
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
478 HRESULT STDCALL COutputPin::ReceiveCanBlock(
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
479 IMemInputPin * This)
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
480 {
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
481 Debug printf("COutputPin::ReceiveCanBlock() called\n");
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
482 return E_NOTIMPL;
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
483 }