122{
126 BYTE *ptrIn, *ptrOut;
129
130 hr = IMediaSample_GetTime(inputSample, &
startTime, &endTime);
132 ;
136 haveStartTime = haveEndTime =
FALSE;
137 else
139
140 hr = IMemAllocator_GetBuffer(
allocator, &outputSample,
143 if (IMediaSample_GetSize(outputSample) < IMediaSample_GetActualDataLength(inputSample)) {
144 ERR(
"insufficient space in sample\n");
147 }
148
149 hr = IMediaSample_SetTime(outputSample, haveStartTime ? &
startTime :
NULL, haveEndTime ? &endTime :
NULL);
151
152 hr = IMediaSample_GetPointer(inputSample, &ptrIn);
154 hr = IMediaSample_GetPointer(outputSample, &ptrOut);
156 memcpy(ptrOut, ptrIn, IMediaSample_GetActualDataLength(inputSample));
157 IMediaSample_SetActualDataLength(outputSample, IMediaSample_GetActualDataLength(inputSample));
158
159 hr = IMediaSample_SetDiscontinuity(outputSample, IMediaSample_IsDiscontinuity(inputSample) ==
S_OK);
161
162 haveStartTime = haveEndTime =
TRUE;
163 hr = IMediaSample_GetMediaTime(inputSample, &
startTime, &endTime);
165 ;
169 haveStartTime = haveEndTime =
FALSE;
170 else
172 hr = IMediaSample_SetMediaTime(outputSample, haveStartTime ? &
startTime :
NULL, haveEndTime ? &endTime :
NULL);
174
175 hr = IMediaSample_GetMediaType(inputSample, &mediaType);
178 hr = IMediaSample_SetMediaType(outputSample, mediaType);
180 }
181
182 hr = IMediaSample_SetPreroll(outputSample, IMediaSample_IsPreroll(inputSample) ==
S_OK);
184
185 hr = IMediaSample_SetSyncPoint(outputSample, IMediaSample_IsSyncPoint(inputSample) ==
S_OK);
187
189 if (mediaType)
192 IMediaSample_Release(outputSample);
194 }
195 *pOutputSample = outputSample;
197}
static ULONGLONG startTime
#define memcpy(s1, s2, n)
void WINAPI DeleteMediaType(AM_MEDIA_TYPE *pMediaType)
#define VFW_E_SAMPLE_TIME_NOT_SET
#define VFW_E_MEDIA_TIME_NOT_SET
#define VFW_S_NO_STOP_TIME
#define VFW_E_BUFFER_OVERFLOW