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 }