Mercurial > mplayer.hg
comparison loader/dshow/cmediasample.c @ 168:bdc4a8fc04d8
Initial revision
author | arpi_esp |
---|---|
date | Tue, 20 Mar 2001 00:05:27 +0000 |
parents | |
children | a4d3c83eeb52 |
comparison
equal
deleted
inserted
replaced
167:53f289e99102 | 168:bdc4a8fc04d8 |
---|---|
1 #include <stdio.h> | |
2 #include <string.h> | |
3 #include "cmediasample.h" | |
4 #define E_NOTIMPL 0x80004003 | |
5 CMediaSample::CMediaSample(IMemAllocator* allocator, long _size):refcount(0) | |
6 { | |
7 vt=new IMediaSample_vt; | |
8 | |
9 vt->QueryInterface=QueryInterface; | |
10 vt->AddRef=AddRef; | |
11 vt->Release=Release; | |
12 vt->GetPointer=GetPointer ; | |
13 vt->GetSize=GetSize ; | |
14 vt->GetTime=GetTime ; | |
15 vt->SetTime=SetTime ; | |
16 vt->IsSyncPoint=IsSyncPoint ; | |
17 vt->SetSyncPoint=SetSyncPoint; | |
18 vt->IsPreroll=IsPreroll; | |
19 vt->SetPreroll=SetPreroll; | |
20 vt->GetActualDataLength=GetActualDataLength; | |
21 vt->SetActualDataLength=SetActualDataLength; | |
22 vt->GetMediaType=GetMediaType; | |
23 vt->SetMediaType=SetMediaType; | |
24 vt->IsDiscontinuity=IsDiscontinuity; | |
25 vt->SetDiscontinuity=SetDiscontinuity; | |
26 vt->GetMediaTime=GetMediaTime; | |
27 vt->SetMediaTime=SetMediaTime; | |
28 | |
29 all=allocator; | |
30 size=_size; | |
31 actual_size=0; | |
32 media_type.pbFormat=0; | |
33 isPreroll=0; | |
34 type_valid=0; | |
35 block=new char[size]; | |
36 Debug printf("%x: Creating media sample with size %d, buffer 0x%x\n", this, _size, block); | |
37 } | |
38 CMediaSample::~CMediaSample() | |
39 { | |
40 Debug printf("%x: CMediaSample::~CMediaSample() called\n", this); | |
41 delete vt; | |
42 delete[] block; | |
43 if(media_type.pbFormat) | |
44 CoTaskMemFree(media_type.pbFormat); | |
45 } | |
46 | |
47 long STDCALL CMediaSample::QueryInterface ( | |
48 IUnknown * This, | |
49 /* [in] */ IID* iid, | |
50 /* [iid_is][out] */ void **ppv) | |
51 { | |
52 Debug printf("CMediaSample::QueryInterface() called\n"); | |
53 if(!ppv)return 0x80004003; | |
54 if(!memcmp(iid, &IID_IUnknown, 16)) | |
55 { | |
56 *ppv=(void*)This; | |
57 This->vt->AddRef(This); | |
58 return 0; | |
59 } | |
60 if(!memcmp(iid, &IID_IMediaSample, 16)) | |
61 { | |
62 *ppv=(void*)This; | |
63 This->vt->AddRef(This); | |
64 return 0; | |
65 } | |
66 return 0x80004002; | |
67 } | |
68 | |
69 long STDCALL CMediaSample::AddRef ( | |
70 IUnknown * This) | |
71 { | |
72 Debug printf("CMediaSample::AddRef() called\n"); | |
73 ((CMediaSample*)This)->refcount++; | |
74 return 0; | |
75 } | |
76 | |
77 long STDCALL CMediaSample::Release ( | |
78 IUnknown * This) | |
79 { | |
80 Debug printf("%x: CMediaSample::Release() called, new refcount %d\n", This, | |
81 ((CMediaSample*)This)->refcount-1); | |
82 CMediaSample* parent=(CMediaSample*)This; | |
83 if(--((CMediaSample*)This)->refcount==0) | |
84 parent-> | |
85 all-> | |
86 vt-> | |
87 ReleaseBuffer( | |
88 (IMemAllocator*)(parent->all), | |
89 (IMediaSample*)This); | |
90 return 0; | |
91 } | |
92 HRESULT STDCALL CMediaSample::GetPointer ( | |
93 IMediaSample * This, | |
94 /* [out] */ BYTE **ppBuffer) | |
95 { | |
96 Debug printf("%x: CMediaSample::GetPointer() called\n", This); | |
97 if(!ppBuffer)return 0x80004003; | |
98 *ppBuffer=(BYTE *)((CMediaSample*)This)->block; | |
99 return 0; | |
100 } | |
101 | |
102 long STDCALL CMediaSample::GetSize ( | |
103 IMediaSample * This) | |
104 { | |
105 Debug printf("%x: CMediaSample::GetSize() called -> %d\n", This, ((CMediaSample*)This)->size); | |
106 return ((CMediaSample*)This)->size; | |
107 } | |
108 | |
109 HRESULT STDCALL CMediaSample::GetTime ( | |
110 IMediaSample * This, | |
111 /* [out] */ REFERENCE_TIME *pTimeStart, | |
112 /* [out] */ REFERENCE_TIME *pTimeEnd) | |
113 { | |
114 Debug printf("%x: CMediaSample::GetTime() called\n", This); | |
115 return E_NOTIMPL; | |
116 } | |
117 | |
118 HRESULT STDCALL CMediaSample::SetTime ( | |
119 IMediaSample * This, | |
120 /* [in] */ REFERENCE_TIME *pTimeStart, | |
121 /* [in] */ REFERENCE_TIME *pTimeEnd) | |
122 { | |
123 Debug printf("%x: CMediaSample::SetTime() called\n", This); | |
124 return E_NOTIMPL; | |
125 } | |
126 | |
127 HRESULT STDCALL CMediaSample::IsSyncPoint ( | |
128 IMediaSample * This) | |
129 { | |
130 Debug printf("%x: CMediaSample::IsSyncPoint() called\n", This); | |
131 if(((CMediaSample*)This)->isSyncPoint)return 0; | |
132 return 1; | |
133 } | |
134 | |
135 HRESULT STDCALL CMediaSample::SetSyncPoint ( | |
136 IMediaSample * This, | |
137 long bIsSyncPoint) | |
138 { | |
139 Debug printf("%x: CMediaSample::SetSyncPoint() called\n", This); | |
140 ((CMediaSample*)This)->isSyncPoint=bIsSyncPoint; | |
141 return 0; | |
142 } | |
143 | |
144 HRESULT STDCALL CMediaSample::IsPreroll ( | |
145 IMediaSample * This) | |
146 { | |
147 Debug printf("%x: CMediaSample::IsPreroll() called\n", This); | |
148 if(((CMediaSample*)This)->isPreroll==0) | |
149 return 1;//S_FALSE | |
150 else | |
151 return 0;//S_OK | |
152 } | |
153 | |
154 HRESULT STDCALL CMediaSample::SetPreroll ( | |
155 IMediaSample * This, | |
156 long bIsPreroll) | |
157 { | |
158 Debug printf("%x: CMediaSample::SetPreroll() called\n", This); | |
159 ((CMediaSample*)This)->isPreroll=bIsPreroll; | |
160 return 0; | |
161 } | |
162 | |
163 long STDCALL CMediaSample::GetActualDataLength ( | |
164 IMediaSample * This) | |
165 { | |
166 Debug printf("%x: CMediaSample::GetActualDataLength() called -> %d\n", This, ((CMediaSample*)This)->actual_size); | |
167 return ((CMediaSample*)This)->actual_size; | |
168 } | |
169 | |
170 HRESULT STDCALL CMediaSample::SetActualDataLength ( | |
171 IMediaSample * This, | |
172 long __MIDL_0010) | |
173 { | |
174 Debug printf("%x: CMediaSample::SetActualDataLength(%d) called\n", This, __MIDL_0010); | |
175 if(__MIDL_0010>((CMediaSample*)This)->size) | |
176 { | |
177 printf("%x: ERROR: CMediaSample buffer overflow\n", This); | |
178 } | |
179 ((CMediaSample*)This)->actual_size=__MIDL_0010; | |
180 return 0; | |
181 } | |
182 | |
183 HRESULT STDCALL CMediaSample::GetMediaType ( | |
184 IMediaSample * This, | |
185 AM_MEDIA_TYPE **ppMediaType) | |
186 { | |
187 Debug printf("%x: CMediaSample::GetMediaType() called\n", This); | |
188 if(!ppMediaType) | |
189 return 0x80004003; | |
190 if(!((CMediaSample*)This)->type_valid) | |
191 { | |
192 *ppMediaType=0; | |
193 return 1; | |
194 } | |
195 AM_MEDIA_TYPE& t=((CMediaSample*)This)->media_type; | |
196 // if(t.pbFormat)CoTaskMemFree(t.pbFormat); | |
197 (*ppMediaType)=(AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); | |
198 memcpy(*ppMediaType, &t, sizeof(AM_MEDIA_TYPE)); | |
199 (*ppMediaType)->pbFormat=(char*)CoTaskMemAlloc(t.cbFormat); | |
200 memcpy((*ppMediaType)->pbFormat, t.pbFormat, t.cbFormat); | |
201 // *ppMediaType=0; //media type was not changed | |
202 return 0; | |
203 } | |
204 | |
205 HRESULT STDCALL CMediaSample::SetMediaType ( | |
206 IMediaSample * This, | |
207 AM_MEDIA_TYPE *pMediaType) | |
208 { | |
209 Debug printf("%x: CMediaSample::SetMediaType() called\n", This); | |
210 if(!pMediaType)return 0x80004003; | |
211 AM_MEDIA_TYPE& t=((CMediaSample*)This)->media_type; | |
212 if(t.pbFormat)CoTaskMemFree(t.pbFormat); | |
213 t=*pMediaType; | |
214 t.pbFormat=(char*)CoTaskMemAlloc(t.cbFormat); | |
215 memcpy(t.pbFormat, pMediaType->pbFormat, t.cbFormat); | |
216 ((CMediaSample*)This)->type_valid=1; | |
217 return 0; | |
218 } | |
219 | |
220 HRESULT STDCALL CMediaSample::IsDiscontinuity ( | |
221 IMediaSample * This) | |
222 { | |
223 Debug printf("%x: CMediaSample::IsDiscontinuity() called\n", This); | |
224 return 1; | |
225 } | |
226 | |
227 HRESULT STDCALL CMediaSample::SetDiscontinuity ( | |
228 IMediaSample * This, | |
229 long bDiscontinuity) | |
230 { | |
231 Debug printf("%x: CMediaSample::SetDiscontinuity() called\n", This); | |
232 return E_NOTIMPL; | |
233 } | |
234 | |
235 HRESULT STDCALL CMediaSample::GetMediaTime ( | |
236 IMediaSample * This, | |
237 /* [out] */ LONGLONG *pTimeStart, | |
238 /* [out] */ LONGLONG *pTimeEnd) | |
239 { | |
240 Debug printf("%x: CMediaSample::GetMediaTime() called\n", This); | |
241 return E_NOTIMPL; | |
242 } | |
243 | |
244 HRESULT STDCALL CMediaSample::SetMediaTime ( | |
245 IMediaSample * This, | |
246 /* [in] */ LONGLONG *pTimeStart, | |
247 /* [in] */ LONGLONG *pTimeEnd) | |
248 { | |
249 Debug printf("%x: CMediaSample::SetMediaTime() called\n", This); | |
250 return E_NOTIMPL; | |
251 } |