26#define AVISUPERINDEX_ENTRIES 2000
27#define AVISTDINDEX_ENTRIES 4000
28#define ALIGN(x) ((x+1)/2*2)
123 return &
filter->source.pin;
124 else if (index <= filter->input_pin_no)
136 for (
i = 0;
i <
filter->input_pin_no; ++
i)
138 IPin_Disconnect(&
filter->in[
i]->pin.pin.IPin_iface);
139 IMemAllocator_Release(
filter->in[
i]->samples_allocator);
156 else if (
IsEqualGUID(iid, &IID_IConfigInterleaving))
157 *
out = &
filter->IConfigInterleaving_iface;
160 else if (
IsEqualGUID(iid, &IID_IPersistMediaPropertyBag))
161 *
out = &
filter->IPersistMediaPropertyBag_iface;
163 *
out = &
filter->ISpecifyPropertyPages_iface;
179 hr = IStream_Write(
This->stream,
This->buf,
This->buf_pos, &written);
182 if (written !=
This->buf_pos)
199 hr = IStream_Seek(
This->stream,
li, STREAM_SEEK_SET,
NULL);
216 chunk_size =
sizeof(
This->buf) -
This->buf_pos;
223 This->buf_pos += chunk_size;
224 This->out_pos += chunk_size;
246 avimux->
idx1 = new_idx;
275 hr = IMediaSample_GetPointer(*head_prev, (
BYTE**)&prev);
281 size = IMediaSample_GetActualDataLength(
sample);
341 IMediaSample_Release(
sample);
356 IMediaSample_Release(
sample);
363 IMediaSample_Release(
sample);
368 IMediaSample_Release(
sample);
374 IMediaSample_Release(
sample);
378 IMediaSample_Release(
sample);
405 IMediaSample_AddRef(
sample);
421 int idx1_off, empty_stream;
423 empty_stream =
This->cur_stream;
424 for(
i=empty_stream+1; ;
i++) {
425 if(
i >=
This->input_pin_no-1)
427 if(
i == empty_stream)
430 This->cur_stream =
i;
436 idx1_off =
This->size;
438 rc.
cb =
This->idx1_entries *
sizeof(*
This->idx1);
454 for(
i=0;
i<
This->input_pin_no;
i++) {
455 if(!
This->in[
i]->pin.pin.peer)
462 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].qwOffset =
This->in[
i]->ix_off;
463 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwSize =
sizeof(
This->in[
i]->ix_data);
464 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwDuration =
This->in[
i]->strh.dwLength;
465 if(
This->in[
i]->indx->nEntriesInUse) {
466 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse].dwDuration -=
467 This->in[
i]->indx->aIndex[
This->in[
i]->indx->nEntriesInUse-1].dwDuration;
469 This->in[
i]->indx->nEntriesInUse++;
479 rl.
fcc =
FCC(
'R',
'I',
'F',
'F');
486 rl.
fcc =
FCC(
'L',
'I',
'S',
'T');
494 This->avih.dwTotalFrames = (
This->stop-
This->start) / 10 /
This->avih.dwMicroSecPerFrame;
499 for(
i=0;
i<
This->input_pin_no;
i++) {
500 if(!
This->in[
i]->pin.pin.peer)
504 This->in[
i]->strf->cb +
sizeof(
This->in[
i]->indx_data);
523 rl.
cb =
sizeof(dmlh) +
sizeof(
FOURCC);
529 memset(&dmlh, 0,
sizeof(dmlh));
540 IStream_Release(
This->stream);
553 if(
This->mode != INTERLEAVE_FULL) {
554 FIXME(
"mode not supported (%d)\n",
This->mode);
558 for(
i=0;
i<
This->input_pin_no;
i++) {
562 if(!
This->in[
i]->pin.pin.peer)
565 hr = IPin_QueryInterface(
This->in[
i]->pin.pin.peer,
566 &IID_IMediaSeeking, (
void**)&ms);
570 hr = IMediaSeeking_GetPositions(ms, &
cur, &stop);
572 IMediaSeeking_Release(ms);
576 FIXME(
"Use IMediaSeeking to fill stream header\n");
577 IMediaSeeking_Release(ms);
580 if (
This->source.pMemInputPin)
582 hr = IMemInputPin_QueryInterface(
This->source.pMemInputPin,
583 &IID_IStream, (
void **)&
This->stream);
588 This->idx1_entries = 0;
589 if(!
This->idx1_size) {
590 This->idx1_size = 1024;
599 for(
i=0;
i<
This->input_pin_no;
i++) {
600 if(!
This->in[
i]->pin.pin.peer)
603 This->avih.dwStreams++;
605 +
This->in[
i]->strf->cb +
sizeof(
This->in[
i]->indx_data);
607 This->in[
i]->strh.dwScale =
MulDiv(
This->in[
i]->avg_time_per_frame,
This->interleave, 10000000);
608 This->in[
i]->strh.dwRate =
This->interleave;
610 hr = IMemAllocator_Commit(
This->in[
i]->pin.pAllocator);
614 IStream_Release(
This->stream);
627 for(
i=0;
i<
This->input_pin_no;
i++) {
628 if(!
This->in[
i]->pin.pin.peer)
632 This->size +=
sizeof(
This->in[
i]->ix_data);
633 This->in[
i]->ix->fcc =
FCC(
'i',
'x',
'0'+stream_id/10,
'0'+stream_id%10);
635 This->in[
i]->ix->wLongsPerEntry = 2;
636 This->in[
i]->ix->bIndexSubType = 0;
638 This->in[
i]->ix->dwChunkId =
FCC(
'0'+stream_id/10,
'0'+stream_id%10,
'd',
'b');
639 This->in[
i]->ix->qwBaseOffset = 0;
643 This->in[
i]->indx->wLongsPerEntry = 4;
644 This->in[
i]->indx->bIndexSubType = 0;
646 This->in[
i]->indx->dwChunkId =
This->in[
i]->ix->dwChunkId;
647 This->in[
i]->stream_id = stream_id++;
656 This->avih.dwMicroSecPerFrame =
This->in[0]->avg_time_per_frame/10;
657 This->avih.dwPaddingGranularity = 1;
683 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
689 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
695 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
701 FIXME(
"filter %p, index %ld, stub!\n",
This, iStream);
747 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
753 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
759 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
769 if(
mode>INTERLEAVE_NONE_BUFFERED)
773 if(
This->source.pin.peer) {
774 HRESULT hr = IFilterGraph_Reconnect(
This->filter.graph, &
This->source.pin.IPin_iface);
798 TRACE(
"(%p)->(%p %p)\n",
This, prtInterleave, prtPreroll);
801 This->interleave = *prtInterleave;
803 This->preroll = *prtPreroll;
811 FIXME(
"(%p)->(%p %p)\n",
This, prtInterleave, prtPreroll);
834 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
840 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
846 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
853 FIXME(
"(%p)->(%p)\n",
This, pCapabilities);
861 FIXME(
"(%p)->(%p)\n",
This, pCapabilities);
942 FIXME(
"(%p)->(%p %#lx %p %#lx)\n",
This, pCurrent, dwCurrentFlags, pStop, dwStopFlags);
950 FIXME(
"(%p)->(%p %p)\n",
This, pCurrent, pStop);
958 FIXME(
"(%p)->(%p %p)\n",
This, pEarliest, pLatest);
1015 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
1021 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1027 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1034 return IBaseFilter_GetClassID(&
This->filter.IBaseFilter_iface, pClassID);
1079 return IBaseFilter_QueryInterface(&
This->filter.IBaseFilter_iface,
riid,
ppv);
1085 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1091 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1144 hr = IPin_QueryDirection(pReceivePin, &
dir);
1151 for (
i = 0;
i <
filter->input_pin_no; ++
i)
1153 if (!
filter->in[
i]->pin.pin.peer)
1159 IPin_Disconnect(&iface->
pin.IPin_iface);
1169 TRACE(
"(%p)->(%d %p)\n",
base, iPosition, amt);
1174 amt->majortype = MEDIATYPE_Stream;
1175 amt->subtype = MEDIASUBTYPE_Avi;
1176 amt->bFixedSizeSamples =
TRUE;
1177 amt->bTemporalCompression =
FALSE;
1178 amt->lSampleSize = 1;
1182 amt->pbFormat =
NULL;
1192 TRACE(
"(%p)->(%p %p)\n",
base, pPin, pAlloc);
1195 CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (
void **)pAlloc)))
1197 ERR(
"Failed to create allocator, hr %#lx.\n",
hr);
1201 hr = IMemInputPin_GetAllocatorRequirements(pPin, &req);
1208 hr = IMemAllocator_SetProperties(*pAlloc, &req, &actual);
1212 return IMemInputPin_NotifyAllocator(pPin, *pAlloc,
TRUE);
1233 return IPin_QueryInterface(&
This->source.pin.IPin_iface,
riid,
ppv);
1239 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1245 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1253 FIXME(
"filter %p, sender %p, type %#x, proportion %ld, late %s, timestamp %s, stub!\n",
1254 filter, sender,
q.Type,
q.Proportion,
1288 *
out = &pin->
pin.IMemInputPin_iface;
1302 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) &&
1303 IsEqualIID(&pmt->formattype, &FORMAT_WaveFormatEx))
1305 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Interleaved) &&
1306 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo))
1308 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1309 (
IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo) ||
1310 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo)))
1328 TRACE(
"pin %p, pSample %p.\n", avimuxin, pSample);
1330 hr = IMediaSample_QueryInterface(pSample, &IID_IMediaSample2, (
void**)&ms2);
1336 IMediaSample2_Release(ms2);
1341 frame =
props.pbBuffer;
1345 hr = IMediaSample_GetPointer(pSample, &frame);
1348 size = IMediaSample_GetActualDataLength(pSample);
1351 if(!avimuxin->
pin.pin.mt.bTemporalCompression)
1354 hr = IMediaSample_GetTime(pSample, &
start, &stop);
1358 if(avimuxin->
stop>stop)
1361 if(avimux->
start == -1)
1363 if(avimux->
stop < stop)
1364 avimux->
stop = stop;
1376 avimuxin->
stop = stop;
1378 while(--frames_no) {
1383 hr = IMediaSample_SetActualDataLength(
sample, 0);
1390 IMediaSample_Release(
sample);
1413 IMediaSample_Release(
sample);
1427 if(
IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1428 IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) {
1441 avimuxin->
stop = -1;
1483 IMediaSample_Release(
cur);
1516 return IPin_QueryInterface(&avimuxin->
pin.pin.IPin_iface,
riid,
ppv);
1523 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1530 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1543 FIXME(
"iface %p, stop %p, send_extra %d, cookie %#lx, stub!\n", iface, stop, send_extra,
cookie);
1550 FIXME(
"iface %p, info %p, stub!\n", iface,
info);
1572 return IPin_QueryInterface(&avimuxin->
pin.pin.IPin_iface,
riid,
ppv);
1579 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1586 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1594 TRACE(
"pin %p, ppAllocator %p.\n", avimuxin, ppAllocator);
1599 IMemAllocator_AddRef(avimuxin->
pin.pAllocator);
1600 *ppAllocator = avimuxin->
pin.pAllocator;
1611 TRACE(
"pin %p, pAllocator %p, bReadOnly %d.\n", avimuxin, pAllocator, bReadOnly);
1617 hr = IMemAllocator_GetProperties(pAllocator, &
props);
1623 return IMemAllocator_SetProperties(avimuxin->
pin.pAllocator, &
props, &
props);
1631 TRACE(
"pin %p, pProps %p.\n", avimuxin, pProps);
1646 TRACE(
"pin %p, pSample %p.\n", avimuxin, pSample);
1648 return avimuxin->
pin.pFuncsTable->pfnReceive(&avimuxin->
pin, pSample);
1657 TRACE(
"pin %p, pSamples %p, nSamples %ld, nSamplesProcessed %p.\n",
1658 avimuxin, pSamples, nSamples, nSamplesProcessed);
1660 for(*nSamplesProcessed=0; *nSamplesProcessed<nSamples; (*nSamplesProcessed)++)
1662 hr = avimuxin->
pin.pFuncsTable->pfnReceive(&avimuxin->
pin, pSamples[*nSamplesProcessed]);
1676 TRACE(
"avimuxin %p.\n", avimuxin);
1678 if(!
This->source.pMemInputPin)
1681 hr = IMemInputPin_ReceiveCanBlock(
This->source.pMemInputPin);
1706 return IPin_QueryInterface(&avimuxin->
pin.pin.IPin_iface,
riid,
ppv);
1713 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1720 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1726 FIXME(
"iface %p, name %s, value %p, error_log %p, stub!\n",
1734 FIXME(
"iface %p, name %s, value %s, stub!\n",
1756 return IPin_QueryInterface(&avimuxin->
pin.pin.IPin_iface,
riid,
ppv);
1763 return IBaseFilter_AddRef(&
This->filter.IBaseFilter_iface);
1770 return IBaseFilter_Release(&
This->filter.IBaseFilter_iface);
1776 FIXME(
"iface %p, filter %p, type %u, proportion %ld, late %s, timestamp %s, stub!\n",
1784 FIXME(
"iface %p, sink %p, stub!\n", iface,
sink);
1807 if (!(
object =
calloc(1,
sizeof(*
object))))
1817 &IID_IMemAllocator, (
void **)&
object->samples_allocator);
1826 &IID_IMemAllocator, (
void **)&
object->pin.pAllocator);
1829 IMemAllocator_Release(
object->samples_allocator);
1873 TRACE(
"Created AVI mux %p.\n", avimux);
static const IMediaSeekingVtbl MediaSeekingVtbl
static HRESULT WINAPI PersistMediaPropertyBag_Load(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, IErrorLog *pErrorLog)
static HRESULT WINAPI MediaSeeking_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
static HRESULT WINAPI ConfigAviMux_GetMasterStream(IConfigAviMux *iface, LONG *pStream)
static HRESULT WINAPI MediaSeeking_QueryInterface(IMediaSeeking *iface, REFIID riid, void **ppv)
static HRESULT queue_sample(AviMux *avimux, AviMuxIn *avimuxin, IMediaSample *sample)
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 const IPersistMediaPropertyBagVtbl PersistMediaPropertyBagVtbl
static HRESULT WINAPI MediaSeeking_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
static AviMux * impl_from_IConfigInterleaving(IConfigInterleaving *iface)
static const IPropertyBagVtbl AviMuxIn_PropertyBagVtbl
static HRESULT WINAPI PersistMediaPropertyBag_Save(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
static AviMux * impl_from_IPersistMediaPropertyBag(IPersistMediaPropertyBag *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 HRESULT avi_mux_cleanup_stream(struct strmbase_filter *iface)
static ULONG WINAPI AviMuxOut_QualityControl_AddRef(IQualityControl *iface)
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *pProps)
static HRESULT avi_mux_init_stream(struct strmbase_filter *iface)
HRESULT avi_mux_create(IUnknown *outer, IUnknown **out)
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 AviMuxIn_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
static HRESULT WINAPI AviMuxOut_QualityControl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality q)
static const IConfigAviMuxVtbl ConfigAviMuxVtbl
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 struct strmbase_pin * avi_mux_get_pin(struct strmbase_filter *iface, unsigned int index)
static HRESULT WINAPI AviMuxIn_AMStreamControl_StartAt(IAMStreamControl *iface, const REFERENCE_TIME *start, DWORD cookie)
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 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)
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 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 HRESULT WINAPI PersistMediaPropertyBag_InitNew(IPersistMediaPropertyBag *iface)
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 AviMux * impl_from_source_pin(struct strmbase_pin *iface)
static HRESULT WINAPI AviMuxIn_PropertyBag_Write(IPropertyBag *iface, const WCHAR *name, VARIANT *value)
static const struct strmbase_source_ops source_ops
static HRESULT WINAPI ConfigAviMux_SetMasterStream(IConfigAviMux *iface, LONG iStream)
static AviMux * impl_from_out_IQualityControl(IQualityControl *iface)
static AviMuxIn * impl_sink_from_strmbase_pin(struct strmbase_pin *iface)
static HRESULT source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
static AviMux * impl_from_strmbase_filter(struct strmbase_filter *filter)
static const struct strmbase_sink_ops sink_ops
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 sink_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *pmt)
static void avi_mux_destroy(struct strmbase_filter *iface)
static const struct strmbase_filter_ops filter_ops
static ULONG WINAPI AviMuxIn_QualityControl_AddRef(IQualityControl *iface)
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveMultiple(IMemInputPin *iface, IMediaSample **pSamples, LONG nSamples, LONG *nSamplesProcessed)
static void avi_mux_sink_disconnect(struct strmbase_sink *iface)
static ULONG WINAPI PersistMediaPropertyBag_AddRef(IPersistMediaPropertyBag *iface)
static HRESULT avi_mux_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt)
static HRESULT WINAPI ConfigAviMux_QueryInterface(IConfigAviMux *iface, REFIID riid, void **ppv)
static ULONG WINAPI MediaSeeking_AddRef(IMediaSeeking *iface)
static HRESULT WINAPI AviMuxIn_PropertyBag_Read(IPropertyBag *iface, const WCHAR *name, VARIANT *value, IErrorLog *error_log)
static ULONG WINAPI ConfigAviMux_AddRef(IConfigAviMux *iface)
static AviMux * impl_from_ISpecifyPropertyPages(ISpecifyPropertyPages *iface)
static HRESULT WINAPI AviMuxIn_QualityControl_Notify(IQualityControl *iface, IBaseFilter *filter, Quality q)
static HRESULT WINAPI AviMuxIn_AMStreamControl_GetInfo(IAMStreamControl *iface, AM_STREAM_INFO *info)
static HRESULT WINAPI AviMuxIn_Receive(struct strmbase_sink *base, IMediaSample *pSample)
#define AVISUPERINDEX_ENTRIES
static HRESULT WINAPI MediaSeeking_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
static HRESULT avi_mux_query_interface(struct strmbase_filter *iface, REFIID iid, void **out)
static HRESULT WINAPI AviMuxOut_DecideAllocator(struct strmbase_source *base, IMemInputPin *pPin, IMemAllocator **pAlloc)
static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
static HRESULT WINAPI AviMuxIn_QualityControl_SetSink(IQualityControl *iface, IQualityControl *sink)
static ULONG WINAPI AviMuxIn_MemInputPin_Release(IMemInputPin *iface)
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveCanBlock(IMemInputPin *iface)
static HRESULT WINAPI MediaSeeking_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt)
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_AMStreamControl_StopAt(IAMStreamControl *iface, const REFERENCE_TIME *stop, BOOL send_extra, DWORD cookie)
static ULONG WINAPI SpecifyPropertyPages_Release(ISpecifyPropertyPages *iface)
static HRESULT WINAPI MediaSeeking_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
static ULONG WINAPI MediaSeeking_Release(IMediaSeeking *iface)
static ULONG WINAPI AviMuxIn_MemInputPin_AddRef(IMemInputPin *iface)
static AviMuxIn * AviMuxIn_from_IMemInputPin(IMemInputPin *iface)
static HRESULT WINAPI ConfigInterleaving_put_Mode(IConfigInterleaving *iface, InterleavingMode mode)
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 HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
static AviMuxIn * AviMuxIn_from_IPropertyBag(IPropertyBag *iface)
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 ULONG WINAPI PersistMediaPropertyBag_Release(IPersistMediaPropertyBag *iface)
static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl
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 MediaSeeking_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
static const IMemInputPinVtbl AviMuxIn_MemInputPinVtbl
static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
#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)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
static const char * debugstr_variant(const VARIANT *var)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble GLdouble q
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum GLboolean sink
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
#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 IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define offsetof(TYPE, MEMBER)
void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table)
void strmbase_sink_cleanup(struct strmbase_sink *pin)
void strmbase_sink_init(struct strmbase_sink *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_sink_ops *ops, IMemAllocator *allocator)
void strmbase_filter_cleanup(struct strmbase_filter *filter)
void strmbase_source_cleanup(struct strmbase_source *pin)
void strmbase_filter_init(struct strmbase_filter *filter, IUnknown *outer, const CLSID *clsid, const struct strmbase_filter_ops *func_table)
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt)
BYTE ix_data[FIELD_OFFSET(AVISTDINDEX, aIndex[AVISTDINDEX_ENTRIES])]
IMediaSample * samples_head
IAMStreamControl IAMStreamControl_iface
struct AviMuxIn::@328 * strf
IPropertyBag IPropertyBag_iface
IQualityControl IQualityControl_iface
REFERENCE_TIME avg_time_per_frame
IMemAllocator * samples_allocator
IPersistMediaPropertyBag IPersistMediaPropertyBag_iface
IMediaSeeking IMediaSeeking_iface
struct strmbase_source source
IConfigInterleaving IConfigInterleaving_iface
IQualityControl IQualityControl_iface
struct strmbase_filter filter
ISpecifyPropertyPages ISpecifyPropertyPages_iface
IConfigAviMux IConfigAviMux_iface
AviMuxIn * in[MAX_PIN_NO-1]
REFERENCE_TIME interleave
DWORD dwSuggestedBufferSize
AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY]
struct _avisuperindex::_avisuperindex_entry aIndex[ANYSIZE_ARRAY]
IMediaSeeking IMediaSeeking_iface
struct strmbase_filter * filter
#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[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out