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