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 }