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