38#define AVISUPERINDEX_ENTRIES 2000
39#define AVISTDINDEX_ENTRIES 4000
40#define ALIGN(x) ((x+1)/2*2)
134 IPin_AddRef(&
This->out->pin.pin.IPin_iface);
135 return &
This->out->pin.pin.IPin_iface;
136 }
else if(
pos>0 && pos<=This->input_pin_no) {
137 IPin_AddRef(&
This->in[
pos-1]->pin.pin.IPin_iface);
138 return &
This->in[
pos-1]->pin.pin.IPin_iface;
148 return This->input_pin_no+1;
170 *
ppv = &
This->filter.IBaseFilter_iface;
172 *
ppv = &
This->IConfigAviMux_iface;
174 *
ppv = &
This->IConfigInterleaving_iface;
176 *
ppv = &
This->IMediaSeeking_iface;
178 *
ppv = &
This->IPersistMediaPropertyBag_iface;
180 *
ppv = &
This->ISpecifyPropertyPages_iface;
203 for(
i=0;
i<
This->input_pin_no;
i++) {
204 IPin_Disconnect(&
This->in[
i]->pin.pin.IPin_iface);
205 IMemAllocator_Release(
This->in[
i]->samples_allocator);
222 if(!
This->out->buf_pos)
225 hr = IStream_Write(
This->out->stream,
This->out->buf,
This->out->buf_pos, &written);
228 if(written !=
This->out->buf_pos)
231 This->out->buf_pos = 0;
245 hr = IStream_Seek(
This->out->stream,
li, STREAM_SEEK_SET,
NULL);
250 if(
This->out->out_pos >
This->out->size)
251 This->out->size =
This->out->out_pos;
262 chunk_size =
sizeof(
This->out->buf)-
This->out->buf_pos;
269 This->out->buf_pos += chunk_size;
270 This->out->out_pos += chunk_size;
271 if(
This->out->out_pos >
This->out->size)
272 This->out->size =
This->out->out_pos;
293 avimux->
idx1 = new_idx;
322 hr = IMediaSample_GetPointer(*head_prev, (
BYTE**)&prev);
328 size = IMediaSample_GetActualDataLength(sample);
329 hr = IMediaSample_GetPointer(sample, &
data);
333 if(IMediaSample_IsSyncPoint(sample) ==
S_OK)
387 IMediaSample_Release(sample);
402 IMediaSample_Release(sample);
409 IMediaSample_Release(sample);
414 IMediaSample_Release(sample);
420 IMediaSample_Release(sample);
424 IMediaSample_Release(sample);
434 hr = IMediaSample_GetPointer(sample, (
BYTE**)&prev);
451 IMediaSample_AddRef(sample);
464 if(
This->filter.state == State_Stopped)
467 if(
This->out->stream) {
471 int idx1_off, empty_stream;
473 empty_stream =
This->out->cur_stream;
474 for(
i=empty_stream+1; ;
i++) {
475 if(
i >=
This->input_pin_no-1)
477 if(
i == empty_stream)
480 This->out->cur_stream =
i;
486 idx1_off =
This->out->size;
488 rc.
cb =
This->idx1_entries *
sizeof(*
This->idx1);
504 for(
i=0;
i<
This->input_pin_no;
i++) {
505 if(!
This->in[
i]->pin.pin.pConnectedTo)
512 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].qwOffset =
This->in[
i]->ix_off;
513 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwSize =
sizeof(
This->in[
i]->ix_data);
514 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwDuration =
This->in[
i]->strh.dwLength;
515 if(
This->in[
i]->indx->nEntriesInUse) {
516 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwDuration -=
517 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse-1].dwDuration;
519 This->in[
i]->indx->nEntriesInUse++;
529 rl.
fcc =
FCC(
'R',
'I',
'F',
'F');
536 rl.
fcc =
FCC(
'L',
'I',
'S',
'T');
544 This->avih.dwTotalFrames = (
This->stop-
This->start) / 10 /
This->avih.dwMicroSecPerFrame;
549 for(
i=0;
i<
This->input_pin_no;
i++) {
550 if(!
This->in[
i]->pin.pin.pConnectedTo)
554 This->in[
i]->strf->cb +
sizeof(
This->in[
i]->indx_data);
573 rl.
cb =
sizeof(dmlh) +
sizeof(
FOURCC);
579 memset(&dmlh, 0,
sizeof(dmlh));
590 IStream_Release(
This->out->stream);
594 This->filter.state = State_Stopped;
613 if(
This->filter.state == State_Running)
616 if(
This->mode != INTERLEAVE_FULL) {
617 FIXME(
"mode not supported (%d)\n",
This->mode);
622 FIXME(
"tStart parameter ignored\n");
624 for(
i=0;
i<
This->input_pin_no;
i++) {
628 if(!
This->in[
i]->pin.pin.pConnectedTo)
631 hr = IPin_QueryInterface(
This->in[
i]->pin.pin.pConnectedTo,
632 &IID_IMediaSeeking, (
void**)&ms);
636 hr = IMediaSeeking_GetPositions(ms, &
cur, &stop);
638 IMediaSeeking_Release(ms);
642 FIXME(
"Use IMediaSeeking to fill stream header\n");
643 IMediaSeeking_Release(ms);
646 if(
This->out->pin.pMemInputPin) {
647 hr = IMemInputPin_QueryInterface(
This->out->pin.pMemInputPin,
648 &IID_IStream, (
void**)&
This->out->stream);
653 This->idx1_entries = 0;
654 if(!
This->idx1_size) {
655 This->idx1_size = 1024;
665 for(
i=0;
i<
This->input_pin_no;
i++) {
666 if(!
This->in[
i]->pin.pin.pConnectedTo)
669 This->avih.dwStreams++;
671 +
This->in[
i]->strf->cb +
sizeof(
This->in[
i]->indx_data);
673 This->in[
i]->strh.dwScale =
MulDiv(
This->in[
i]->avg_time_per_frame,
This->interleave, 10000000);
674 This->in[
i]->strh.dwRate =
This->interleave;
676 hr = IMemAllocator_Commit(
This->in[
i]->pin.pAllocator);
678 if(
This->out->stream) {
679 IStream_Release(
This->out->stream);
686 This->out->movi_off =
This->out->size;
692 for(
i=0;
i<
This->input_pin_no;
i++) {
693 if(!
This->in[
i]->pin.pin.pConnectedTo)
697 This->out->size +=
sizeof(
This->in[
i]->ix_data);
698 This->in[
i]->ix->fcc =
FCC(
'i',
'x',
'0'+stream_id/10,
'0'+stream_id%10);
700 This->in[
i]->ix->wLongsPerEntry = 2;
701 This->in[
i]->ix->bIndexSubType = 0;
703 This->in[
i]->ix->dwChunkId =
FCC(
'0'+stream_id/10,
'0'+stream_id%10,
'd',
'b');
704 This->in[
i]->ix->qwBaseOffset = 0;
708 This->in[
i]->indx->wLongsPerEntry = 4;
709 This->in[
i]->indx->bIndexSubType = 0;
711 This->in[
i]->indx->dwChunkId =
This->in[
i]->ix->dwChunkId;
712 This->in[
i]->stream_id = stream_id++;
715 This->out->buf_pos = 0;
716 This->out->out_pos = 0;
721 This->avih.dwMicroSecPerFrame =
This->in[0]->avg_time_per_frame/10;
722 This->avih.dwPaddingGranularity = 1;
727 This->filter.state = State_Running;
749 IPin_AddRef(&
This->out->pin.pin.IPin_iface);
750 *ppPin = &
This->out->pin.pin.IPin_iface;
754 for(
i=0;
i<
This->input_pin_no;
i++) {
758 IPin_AddRef(&
This->in[
i]->pin.pin.IPin_iface);
759 *ppPin = &
This->in[
i]->pin.pin.IPin_iface;
776 FIXME(
"(%p)->(%p)\n",
This, pVendorInfo);
807 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
813 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
819 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
871 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
877 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
883 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
893 if(
mode>INTERLEAVE_NONE_BUFFERED)
897 if(
This->out->pin.pin.pConnectedTo) {
898 HRESULT hr = IFilterGraph_Reconnect(
This->filter.filterInfo.pGraph,
899 &
This->out->pin.pin.IPin_iface);
923 TRACE(
"(%p)->(%p %p)\n",
This, prtInterleave, prtPreroll);
926 This->interleave = *prtInterleave;
928 This->preroll = *prtPreroll;
936 FIXME(
"(%p)->(%p %p)\n",
This, prtInterleave, prtPreroll);
959 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
965 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
971 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
978 FIXME(
"(%p)->(%p)\n",
This, pCapabilities);
986 FIXME(
"(%p)->(%p)\n",
This, pCapabilities);
1067 FIXME(
"(%p)->(%p %x %p %x)\n",
This, pCurrent, dwCurrentFlags, pStop, dwStopFlags);
1075 FIXME(
"(%p)->(%p %p)\n",
This, pCurrent, pStop);
1083 FIXME(
"(%p)->(%p %p)\n",
This, pEarliest, pLatest);
1104 FIXME(
"(%p)->(%p)\n",
This, pllPreroll);
1140 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
1146 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1152 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1159 return IBaseFilter_GetClassID(&
This->filter.IBaseFilter_iface, pClassID);
1204 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
1210 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1216 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1240 TRACE(
"(%p)->(%p AM_MEDIA_TYPE(%p))\n",
base, pReceivePin, pmt);
1243 hr = IPin_QueryDirection(pReceivePin, &
dir);
1257 TRACE(
"(%p)->(%d %p)\n",
base, iPosition, amt);
1264 amt->majortype = MEDIATYPE_Stream;
1265 amt->subtype = MEDIASUBTYPE_Avi;
1266 amt->bFixedSizeSamples =
TRUE;
1267 amt->bTemporalCompression =
FALSE;
1268 amt->lSampleSize = 1;
1272 amt->pbFormat =
NULL;
1282 TRACE(
"(%p)->(%p %p)\n",
base, pPin, pAlloc);
1288 hr = IMemInputPin_GetAllocatorRequirements(pPin, &req);
1295 hr = IMemAllocator_SetProperties(*pAlloc, &req, &actual);
1299 return IMemInputPin_NotifyAllocator(pPin, *pAlloc,
TRUE);
1337 *
ppv = &
This->out->IQualityControl_iface;
1351 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1357 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1367 TRACE(
"(%p)->(%p AM_MEDIA_TYPE(%p))\n",
This, pReceivePin, pmt);
1374 for(
i=0;
i<
This->input_pin_no;
i++) {
1375 if(!
This->in[
i]->pin.pin.pConnectedTo)
1378 hr = IFilterGraph_Reconnect(
This->filter.filterInfo.pGraph, &
This->in[
i]->pin.pin.IPin_iface);
1386 IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1394 TRACE(
"(%p)->(%p AM_MEDIA_TYPE(%p)\n",
This, pConnector, pmt);
1408 IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1450 TRACE(
"(%p)->(AM_MEDIA_TYPE(%p))\n",
This, pmt);
1466 FIXME(
"(%p)->(%p %p)\n",
This, apPin, nPin);
1530 return IPin_QueryInterface(&
This->out->pin.pin.IPin_iface,
riid,
ppv);
1536 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1542 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1549 FIXME(
"(%p)->(%p { 0x%x %u %s %s })\n",
This, pSelf,
1550 q.Type,
q.Proportion,
1577 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) &&
1578 IsEqualIID(&pmt->formattype, &FORMAT_WaveFormatEx))
1580 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Interleaved) &&
1581 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo))
1583 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1584 (
IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo) ||
1585 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo)))
1615 hr = IMediaSample_QueryInterface(pSample, &IID_IMediaSample2, (
void**)&ms2);
1621 IMediaSample2_Release(ms2);
1626 frame =
props.pbBuffer;
1630 hr = IMediaSample_GetPointer(pSample, &frame);
1633 size = IMediaSample_GetActualDataLength(pSample);
1639 hr = IMediaSample_GetTime(pSample, &
start, &stop);
1643 if(avimuxin->
stop>stop)
1646 if(avimux->
start == -1)
1648 if(avimux->
stop < stop)
1649 avimux->
stop = stop;
1661 avimuxin->
stop = stop;
1663 while(--frames_no) {
1668 hr = IMediaSample_SetActualDataLength(sample, 0);
1670 hr = IMediaSample_SetDiscontinuity(sample,
TRUE);
1672 hr = IMediaSample_SetSyncPoint(sample,
FALSE);
1675 IMediaSample_Release(sample);
1683 max_size = IMediaSample_GetSize(sample);
1686 hr = IMediaSample_SetActualDataLength(sample,
size);
1688 hr = IMediaSample_SetDiscontinuity(sample,
FALSE);
1693 hr = IMediaSample_GetPointer(sample, &
buf);
1698 IMediaSample_Release(sample);
1759 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1765 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1773 TRACE(
"(%p:%s)->(%p AM_MEDIA_TYPE(%p))\n",
This,
1786 TRACE(
"(%p:%s)->(%p AM_MEDIA_TYPE(%p))\n",
This,
1797 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1798 IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) {
1811 avimuxin->
stop = -1;
1857 hr = IMediaSample_GetPointer(
cur, (
BYTE**)&prev);
1864 IMediaSample_Release(
cur);
1918 TRACE(
"(%p:%s)->(AM_MEDIA_TYPE(%p))\n",
This,
2012 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
2019 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
2038 ptStop, bSendExtra, dwCookie);
2077 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
2084 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
2112 pAllocator, bReadOnly);
2118 hr = IMemAllocator_GetProperties(pAllocator, &
props);
2162 pSamples, nSamples, nSamplesProcessed);
2164 for(*nSamplesProcessed=0; *nSamplesProcessed<nSamples; (*nSamplesProcessed)++)
2182 if(!
This->out->pin.pMemInputPin)
2185 hr = IMemInputPin_ReceiveCanBlock(
This->out->pin.pMemInputPin);
2217 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
2224 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
2238 LPCOLESTR pszPropName,
VARIANT *pVar)
2271 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
2278 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
2287 q.Type,
q.Proportion,
2312 static const WCHAR name[] = {
'I',
'n',
'p',
'u',
't',
' ',
'0',
'0',0};
2364 static const WCHAR output_name[] = {
'A',
'V',
'I',
' ',
'O',
'u',
't',0};
2370 TRACE(
"(%p)\n", pUnkOuter);
static HRESULT WINAPI AviMuxOut_Disconnect(IPin *iface)
static const IMediaSeekingVtbl MediaSeekingVtbl
static HRESULT WINAPI AviMuxIn_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *nPin)
static HRESULT WINAPI PersistMediaPropertyBag_Load(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, IErrorLog *pErrorLog)
static HRESULT WINAPI AviMuxOut_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI MediaSeeking_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
static HRESULT WINAPI ConfigAviMux_GetMasterStream(IConfigAviMux *iface, LONG *pStream)
static const BaseInputPinFuncTable AviMuxIn_BaseInputFuncTable
static HRESULT WINAPI MediaSeeking_QueryInterface(IMediaSeeking *iface, REFIID riid, void **ppv)
static HRESULT queue_sample(AviMux *avimux, AviMuxIn *avimuxin, IMediaSample *sample)
static HRESULT WINAPI AviMuxIn_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
static HRESULT WINAPI AviMuxOut_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
static HRESULT idx1_add_entry(AviMux *avimux, DWORD ckid, DWORD flags, DWORD off, DWORD len)
static ULONG WINAPI AviMuxIn_AddRef(IPin *iface)
static LONG WINAPI AviMuxOut_GetMediaTypeVersion(BasePin *base)
static HRESULT WINAPI AviMuxOut_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
static const IPersistMediaPropertyBagVtbl PersistMediaPropertyBagVtbl
static AviMux * impl_from_BaseFilter(BaseFilter *filter)
static HRESULT WINAPI MediaSeeking_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
static AviMux * impl_from_IConfigInterleaving(IConfigInterleaving *iface)
static ULONG WINAPI AviMuxOut_Release(IPin *iface)
static const IPropertyBagVtbl AviMuxIn_PropertyBagVtbl
static HRESULT WINAPI AviMuxOut_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI AviMuxOut_ConnectedTo(IPin *iface, IPin **pPin)
static HRESULT WINAPI PersistMediaPropertyBag_Save(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
static HRESULT WINAPI AviMuxOut_DecideAllocator(BaseOutputPin *base, IMemInputPin *pPin, IMemAllocator **pAlloc)
static const BaseFilterFuncTable filter_func_table
static AviMux * impl_from_IPersistMediaPropertyBag(IPersistMediaPropertyBag *iface)
static HRESULT WINAPI AviMuxIn_Disconnect(IPin *iface)
static HRESULT WINAPI AviMuxOut_BeginFlush(IPin *iface)
static const IConfigInterleavingVtbl ConfigInterleavingVtbl
static HRESULT WINAPI ConfigInterleaving_get_Interleaving(IConfigInterleaving *iface, REFERENCE_TIME *prtInterleave, REFERENCE_TIME *prtPreroll)
static AviMuxIn * AviMuxIn_from_IAMStreamControl(IAMStreamControl *iface)
static HRESULT flush_queue(AviMux *avimux, AviMuxIn *avimuxin, BOOL closing)
static ULONG WINAPI AviMuxIn_Release(IPin *iface)
static ULONG WINAPI AviMuxOut_QualityControl_AddRef(IQualityControl *iface)
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *pProps)
static HRESULT WINAPI AviMuxIn_BeginFlush(IPin *iface)
static HRESULT WINAPI AviMuxIn_ReceiveConnection(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI AviMuxOut_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
static HRESULT WINAPI AviMuxOut_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *nPin)
static HRESULT WINAPI AviMuxIn_Receive(BaseInputPin *base, IMediaSample *pSample)
static AviMux * impl_from_IConfigAviMux(IConfigAviMux *iface)
static HRESULT WINAPI MediaSeeking_IsFormatSupported(IMediaSeeking *iface, const GUID *pFormat)
static HRESULT WINAPI AviMuxIn_PropertyBag_QueryInterface(IPropertyBag *iface, REFIID riid, void **ppv)
static HRESULT WINAPI MediaSeeking_GetDuration(IMediaSeeking *iface, LONGLONG *pDuration)
static HRESULT WINAPI AviMux_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
static HRESULT WINAPI AviMuxIn_QueryId(IPin *iface, LPWSTR *Id)
static HRESULT WINAPI AviMuxIn_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
static ULONG WINAPI AviMuxOut_AddRef(IPin *iface)
static HRESULT WINAPI AviMuxIn_EndOfStream(IPin *iface)
static HRESULT WINAPI AviMuxOut_ReceiveConnection(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)
static const IConfigAviMuxVtbl ConfigAviMuxVtbl
static HRESULT WINAPI AviMux_Pause(IBaseFilter *iface)
static AviMux * impl_from_IBaseFilter(IBaseFilter *iface)
static HRESULT WINAPI AviMuxOut_QueryId(IPin *iface, LPWSTR *Id)
static ULONG WINAPI AviMuxIn_PropertyBag_AddRef(IPropertyBag *iface)
static const IQualityControlVtbl AviMuxOut_QualityControlVtbl
static AviMux * impl_from_IMediaSeeking(IMediaSeeking *iface)
static HRESULT WINAPI ConfigInterleaving_get_Mode(IConfigInterleaving *iface, InterleavingMode *pMode)
static HRESULT WINAPI MediaSeeking_CheckCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
static HRESULT out_write(AviMux *This, const void *data, int size)
static HRESULT WINAPI MediaSeeking_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
static HRESULT WINAPI AviMux_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *pInfo)
static ULONG WINAPI AviMuxIn_AMStreamControl_Release(IAMStreamControl *iface)
static const IQualityControlVtbl AviMuxIn_QualityControlVtbl
static HRESULT WINAPI MediaSeeking_GetPreroll(IMediaSeeking *iface, LONGLONG *pllPreroll)
static HRESULT out_seek(AviMux *This, int pos)
static HRESULT WINAPI AviMuxOut_AttemptConnection(BasePin *base, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
static ULONG WINAPI AviMuxOut_QualityControl_Release(IQualityControl *iface)
static HRESULT WINAPI MediaSeeking_SetRate(IMediaSeeking *iface, double dRate)
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocator(IMemInputPin *iface, IMemAllocator **ppAllocator)
IUnknown *WINAPI QCAP_createAVIMux(IUnknown *pUnkOuter, HRESULT *phr)
static HRESULT WINAPI ConfigAviMux_SetOutputCompatibilityIndex(IConfigAviMux *iface, BOOL fOldIndex)
static HRESULT WINAPI SpecifyPropertyPages_GetPages(ISpecifyPropertyPages *iface, CAUUID *pPages)
static HRESULT out_flush(AviMux *This)
static HRESULT WINAPI AviMuxIn_AMStreamControl_QueryInterface(IAMStreamControl *iface, REFIID riid, void **ppv)
static HRESULT WINAPI AviMuxIn_PropertyBag_Write(IPropertyBag *iface, LPCOLESTR pszPropName, VARIANT *pVar)
static HRESULT WINAPI AviMuxIn_EndFlush(IPin *iface)
static HRESULT WINAPI AviMuxOut_QualityControl_SetSink(IQualityControl *iface, IQualityControl *piqc)
static ULONG WINAPI AviMuxIn_AMStreamControl_AddRef(IAMStreamControl *iface)
static ULONG WINAPI ConfigInterleaving_Release(IConfigInterleaving *iface)
static HRESULT WINAPI ConfigAviMux_GetOutputCompatibilityIndex(IConfigAviMux *iface, BOOL *pfOldIndex)
static HRESULT WINAPI AviMuxIn_MemInputPin_Receive(IMemInputPin *iface, IMediaSample *pSample)
static HRESULT WINAPI PersistMediaPropertyBag_GetClassID(IPersistMediaPropertyBag *iface, CLSID *pClassID)
static const IBaseFilterVtbl AviMuxVtbl
static HRESULT WINAPI PersistMediaPropertyBag_InitNew(IPersistMediaPropertyBag *iface)
static HRESULT WINAPI AviMuxOut_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
static const IPinVtbl AviMuxIn_PinVtbl
static HRESULT WINAPI AviMuxIn_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI MediaSeeking_GetRate(IMediaSeeking *iface, double *pdRate)
static HRESULT WINAPI MediaSeeking_SetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
static HRESULT WINAPI AviMuxIn_CheckMediaType(BasePin *base, const AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI ConfigAviMux_SetMasterStream(IConfigAviMux *iface, LONG iStream)
static AviMux * impl_from_out_IQualityControl(IQualityControl *iface)
static HRESULT WINAPI AviMuxIn_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
static HRESULT WINAPI AviMuxIn_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
static HRESULT WINAPI AviMuxOut_BreakConnect(BaseOutputPin *base)
static HRESULT WINAPI AviMuxIn_AMStreamControl_StartAt(IAMStreamControl *iface, const REFERENCE_TIME *ptStart, DWORD dwCookie)
static AviMux * impl_from_in_IPin(IPin *iface)
static HRESULT WINAPI MediaSeeking_GetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
static const IAMStreamControlVtbl AviMuxIn_AMStreamControlVtbl
static HRESULT WINAPI AviMux_QueryVendorInfo(IBaseFilter *iface, LPWSTR *pVendorInfo)
static ULONG WINAPI AviMuxIn_QualityControl_AddRef(IQualityControl *iface)
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveMultiple(IMemInputPin *iface, IMediaSample **pSamples, LONG nSamples, LONG *nSamplesProcessed)
static AviMuxIn * AviMuxIn_from_IPin(IPin *iface)
static HRESULT WINAPI AviMuxOut_EndOfStream(IPin *iface)
static AviMux * impl_from_out_IPin(IPin *iface)
static ULONG WINAPI PersistMediaPropertyBag_AddRef(IPersistMediaPropertyBag *iface)
static IPin *WINAPI AviMux_GetPin(BaseFilter *iface, int pos)
static HRESULT WINAPI ConfigAviMux_QueryInterface(IConfigAviMux *iface, REFIID riid, void **ppv)
static ULONG WINAPI MediaSeeking_AddRef(IMediaSeeking *iface)
static ULONG WINAPI ConfigAviMux_AddRef(IConfigAviMux *iface)
static AviMux * impl_from_ISpecifyPropertyPages(ISpecifyPropertyPages *iface)
static HRESULT WINAPI AviMux_QueryInterface(IBaseFilter *iface, REFIID riid, void **ppv)
#define AVISUPERINDEX_ENTRIES
static HRESULT WINAPI MediaSeeking_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
static HRESULT WINAPI AviMuxIn_AMStreamControl_StopAt(IAMStreamControl *iface, const REFERENCE_TIME *ptStop, BOOL bSendExtra, DWORD dwCookie)
static HRESULT WINAPI AviMuxIn_QueryInterface(IPin *iface, REFIID riid, void **ppv)
static HRESULT WINAPI AviMuxOut_QualityControl_Notify(IQualityControl *iface, IBaseFilter *pSelf, Quality q)
static ULONG WINAPI AviMuxIn_MemInputPin_Release(IMemInputPin *iface)
static HRESULT WINAPI AviMuxOut_GetMediaType(BasePin *base, int iPosition, AM_MEDIA_TYPE *amt)
static LONG WINAPI AviMuxIn_GetMediaTypeVersion(BasePin *base)
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveCanBlock(IMemInputPin *iface)
static HRESULT WINAPI MediaSeeking_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
static const IPinVtbl AviMuxOut_PinVtbl
static HRESULT WINAPI AviMuxIn_GetMediaType(BasePin *base, int iPosition, AM_MEDIA_TYPE *amt)
static ULONG WINAPI AviMux_Release(IBaseFilter *iface)
static HRESULT create_input_pin(AviMux *)
static ULONG WINAPI ConfigAviMux_Release(IConfigAviMux *iface)
static HRESULT WINAPI MediaSeeking_QueryPreferredFormat(IMediaSeeking *iface, GUID *pFormat)
static ULONG WINAPI SpecifyPropertyPages_AddRef(ISpecifyPropertyPages *iface)
static HRESULT WINAPI AviMuxIn_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI AviMuxIn_PropertyBag_Read(IPropertyBag *iface, LPCOLESTR pszPropName, VARIANT *pVar, IErrorLog *pErrorLog)
static ULONG WINAPI SpecifyPropertyPages_Release(ISpecifyPropertyPages *iface)
static HRESULT WINAPI MediaSeeking_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
static HRESULT WINAPI AviMuxOut_QueryInterface(IPin *iface, REFIID riid, void **ppv)
static ULONG WINAPI MediaSeeking_Release(IMediaSeeking *iface)
static HRESULT WINAPI AviMuxIn_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
static ULONG WINAPI AviMuxIn_MemInputPin_AddRef(IMemInputPin *iface)
static AviMuxIn * AviMuxIn_from_IMemInputPin(IMemInputPin *iface)
static HRESULT WINAPI AviMuxIn_QualityControl_Notify(IQualityControl *iface, IBaseFilter *pSelf, Quality q)
static HRESULT WINAPI ConfigInterleaving_put_Mode(IConfigInterleaving *iface, InterleavingMode mode)
static HRESULT WINAPI AviMuxIn_AMStreamControl_GetInfo(IAMStreamControl *iface, AM_STREAM_INFO *pInfo)
static HRESULT WINAPI AviMuxIn_MemInputPin_NotifyAllocator(IMemInputPin *iface, IMemAllocator *pAllocator, BOOL bReadOnly)
static HRESULT WINAPI ConfigInterleaving_put_Interleaving(IConfigInterleaving *iface, const REFERENCE_TIME *prtInterleave, const REFERENCE_TIME *prtPreroll)
static AviMuxIn * AviMuxIn_from_IPropertyBag(IPropertyBag *iface)
static HRESULT WINAPI AviMuxIn_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
static ULONG WINAPI AviMuxIn_PropertyBag_Release(IPropertyBag *iface)
#define AVISTDINDEX_ENTRIES
static ULONG WINAPI ConfigInterleaving_AddRef(IConfigInterleaving *iface)
static ULONG WINAPI AviMuxIn_QualityControl_Release(IQualityControl *iface)
static HRESULT WINAPI ConfigInterleaving_QueryInterface(IConfigInterleaving *iface, REFIID riid, void **ppv)
static HRESULT WINAPI PersistMediaPropertyBag_QueryInterface(IPersistMediaPropertyBag *iface, REFIID riid, void **ppv)
static HRESULT WINAPI AviMuxIn_ConnectedTo(IPin *iface, IPin **pPin)
static const BaseOutputPinFuncTable AviMuxOut_BaseOutputFuncTable
static ULONG WINAPI PersistMediaPropertyBag_Release(IPersistMediaPropertyBag *iface)
static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl
static LONG WINAPI AviMux_GetPinCount(BaseFilter *iface)
static HRESULT WINAPI SpecifyPropertyPages_QueryInterface(ISpecifyPropertyPages *iface, REFIID riid, void **ppv)
static HRESULT WINAPI AviMuxIn_MemInputPin_QueryInterface(IMemInputPin *iface, REFIID riid, void **ppv)
static AviMuxIn * AviMuxIn_from_IQualityControl(IQualityControl *iface)
static HRESULT WINAPI AviMuxOut_EndFlush(IPin *iface)
static HRESULT WINAPI MediaSeeking_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
static HRESULT WINAPI AviMuxOut_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
static const IMemInputPinVtbl AviMuxIn_MemInputPinVtbl
static HRESULT WINAPI AviMuxOut_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
static HRESULT WINAPI AviMux_EnumPins(IBaseFilter *iface, IEnumPins **ppEnum)
static HRESULT WINAPI AviMux_Stop(IBaseFilter *iface)
static HRESULT WINAPI AviMuxIn_QualityControl_SetSink(IQualityControl *iface, IQualityControl *piqc)
static HRESULT WINAPI AviMux_FindPin(IBaseFilter *iface, LPCWSTR Id, IPin **ppPin)
#define ckidAVISUPERINDEX
#define FCC(ch0, ch1, ch2, ch3)
#define ckidMAINAVIHEADER
#define AVISTDINDEX_DELTAFRAME
struct _aviextheader AVIEXTHEADER
struct _rifflist RIFFLIST
#define AVI_INDEX_OF_INDEXES
struct _avimainheader AVIMAINHEADER
#define AVI_INDEX_OF_CHUNKS
struct _riffchunk RIFFCHUNK
enum _PinDirection PIN_DIRECTION
@ AM_SAMPLE_TIMEDISCONTINUITY
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
const GUID IID_IBaseFilter
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble GLdouble q
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define FOURCC(a, b, c, d)
#define memcpy(s1, s2, n)
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
const GUID IID_IPropertyBag
const GUID IID_ISpecifyPropertyPages
#define IsEqualIID(riid1, riid2)
DWORD ObjectRefCount(BOOL increment)
HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseInputPinImpl_EndFlush(IPin *iface)
HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *pClock)
ULONG WINAPI BaseInputPinImpl_Release(IPin *iface)
HRESULT WINAPI BaseOutputPinImpl_InitAllocator(BaseOutputPin *This, IMemAllocator **pMemAlloc)
HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *cPin)
HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin *iface)
HRESULT WINAPI BasePinImpl_ConnectedTo(IPin *iface, IPin **ppPin)
HRESULT WINAPI BasePinImpl_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
HRESULT WINAPI BaseFilterImpl_GetClassID(IBaseFilter *iface, CLSID *pClsid)
ULONG WINAPI BaseFilterImpl_Release(IBaseFilter *iface)
HRESULT WINAPI BasePinImpl_QueryId(IPin *iface, LPWSTR *Id)
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin *This, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
HRESULT BaseInputPin_Construct(const IPinVtbl *InputPin_Vtbl, LONG inputpin_size, const PIN_INFO *pPinInfo, const BaseInputPinFuncTable *pBaseInputFuncsTable, LPCRITICAL_SECTION pCritSec, IMemAllocator *, IPin **ppPin)
HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin *iface)
ULONG WINAPI BaseFilterImpl_AddRef(IBaseFilter *iface)
HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin *iface)
HRESULT WINAPI BaseFilterImpl_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
HRESULT WINAPI BaseOutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, LONG outputpin_size, const PIN_INFO *pPinInfo, const BaseOutputPinFuncTable *pBaseOutputFuncsTable, LPCRITICAL_SECTION pCritSec, IPin **ppPin)
ULONG WINAPI BaseOutputPinImpl_Release(IPin *iface)
HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *pGraph, LPCWSTR pName)
HRESULT WINAPI BaseInputPinImpl_BeginFlush(IPin *iface)
HRESULT WINAPI BaseOutputPinImpl_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter *iface, IReferenceClock **ppClock)
HRESULT WINAPI BasePinImpl_Disconnect(IPin *iface)
HRESULT WINAPI BasePinImpl_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
HRESULT WINAPI BasePinImpl_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin *iface)
HRESULT WINAPI BaseInputPinImpl_Connect(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)
HRESULT WINAPI BaseInputPinImpl_EndOfStream(IPin *iface)
HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter *iface, IEnumPins **ppEnum)
HRESULT WINAPI BaseFilter_Init(BaseFilter *This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable *pBaseFuncsTable)
BYTE ix_data[FIELD_OFFSET(AVISTDINDEX, aIndex[AVISTDINDEX_ENTRIES])]
IMediaSample * samples_head
IAMStreamControl IAMStreamControl_iface
struct AviMuxIn::@258 * strf
IPropertyBag IPropertyBag_iface
IQualityControl IQualityControl_iface
REFERENCE_TIME avg_time_per_frame
BYTE indx_data[FIELD_OFFSET(AVISUPERINDEX, aIndex[AVISUPERINDEX_ENTRIES])]
IMemAllocator * samples_allocator
IQualityControl IQualityControl_iface
IPersistMediaPropertyBag IPersistMediaPropertyBag_iface
IMediaSeeking IMediaSeeking_iface
IConfigInterleaving IConfigInterleaving_iface
ISpecifyPropertyPages ISpecifyPropertyPages_iface
IConfigAviMux IConfigAviMux_iface
AviMuxIn * in[MAX_PIN_NO-1]
REFERENCE_TIME interleave
IBaseFilter IBaseFilter_iface
CRITICAL_SECTION csFilter
DWORD dwSuggestedBufferSize
AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY]
struct _avisuperindex::_avisuperindex_entry aIndex[ANYSIZE_ARRAY]
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
#define VFW_E_INVALID_DIRECTION
#define VFW_E_START_TIME_AFTER_END
#define VFW_S_NO_MORE_ITEMS
static const WCHAR props[]
#define CLASS_E_NOAGGREGATION