ReactOS 0.4.17-dev-966-gf06eace
avimux.c File Reference
#include "qcap_private.h"
#include "vfw.h"
#include "aviriff.h"
Include dependency graph for avimux.c:

Go to the source code of this file.

Classes

struct  AviMuxIn
 
struct  AviMux
 

Macros

#define MAX_PIN_NO   128
 
#define AVISUPERINDEX_ENTRIES   2000
 
#define AVISTDINDEX_ENTRIES   4000
 
#define ALIGN(x)   ((x+1)/2*2)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (quartz)
 
static HRESULT create_input_pin (AviMux *)
 
static AviMux * impl_from_strmbase_filter (struct strmbase_filter *filter)
 
static struct strmbase_pin * avi_mux_get_pin (struct strmbase_filter *iface, unsigned int index)
 
static void avi_mux_destroy (struct strmbase_filter *iface)
 
static HRESULT avi_mux_query_interface (struct strmbase_filter *iface, REFIID iid, void **out)
 
static HRESULT out_flush (AviMux *This)
 
static HRESULT out_seek (AviMux *This, int pos)
 
static HRESULT out_write (AviMux *This, const void *data, int size)
 
static HRESULT idx1_add_entry (AviMux *avimux, DWORD ckid, DWORD flags, DWORD off, DWORD len)
 
static HRESULT flush_queue (AviMux *avimux, AviMuxIn *avimuxin, BOOL closing)
 
static HRESULT queue_sample (AviMux *avimux, AviMuxIn *avimuxin, IMediaSample *sample)
 
static HRESULT avi_mux_cleanup_stream (struct strmbase_filter *iface)
 
static HRESULT avi_mux_init_stream (struct strmbase_filter *iface)
 
static AviMux * impl_from_IConfigAviMux (IConfigAviMux *iface)
 
static HRESULT WINAPI ConfigAviMux_QueryInterface (IConfigAviMux *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ConfigAviMux_AddRef (IConfigAviMux *iface)
 
static ULONG WINAPI ConfigAviMux_Release (IConfigAviMux *iface)
 
static HRESULT WINAPI ConfigAviMux_SetMasterStream (IConfigAviMux *iface, LONG iStream)
 
static HRESULT WINAPI ConfigAviMux_GetMasterStream (IConfigAviMux *iface, LONG *pStream)
 
static HRESULT WINAPI ConfigAviMux_SetOutputCompatibilityIndex (IConfigAviMux *iface, BOOL fOldIndex)
 
static HRESULT WINAPI ConfigAviMux_GetOutputCompatibilityIndex (IConfigAviMux *iface, BOOL *pfOldIndex)
 
static AviMux * impl_from_IConfigInterleaving (IConfigInterleaving *iface)
 
static HRESULT WINAPI ConfigInterleaving_QueryInterface (IConfigInterleaving *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ConfigInterleaving_AddRef (IConfigInterleaving *iface)
 
static ULONG WINAPI ConfigInterleaving_Release (IConfigInterleaving *iface)
 
static HRESULT WINAPI ConfigInterleaving_put_Mode (IConfigInterleaving *iface, InterleavingMode mode)
 
static HRESULT WINAPI ConfigInterleaving_get_Mode (IConfigInterleaving *iface, InterleavingMode *pMode)
 
static HRESULT WINAPI ConfigInterleaving_put_Interleaving (IConfigInterleaving *iface, const REFERENCE_TIME *prtInterleave, const REFERENCE_TIME *prtPreroll)
 
static HRESULT WINAPI ConfigInterleaving_get_Interleaving (IConfigInterleaving *iface, REFERENCE_TIME *prtInterleave, REFERENCE_TIME *prtPreroll)
 
static AviMux * impl_from_IMediaSeeking (IMediaSeeking *iface)
 
static HRESULT WINAPI MediaSeeking_QueryInterface (IMediaSeeking *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI MediaSeeking_AddRef (IMediaSeeking *iface)
 
static ULONG WINAPI MediaSeeking_Release (IMediaSeeking *iface)
 
static HRESULT WINAPI MediaSeeking_GetCapabilities (IMediaSeeking *iface, DWORD *pCapabilities)
 
static HRESULT WINAPI MediaSeeking_CheckCapabilities (IMediaSeeking *iface, DWORD *pCapabilities)
 
static HRESULT WINAPI MediaSeeking_IsFormatSupported (IMediaSeeking *iface, const GUID *pFormat)
 
static HRESULT WINAPI MediaSeeking_QueryPreferredFormat (IMediaSeeking *iface, GUID *pFormat)
 
static HRESULT WINAPI MediaSeeking_GetTimeFormat (IMediaSeeking *iface, GUID *pFormat)
 
static HRESULT WINAPI MediaSeeking_IsUsingTimeFormat (IMediaSeeking *iface, const GUID *pFormat)
 
static HRESULT WINAPI MediaSeeking_SetTimeFormat (IMediaSeeking *iface, const GUID *pFormat)
 
static HRESULT WINAPI MediaSeeking_GetDuration (IMediaSeeking *iface, LONGLONG *pDuration)
 
static HRESULT WINAPI MediaSeeking_GetStopPosition (IMediaSeeking *iface, LONGLONG *pStop)
 
static HRESULT WINAPI MediaSeeking_GetCurrentPosition (IMediaSeeking *iface, LONGLONG *pCurrent)
 
static HRESULT WINAPI MediaSeeking_ConvertTimeFormat (IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
 
static HRESULT WINAPI MediaSeeking_SetPositions (IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
 
static HRESULT WINAPI MediaSeeking_GetPositions (IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
 
static HRESULT WINAPI MediaSeeking_GetAvailable (IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
 
static HRESULT WINAPI MediaSeeking_SetRate (IMediaSeeking *iface, double dRate)
 
static HRESULT WINAPI MediaSeeking_GetRate (IMediaSeeking *iface, double *pdRate)
 
static HRESULT WINAPI MediaSeeking_GetPreroll (IMediaSeeking *iface, LONGLONG *pllPreroll)
 
static AviMux * impl_from_IPersistMediaPropertyBag (IPersistMediaPropertyBag *iface)
 
static HRESULT WINAPI PersistMediaPropertyBag_QueryInterface (IPersistMediaPropertyBag *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI PersistMediaPropertyBag_AddRef (IPersistMediaPropertyBag *iface)
 
static ULONG WINAPI PersistMediaPropertyBag_Release (IPersistMediaPropertyBag *iface)
 
static HRESULT WINAPI PersistMediaPropertyBag_GetClassID (IPersistMediaPropertyBag *iface, CLSID *pClassID)
 
static HRESULT WINAPI PersistMediaPropertyBag_InitNew (IPersistMediaPropertyBag *iface)
 
static HRESULT WINAPI PersistMediaPropertyBag_Load (IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, IErrorLog *pErrorLog)
 
static HRESULT WINAPI PersistMediaPropertyBag_Save (IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
 
static AviMux * impl_from_ISpecifyPropertyPages (ISpecifyPropertyPages *iface)
 
static HRESULT WINAPI SpecifyPropertyPages_QueryInterface (ISpecifyPropertyPages *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI SpecifyPropertyPages_AddRef (ISpecifyPropertyPages *iface)
 
static ULONG WINAPI SpecifyPropertyPages_Release (ISpecifyPropertyPages *iface)
 
static HRESULT WINAPI SpecifyPropertyPages_GetPages (ISpecifyPropertyPages *iface, CAUUID *pPages)
 
static AviMux * impl_from_source_pin (struct strmbase_pin *iface)
 
static HRESULT source_query_interface (struct strmbase_pin *iface, REFIID iid, void **out)
 
static HRESULT source_query_accept (struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
 
static HRESULT WINAPI AviMuxOut_AttemptConnection (struct strmbase_source *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 
static HRESULT source_get_media_type (struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt)
 
static HRESULT WINAPI AviMuxOut_DecideAllocator (struct strmbase_source *base, IMemInputPin *pPin, IMemAllocator **pAlloc)
 
static AviMux * impl_from_out_IQualityControl (IQualityControl *iface)
 
static HRESULT WINAPI AviMuxOut_QualityControl_QueryInterface (IQualityControl *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AviMuxOut_QualityControl_AddRef (IQualityControl *iface)
 
static ULONG WINAPI AviMuxOut_QualityControl_Release (IQualityControl *iface)
 
static HRESULT WINAPI AviMuxOut_QualityControl_Notify (IQualityControl *iface, IBaseFilter *sender, Quality q)
 
static HRESULT WINAPI AviMuxOut_QualityControl_SetSink (IQualityControl *iface, IQualityControl *piqc)
 
static AviMuxIn * impl_sink_from_strmbase_pin (struct strmbase_pin *iface)
 
static HRESULT sink_query_interface (struct strmbase_pin *iface, REFIID iid, void **out)
 
static HRESULT sink_query_accept (struct strmbase_pin *base, const AM_MEDIA_TYPE *pmt)
 
static HRESULT WINAPI AviMuxIn_Receive (struct strmbase_sink *base, IMediaSample *pSample)
 
static HRESULT avi_mux_sink_connect (struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt)
 
static void avi_mux_sink_disconnect (struct strmbase_sink *iface)
 
static AviMux * impl_from_in_IPin (IPin *iface)
 
static AviMuxIn * AviMuxIn_from_IAMStreamControl (IAMStreamControl *iface)
 
static HRESULT WINAPI AviMuxIn_AMStreamControl_QueryInterface (IAMStreamControl *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AviMuxIn_AMStreamControl_AddRef (IAMStreamControl *iface)
 
static ULONG WINAPI AviMuxIn_AMStreamControl_Release (IAMStreamControl *iface)
 
static HRESULT WINAPI AviMuxIn_AMStreamControl_StartAt (IAMStreamControl *iface, const REFERENCE_TIME *start, DWORD cookie)
 
static HRESULT WINAPI AviMuxIn_AMStreamControl_StopAt (IAMStreamControl *iface, const REFERENCE_TIME *stop, BOOL send_extra, DWORD cookie)
 
static HRESULT WINAPI AviMuxIn_AMStreamControl_GetInfo (IAMStreamControl *iface, AM_STREAM_INFO *info)
 
static AviMuxIn * AviMuxIn_from_IMemInputPin (IMemInputPin *iface)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_QueryInterface (IMemInputPin *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AviMuxIn_MemInputPin_AddRef (IMemInputPin *iface)
 
static ULONG WINAPI AviMuxIn_MemInputPin_Release (IMemInputPin *iface)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocator (IMemInputPin *iface, IMemAllocator **ppAllocator)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_NotifyAllocator (IMemInputPin *iface, IMemAllocator *pAllocator, BOOL bReadOnly)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocatorRequirements (IMemInputPin *iface, ALLOCATOR_PROPERTIES *pProps)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_Receive (IMemInputPin *iface, IMediaSample *pSample)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveMultiple (IMemInputPin *iface, IMediaSample **pSamples, LONG nSamples, LONG *nSamplesProcessed)
 
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveCanBlock (IMemInputPin *iface)
 
static AviMuxIn * AviMuxIn_from_IPropertyBag (IPropertyBag *iface)
 
static HRESULT WINAPI AviMuxIn_PropertyBag_QueryInterface (IPropertyBag *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AviMuxIn_PropertyBag_AddRef (IPropertyBag *iface)
 
static ULONG WINAPI AviMuxIn_PropertyBag_Release (IPropertyBag *iface)
 
static HRESULT WINAPI AviMuxIn_PropertyBag_Read (IPropertyBag *iface, const WCHAR *name, VARIANT *value, IErrorLog *error_log)
 
static HRESULT WINAPI AviMuxIn_PropertyBag_Write (IPropertyBag *iface, const WCHAR *name, VARIANT *value)
 
static AviMuxIn * AviMuxIn_from_IQualityControl (IQualityControl *iface)
 
static HRESULT WINAPI AviMuxIn_QualityControl_QueryInterface (IQualityControl *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AviMuxIn_QualityControl_AddRef (IQualityControl *iface)
 
static ULONG WINAPI AviMuxIn_QualityControl_Release (IQualityControl *iface)
 
static HRESULT WINAPI AviMuxIn_QualityControl_Notify (IQualityControl *iface, IBaseFilter *filter, Quality q)
 
static HRESULT WINAPI AviMuxIn_QualityControl_SetSink (IQualityControl *iface, IQualityControl *sink)
 
HRESULT avi_mux_create (IUnknown *outer, IUnknown **out)
 

Variables

static const struct strmbase_filter_ops filter_ops
 
static const IConfigAviMuxVtbl ConfigAviMuxVtbl
 
static const IConfigInterleavingVtbl ConfigInterleavingVtbl
 
static const IMediaSeekingVtbl MediaSeekingVtbl
 
static const IPersistMediaPropertyBagVtbl PersistMediaPropertyBagVtbl
 
static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl
 
static const struct strmbase_source_ops source_ops
 
static const IQualityControlVtbl AviMuxOut_QualityControlVtbl
 
static const struct strmbase_sink_ops sink_ops
 
static const IAMStreamControlVtbl AviMuxIn_AMStreamControlVtbl
 
static const IMemInputPinVtbl AviMuxIn_MemInputPinVtbl
 
static const IPropertyBagVtbl AviMuxIn_PropertyBagVtbl
 
static const IQualityControlVtbl AviMuxIn_QualityControlVtbl
 

Macro Definition Documentation

◆ ALIGN

#define ALIGN (   x)    ((x+1)/2*2)

Definition at line 28 of file avimux.c.

◆ AVISTDINDEX_ENTRIES

#define AVISTDINDEX_ENTRIES   4000

Definition at line 27 of file avimux.c.

◆ AVISUPERINDEX_ENTRIES

#define AVISUPERINDEX_ENTRIES   2000

Definition at line 26 of file avimux.c.

◆ MAX_PIN_NO

#define MAX_PIN_NO   128

Definition at line 25 of file avimux.c.

Function Documentation

◆ avi_mux_cleanup_stream()

static HRESULT avi_mux_cleanup_stream ( struct strmbase_filter *  iface)
static

Definition at line 410 of file avimux.c.

411{
413 HRESULT hr;
414 int i;
415
416 if (This->stream)
417 {
418 AVIEXTHEADER dmlh;
419 RIFFCHUNK rc;
420 RIFFLIST rl;
421 int idx1_off, empty_stream;
422
423 empty_stream = This->cur_stream;
424 for(i=empty_stream+1; ; i++) {
425 if(i >= This->input_pin_no-1)
426 i = 0;
427 if(i == empty_stream)
428 break;
429
430 This->cur_stream = i;
431 hr = flush_queue(This, This->in[This->cur_stream], TRUE);
432 if(FAILED(hr))
433 return hr;
434 }
435
436 idx1_off = This->size;
437 rc.fcc = ckidAVIOLDINDEX;
438 rc.cb = This->idx1_entries * sizeof(*This->idx1);
439 hr = out_write(This, &rc, sizeof(rc));
440 if(FAILED(hr))
441 return hr;
442 hr = out_write(This, This->idx1, This->idx1_entries * sizeof(*This->idx1));
443 if(FAILED(hr))
444 return hr;
445 /* native writes 8 '\0' characters after the end of RIFF data */
446 i = 0;
447 hr = out_write(This, &i, sizeof(i));
448 if(FAILED(hr))
449 return hr;
450 hr = out_write(This, &i, sizeof(i));
451 if(FAILED(hr))
452 return hr;
453
454 for(i=0; i<This->input_pin_no; i++) {
455 if(!This->in[i]->pin.pin.peer)
456 continue;
457
458 hr = out_seek(This, This->in[i]->ix_off);
459 if(FAILED(hr))
460 return hr;
461
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;
468 }
469 This->in[i]->indx->nEntriesInUse++;
470 hr = out_write(This, This->in[i]->ix, sizeof(This->in[i]->ix_data));
471 if(FAILED(hr))
472 return hr;
473 }
474
475 hr = out_seek(This, 0);
476 if(FAILED(hr))
477 return hr;
478
479 rl.fcc = FCC('R','I','F','F');
480 rl.cb = This->size - sizeof(RIFFCHUNK) - 2 * sizeof(int);
481 rl.fccListType = FCC('A','V','I',' ');
482 hr = out_write(This, &rl, sizeof(rl));
483 if(FAILED(hr))
484 return hr;
485
486 rl.fcc = FCC('L','I','S','T');
487 rl.cb = This->movi_off - sizeof(RIFFLIST) - sizeof(RIFFCHUNK);
488 rl.fccListType = FCC('h','d','r','l');
489 hr = out_write(This, &rl, sizeof(rl));
490 if(FAILED(hr))
491 return hr;
492
493 /* FIXME: set This->avih.dwMaxBytesPerSec value */
494 This->avih.dwTotalFrames = (This->stop-This->start) / 10 / This->avih.dwMicroSecPerFrame;
495 hr = out_write(This, &This->avih, sizeof(This->avih));
496 if(FAILED(hr))
497 return hr;
498
499 for(i=0; i<This->input_pin_no; i++) {
500 if(!This->in[i]->pin.pin.peer)
501 continue;
502
503 rl.cb = sizeof(FOURCC) + sizeof(AVISTREAMHEADER) + sizeof(RIFFCHUNK) +
504 This->in[i]->strf->cb + sizeof(This->in[i]->indx_data);
506 hr = out_write(This, &rl, sizeof(rl));
507 if(FAILED(hr))
508 return hr;
509
510 hr = out_write(This, &This->in[i]->strh, sizeof(AVISTREAMHEADER));
511 if(FAILED(hr))
512 return hr;
513
514 hr = out_write(This, This->in[i]->strf, sizeof(RIFFCHUNK) + This->in[i]->strf->cb);
515 if(FAILED(hr))
516 return hr;
517
518 hr = out_write(This, This->in[i]->indx, sizeof(This->in[i]->indx_data));
519 if(FAILED(hr))
520 return hr;
521 }
522
523 rl.cb = sizeof(dmlh) + sizeof(FOURCC);
525 hr = out_write(This, &rl, sizeof(rl));
526 if(FAILED(hr))
527 return hr;
528
529 memset(&dmlh, 0, sizeof(dmlh));
530 dmlh.fcc = ckidAVIEXTHEADER;
531 dmlh.cb = sizeof(dmlh) - sizeof(RIFFCHUNK);
532 dmlh.dwGrandFrames = This->in[0]->strh.dwLength;
533 hr = out_write(This, &dmlh, sizeof(dmlh));
534
535 rl.cb = idx1_off - This->movi_off - sizeof(RIFFCHUNK);
536 rl.fccListType = FCC('m','o','v','i');
537 out_write(This, &rl, sizeof(rl));
539
540 IStream_Release(This->stream);
541 This->stream = NULL;
542 }
543
544 return S_OK;
545}
static HRESULT flush_queue(AviMux *avimux, AviMuxIn *avimuxin, BOOL closing)
Definition: avimux.c:257
static HRESULT out_write(AviMux *This, const void *data, int size)
Definition: avimux.c:209
static HRESULT out_seek(AviMux *This, int pos)
Definition: avimux.c:189
static HRESULT out_flush(AviMux *This)
Definition: avimux.c:171
static AviMux * impl_from_strmbase_filter(struct strmbase_filter *filter)
Definition: avimux.c:113
#define FCC(ch0, ch1, ch2, ch3)
Definition: aviriff.h:38
#define ckidAVIEXTHEADER
Definition: aviriff.h:72
#define ckidSTREAMLIST
Definition: aviriff.h:81
struct _rifflist RIFFLIST
#define ckidAVIOLDINDEX
Definition: aviriff.h:127
#define ckidODML
Definition: aviriff.h:71
struct _riffchunk RIFFCHUNK
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
DWORD FOURCC
Definition: dmdls.h:25
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
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define FOURCC(a, b, c, d)
Definition: memtrack.h:4
#define memset(x, y, z)
Definition: compat.h:39
Definition: avimux.c:74
FOURCC fcc
Definition: aviriff.h:75
DWORD dwGrandFrames
Definition: aviriff.h:77
DWORD cb
Definition: aviriff.h:76
FOURCC fcc
Definition: aviriff.h:27
DWORD cb
Definition: aviriff.h:28
FOURCC fcc
Definition: aviriff.h:33
DWORD cb
Definition: aviriff.h:34
FOURCC fccListType
Definition: aviriff.h:35

◆ avi_mux_create()

HRESULT avi_mux_create ( IUnknown *  outer,
IUnknown **  out 
)

Definition at line 1842 of file avimux.c.

1843{
1844 AviMux *avimux;
1845 HRESULT hr;
1846
1847 if (!(avimux = calloc(1, sizeof(AviMux))))
1848 return E_OUTOFMEMORY;
1849
1850 strmbase_filter_init(&avimux->filter, outer, &CLSID_AviDest, &filter_ops);
1851 avimux->IConfigAviMux_iface.lpVtbl = &ConfigAviMuxVtbl;
1853 avimux->IMediaSeeking_iface.lpVtbl = &MediaSeekingVtbl;
1856
1857 strmbase_source_init(&avimux->source, &avimux->filter, L"AVI Out", &source_ops);
1859 avimux->cur_stream = 0;
1860 avimux->cur_time = 0;
1861 avimux->stream = NULL;
1862
1863 hr = create_input_pin(avimux);
1864 if(FAILED(hr)) {
1867 free(avimux);
1868 return hr;
1869 }
1870
1871 avimux->interleave = 10000000;
1872
1873 TRACE("Created AVI mux %p.\n", avimux);
1874 *out = &avimux->filter.IUnknown_inner;
1875 return S_OK;
1876}
static const IMediaSeekingVtbl MediaSeekingVtbl
Definition: avimux.c:983
static const IPersistMediaPropertyBagVtbl PersistMediaPropertyBagVtbl
Definition: avimux.c:1060
static const IConfigInterleavingVtbl ConfigInterleavingVtbl
Definition: avimux.c:815
static const IConfigAviMuxVtbl ConfigAviMuxVtbl
Definition: avimux.c:728
static const IQualityControlVtbl AviMuxOut_QualityControlVtbl
Definition: avimux.c:1268
static const struct strmbase_source_ops source_ops
Definition: avimux.c:1215
static const struct strmbase_filter_ops filter_ops
Definition: avimux.c:665
static HRESULT create_input_pin(AviMux *)
Definition: avimux.c:1796
static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl
Definition: avimux.c:1102
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
#define L(x)
Definition: resources.c:13
static IUnknown * outer
Definition: compobj.c:82
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table)
Definition: pin.c:765
void strmbase_filter_cleanup(struct strmbase_filter *filter)
Definition: filter.c:540
void strmbase_source_cleanup(struct strmbase_source *pin)
Definition: pin.c:778
void strmbase_filter_init(struct strmbase_filter *filter, IUnknown *outer, const CLSID *clsid, const struct strmbase_filter_ops *func_table)
Definition: filter.c:517
LONGLONG cur_time
Definition: avimux.c:100
IPersistMediaPropertyBag IPersistMediaPropertyBag_iface
Definition: avimux.c:79
IMediaSeeking IMediaSeeking_iface
Definition: avimux.c:78
struct strmbase_source source
Definition: avimux.c:86
IConfigInterleaving IConfigInterleaving_iface
Definition: avimux.c:77
IQualityControl IQualityControl_iface
Definition: avimux.c:87
int cur_stream
Definition: avimux.c:99
struct strmbase_filter filter
Definition: avimux.c:75
ISpecifyPropertyPages ISpecifyPropertyPages_iface
Definition: avimux.c:80
IStream * stream
Definition: avimux.c:108
IConfigAviMux IConfigAviMux_iface
Definition: avimux.c:76
REFERENCE_TIME interleave
Definition: avimux.c:83
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ avi_mux_destroy()

static void avi_mux_destroy ( struct strmbase_filter *  iface)
static

Definition at line 129 of file avimux.c.

130{
132 int i;
133
135
136 for (i = 0; i < filter->input_pin_no; ++i)
137 {
138 IPin_Disconnect(&filter->in[i]->pin.pin.IPin_iface);
139 IMemAllocator_Release(filter->in[i]->samples_allocator);
140 filter->in[i]->samples_allocator = NULL;
141 strmbase_sink_cleanup(&filter->in[i]->pin);
142 free(filter->in[i]);
143 }
144
145 free(filter->idx1);
147 free(filter);
148}
void strmbase_sink_cleanup(struct strmbase_sink *pin)
Definition: pin.c:1185
Definition: filter.c:165
IBaseFilter * filter
Definition: filtergraph.c:75

◆ avi_mux_get_pin()

static struct strmbase_pin * avi_mux_get_pin ( struct strmbase_filter *  iface,
unsigned int  index 
)
static

Definition at line 118 of file avimux.c.

119{
121
122 if (!index)
123 return &filter->source.pin;
124 else if (index <= filter->input_pin_no)
125 return &filter->in[index - 1]->pin.pin;
126 return NULL;
127}
GLuint index
Definition: glext.h:6031

◆ avi_mux_init_stream()

static HRESULT avi_mux_init_stream ( struct strmbase_filter *  iface)
static

Definition at line 547 of file avimux.c.

548{
550 HRESULT hr;
551 int i, stream_id;
552
553 if(This->mode != INTERLEAVE_FULL) {
554 FIXME("mode not supported (%d)\n", This->mode);
555 return E_NOTIMPL;
556 }
557
558 for(i=0; i<This->input_pin_no; i++) {
559 IMediaSeeking *ms;
560 LONGLONG cur, stop;
561
562 if(!This->in[i]->pin.pin.peer)
563 continue;
564
565 hr = IPin_QueryInterface(This->in[i]->pin.pin.peer,
566 &IID_IMediaSeeking, (void**)&ms);
567 if(FAILED(hr))
568 continue;
569
570 hr = IMediaSeeking_GetPositions(ms, &cur, &stop);
571 if(FAILED(hr)) {
572 IMediaSeeking_Release(ms);
573 continue;
574 }
575
576 FIXME("Use IMediaSeeking to fill stream header\n");
577 IMediaSeeking_Release(ms);
578 }
579
580 if (This->source.pMemInputPin)
581 {
582 hr = IMemInputPin_QueryInterface(This->source.pMemInputPin,
583 &IID_IStream, (void **)&This->stream);
584 if(FAILED(hr))
585 return hr;
586 }
587
588 This->idx1_entries = 0;
589 if(!This->idx1_size) {
590 This->idx1_size = 1024;
591 if (!(This->idx1 = malloc(sizeof(*This->idx1) * This->idx1_size)))
592 return E_OUTOFMEMORY;
593 }
594
595 This->size = 3*sizeof(RIFFLIST) + sizeof(AVIMAINHEADER) + sizeof(AVIEXTHEADER);
596 This->start = -1;
597 This->stop = -1;
598 memset(&This->avih, 0, sizeof(This->avih));
599 for(i=0; i<This->input_pin_no; i++) {
600 if(!This->in[i]->pin.pin.peer)
601 continue;
602
603 This->avih.dwStreams++;
604 This->size += sizeof(RIFFLIST) + sizeof(AVISTREAMHEADER) + sizeof(RIFFCHUNK)
605 + This->in[i]->strf->cb + sizeof(This->in[i]->indx_data);
606
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;
609
610 hr = IMemAllocator_Commit(This->in[i]->pin.pAllocator);
611 if(FAILED(hr)) {
612 if (This->stream)
613 {
614 IStream_Release(This->stream);
615 This->stream = NULL;
616 }
617 return hr;
618 }
619 }
620
621 This->movi_off = This->size;
622 This->size += sizeof(RIFFLIST);
623
624 idx1_add_entry(This, FCC('7','F','x','x'), 0, This->movi_off + sizeof(RIFFLIST), 0);
625
626 stream_id = 0;
627 for(i=0; i<This->input_pin_no; i++) {
628 if(!This->in[i]->pin.pin.peer)
629 continue;
630
631 This->in[i]->ix_off = This->size;
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);
634 This->in[i]->ix->cb = sizeof(This->in[i]->ix_data) - sizeof(RIFFCHUNK);
635 This->in[i]->ix->wLongsPerEntry = 2;
636 This->in[i]->ix->bIndexSubType = 0;
637 This->in[i]->ix->bIndexType = AVI_INDEX_OF_CHUNKS;
638 This->in[i]->ix->dwChunkId = FCC('0'+stream_id/10,'0'+stream_id%10,'d','b');
639 This->in[i]->ix->qwBaseOffset = 0;
640
641 This->in[i]->indx->fcc = ckidAVISUPERINDEX;
642 This->in[i]->indx->cb = sizeof(This->in[i]->indx_data) - sizeof(RIFFCHUNK);
643 This->in[i]->indx->wLongsPerEntry = 4;
644 This->in[i]->indx->bIndexSubType = 0;
645 This->in[i]->indx->bIndexType = AVI_INDEX_OF_INDEXES;
646 This->in[i]->indx->dwChunkId = This->in[i]->ix->dwChunkId;
647 This->in[i]->stream_id = stream_id++;
648 }
649
650 This->buf_pos = 0;
651 This->out_pos = 0;
652
653 This->avih.fcc = ckidMAINAVIHEADER;
654 This->avih.cb = sizeof(AVIMAINHEADER) - sizeof(RIFFCHUNK);
655 /* TODO: Use first video stream */
656 This->avih.dwMicroSecPerFrame = This->in[0]->avg_time_per_frame/10;
657 This->avih.dwPaddingGranularity = 1;
658 This->avih.dwFlags = AVIF_TRUSTCKTYPE | AVIF_HASINDEX;
659 This->avih.dwWidth = ((BITMAPINFOHEADER*)This->in[0]->strf->data)->biWidth;
660 This->avih.dwHeight = ((BITMAPINFOHEADER*)This->in[0]->strf->data)->biHeight;
661
662 return S_OK;
663}
static HRESULT idx1_add_entry(AviMux *avimux, DWORD ckid, DWORD flags, DWORD off, DWORD len)
Definition: avimux.c:238
#define ckidAVISUPERINDEX
Definition: aviriff.h:194
#define AVIF_HASINDEX
Definition: aviriff.h:46
#define ckidMAINAVIHEADER
Definition: aviriff.h:53
#define AVIF_TRUSTCKTYPE
Definition: aviriff.h:49
struct _aviextheader AVIEXTHEADER
#define AVI_INDEX_OF_INDEXES
Definition: aviriff.h:172
struct _avimainheader AVIMAINHEADER
#define AVI_INDEX_OF_CHUNKS
Definition: aviriff.h:173
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99
#define malloc
Definition: debug_ros.c:4
FxCollectionEntry * cur
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
int64_t LONGLONG
Definition: typedefs.h:68

◆ avi_mux_query_interface()

static HRESULT avi_mux_query_interface ( struct strmbase_filter *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 150 of file avimux.c.

151{
153
154 if (IsEqualGUID(iid, &IID_IConfigAviMux))
155 *out = &filter->IConfigAviMux_iface;
156 else if (IsEqualGUID(iid, &IID_IConfigInterleaving))
157 *out = &filter->IConfigInterleaving_iface;
158 else if (IsEqualGUID(iid, &IID_IMediaSeeking))
160 else if (IsEqualGUID(iid, &IID_IPersistMediaPropertyBag))
161 *out = &filter->IPersistMediaPropertyBag_iface;
163 *out = &filter->ISpecifyPropertyPages_iface;
164 else
165 return E_NOINTERFACE;
166
167 IUnknown_AddRef((IUnknown *)*out);
168 return S_OK;
169}
const GUID IID_ISpecifyPropertyPages
Definition: proxy.cpp:12
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
IMediaSeeking IMediaSeeking_iface
Definition: filter.c:167
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ avi_mux_sink_connect()

static HRESULT avi_mux_sink_connect ( struct strmbase_sink *  iface,
IPin *  peer,
const AM_MEDIA_TYPE *  pmt 
)
static

Definition at line 1418 of file avimux.c.

1419{
1420 AviMuxIn *avimuxin = impl_sink_from_strmbase_pin(&iface->pin);
1421 AviMux *This = impl_from_strmbase_filter(iface->pin.filter);
1422 HRESULT hr;
1423
1424 if(!pmt)
1425 return E_POINTER;
1426
1427 if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1428 IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) {
1429 ALLOCATOR_PROPERTIES req, act;
1430 VIDEOINFOHEADER *vih;
1431 int size;
1432
1433 vih = (VIDEOINFOHEADER*)pmt->pbFormat;
1434 avimuxin->strh.fcc = ckidSTREAMHEADER;
1435 avimuxin->strh.cb = sizeof(AVISTREAMHEADER) - FIELD_OFFSET(AVISTREAMHEADER, fccType);
1436 avimuxin->strh.fccType = streamtypeVIDEO;
1437 /* FIXME: fccHandler should be set differently */
1438 avimuxin->strh.fccHandler = vih->bmiHeader.biCompression ?
1439 vih->bmiHeader.biCompression : FCC('D','I','B',' ');
1440 avimuxin->avg_time_per_frame = vih->AvgTimePerFrame;
1441 avimuxin->stop = -1;
1442
1443 req.cBuffers = 32;
1444 req.cbBuffer = vih->bmiHeader.biSizeImage;
1445 req.cbAlign = 1;
1446 req.cbPrefix = sizeof(void*);
1447 hr = IMemAllocator_SetProperties(avimuxin->samples_allocator, &req, &act);
1448 if(SUCCEEDED(hr))
1449 hr = IMemAllocator_Commit(avimuxin->samples_allocator);
1450 if (FAILED(hr))
1451 return hr;
1452
1453 size = pmt->cbFormat - FIELD_OFFSET(VIDEOINFOHEADER, bmiHeader);
1454 avimuxin->strf = malloc(sizeof(RIFFCHUNK) + ALIGN(FIELD_OFFSET(BITMAPINFO, bmiColors[vih->bmiHeader.biClrUsed])));
1455 avimuxin->strf->fcc = ckidSTREAMFORMAT;
1456 avimuxin->strf->cb = FIELD_OFFSET(BITMAPINFO, bmiColors[vih->bmiHeader.biClrUsed]);
1457 if(size > avimuxin->strf->cb)
1458 size = avimuxin->strf->cb;
1459 memcpy(avimuxin->strf->data, &vih->bmiHeader, size);
1460 }else {
1461 FIXME("format not supported: %s %s\n", debugstr_guid(&pmt->majortype),
1462 debugstr_guid(&pmt->formattype));
1463 return E_NOTIMPL;
1464 }
1465
1466 return create_input_pin(This);
1467}
static AviMuxIn * impl_sink_from_strmbase_pin(struct strmbase_pin *iface)
Definition: avimux.c:1276
#define ALIGN(x)
Definition: avimux.c:28
#define streamtypeVIDEO
Definition: aviriff.h:92
#define ckidSTREAMHEADER
Definition: aviriff.h:88
#define ckidSTREAMFORMAT
Definition: aviriff.h:125
GLsizeiptr size
Definition: glext.h:5919
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_guid
Definition: kernel32.h:35
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
REFERENCE_TIME stop
Definition: avimux.c:37
AVISTREAMHEADER strh
Definition: avimux.c:42
struct AviMuxIn::@328 * strf
REFERENCE_TIME avg_time_per_frame
Definition: avimux.c:36
IMemAllocator * samples_allocator
Definition: avimux.c:71
DWORD biCompression
Definition: amvideo.idl:35
DWORD biSizeImage
Definition: amvideo.idl:36
FOURCC fccHandler
Definition: aviriff.h:103
FOURCC fccType
Definition: aviriff.h:102
struct strmbase_pin pin
Definition: strmbase.h:106
BITMAPINFOHEADER bmiHeader
Definition: amvideo.idl:189
REFERENCE_TIME AvgTimePerFrame
Definition: amvideo.idl:187
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define E_POINTER
Definition: winerror.h:3480

◆ avi_mux_sink_disconnect()

static void avi_mux_sink_disconnect ( struct strmbase_sink *  iface)
static

Definition at line 1469 of file avimux.c.

1470{
1471 AviMuxIn *avimuxin = impl_sink_from_strmbase_pin(&iface->pin);
1472 IMediaSample **prev, *cur;
1473
1474 IMemAllocator_Decommit(avimuxin->samples_allocator);
1475 while(avimuxin->samples_head) {
1476 cur = avimuxin->samples_head;
1477 if (FAILED(IMediaSample_GetPointer(cur, (BYTE **)&prev)))
1478 break;
1479 prev--;
1480
1481 cur = avimuxin->samples_head;
1482 avimuxin->samples_head = *prev;
1483 IMediaSample_Release(cur);
1484
1485 if(cur == avimuxin->samples_head)
1486 avimuxin->samples_head = NULL;
1487 }
1488 free(avimuxin->strf);
1489 avimuxin->strf = NULL;
1490}
IMediaSample * samples_head
Definition: avimux.c:70
unsigned char BYTE
Definition: xxhash.c:193

◆ AviMuxIn_AMStreamControl_AddRef()

static ULONG WINAPI AviMuxIn_AMStreamControl_AddRef ( IAMStreamControl *  iface)
static

Definition at line 1519 of file avimux.c.

1520{
1521 AviMuxIn *avimuxin = AviMuxIn_from_IAMStreamControl(iface);
1522 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1523 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1524}
static AviMuxIn * AviMuxIn_from_IAMStreamControl(IAMStreamControl *iface)
Definition: avimux.c:1507
static AviMux * impl_from_in_IPin(IPin *iface)
Definition: avimux.c:1501
struct strmbase_sink pin
Definition: avimux.c:31

◆ AviMuxIn_AMStreamControl_GetInfo()

static HRESULT WINAPI AviMuxIn_AMStreamControl_GetInfo ( IAMStreamControl *  iface,
AM_STREAM_INFO *  info 
)
static

Definition at line 1547 of file avimux.c.

1549{
1550 FIXME("iface %p, info %p, stub!\n", iface, info);
1551 return E_NOTIMPL;
1552}

◆ AviMuxIn_AMStreamControl_QueryInterface()

static HRESULT WINAPI AviMuxIn_AMStreamControl_QueryInterface ( IAMStreamControl *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1512 of file avimux.c.

1514{
1515 AviMuxIn *avimuxin = AviMuxIn_from_IAMStreamControl(iface);
1516 return IPin_QueryInterface(&avimuxin->pin.pin.IPin_iface, riid, ppv);
1517}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ AviMuxIn_AMStreamControl_Release()

static ULONG WINAPI AviMuxIn_AMStreamControl_Release ( IAMStreamControl *  iface)
static

Definition at line 1526 of file avimux.c.

1527{
1528 AviMuxIn *avimuxin = AviMuxIn_from_IAMStreamControl(iface);
1529 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1530 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1531}

◆ AviMuxIn_AMStreamControl_StartAt()

static HRESULT WINAPI AviMuxIn_AMStreamControl_StartAt ( IAMStreamControl *  iface,
const REFERENCE_TIME *  start,
DWORD  cookie 
)
static

Definition at line 1533 of file avimux.c.

1535{
1536 FIXME("iface %p, start %p, cookie %#lx, stub!\n", iface, start, cookie);
1537 return E_NOTIMPL;
1538}
GLuint start
Definition: gl.h:1545
Definition: cookie.c:34

◆ AviMuxIn_AMStreamControl_StopAt()

static HRESULT WINAPI AviMuxIn_AMStreamControl_StopAt ( IAMStreamControl *  iface,
const REFERENCE_TIME *  stop,
BOOL  send_extra,
DWORD  cookie 
)
static

Definition at line 1540 of file avimux.c.

1542{
1543 FIXME("iface %p, stop %p, send_extra %d, cookie %#lx, stub!\n", iface, stop, send_extra, cookie);
1544 return E_NOTIMPL;
1545}

◆ AviMuxIn_from_IAMStreamControl()

static AviMuxIn * AviMuxIn_from_IAMStreamControl ( IAMStreamControl *  iface)
inlinestatic

Definition at line 1507 of file avimux.c.

1508{
1509 return CONTAINING_RECORD(iface, AviMuxIn, IAMStreamControl_iface);
1510}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by AviMuxIn_AMStreamControl_AddRef(), AviMuxIn_AMStreamControl_QueryInterface(), and AviMuxIn_AMStreamControl_Release().

◆ AviMuxIn_from_IMemInputPin()

◆ AviMuxIn_from_IPropertyBag()

static AviMuxIn * AviMuxIn_from_IPropertyBag ( IPropertyBag *  iface)
inlinestatic

Definition at line 1697 of file avimux.c.

1698{
1699 return CONTAINING_RECORD(iface, AviMuxIn, IPropertyBag_iface);
1700}

Referenced by AviMuxIn_PropertyBag_AddRef(), AviMuxIn_PropertyBag_QueryInterface(), and AviMuxIn_PropertyBag_Release().

◆ AviMuxIn_from_IQualityControl()

static AviMuxIn * AviMuxIn_from_IQualityControl ( IQualityControl *  iface)
inlinestatic

Definition at line 1747 of file avimux.c.

1748{
1749 return CONTAINING_RECORD(iface, AviMuxIn, IQualityControl_iface);
1750}

Referenced by AviMuxIn_QualityControl_AddRef(), AviMuxIn_QualityControl_QueryInterface(), and AviMuxIn_QualityControl_Release().

◆ AviMuxIn_MemInputPin_AddRef()

static ULONG WINAPI AviMuxIn_MemInputPin_AddRef ( IMemInputPin *  iface)
static

Definition at line 1575 of file avimux.c.

1576{
1577 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1578 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1579 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1580}
static AviMuxIn * AviMuxIn_from_IMemInputPin(IMemInputPin *iface)
Definition: avimux.c:1563

◆ AviMuxIn_MemInputPin_GetAllocator()

static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocator ( IMemInputPin *  iface,
IMemAllocator **  ppAllocator 
)
static

Definition at line 1589 of file avimux.c.

1591{
1592 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1593
1594 TRACE("pin %p, ppAllocator %p.\n", avimuxin, ppAllocator);
1595
1596 if(!ppAllocator)
1597 return E_POINTER;
1598
1599 IMemAllocator_AddRef(avimuxin->pin.pAllocator);
1600 *ppAllocator = avimuxin->pin.pAllocator;
1601 return S_OK;
1602}

◆ AviMuxIn_MemInputPin_GetAllocatorRequirements()

static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocatorRequirements ( IMemInputPin *  iface,
ALLOCATOR_PROPERTIES *  pProps 
)
static

Definition at line 1626 of file avimux.c.

1628{
1629 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1630
1631 TRACE("pin %p, pProps %p.\n", avimuxin, pProps);
1632
1633 if(!pProps)
1634 return E_POINTER;
1635
1636 pProps->cbAlign = 1;
1637 pProps->cbPrefix = 8;
1638 return S_OK;
1639}

◆ AviMuxIn_MemInputPin_NotifyAllocator()

static HRESULT WINAPI AviMuxIn_MemInputPin_NotifyAllocator ( IMemInputPin *  iface,
IMemAllocator *  pAllocator,
BOOL  bReadOnly 
)
static

Definition at line 1604 of file avimux.c.

1606{
1607 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1609 HRESULT hr;
1610
1611 TRACE("pin %p, pAllocator %p, bReadOnly %d.\n", avimuxin, pAllocator, bReadOnly);
1612
1613 if(!pAllocator)
1614 return E_POINTER;
1615
1616 memset(&props, 0, sizeof(props));
1617 hr = IMemAllocator_GetProperties(pAllocator, &props);
1618 if(FAILED(hr))
1619 return hr;
1620
1621 props.cbAlign = 1;
1622 props.cbPrefix = 8;
1623 return IMemAllocator_SetProperties(avimuxin->pin.pAllocator, &props, &props);
1624}
static const WCHAR props[]
Definition: wbemdisp.c:288

◆ AviMuxIn_MemInputPin_QueryInterface()

static HRESULT WINAPI AviMuxIn_MemInputPin_QueryInterface ( IMemInputPin *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1568 of file avimux.c.

1570{
1571 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1572 return IPin_QueryInterface(&avimuxin->pin.pin.IPin_iface, riid, ppv);
1573}

◆ AviMuxIn_MemInputPin_Receive()

static HRESULT WINAPI AviMuxIn_MemInputPin_Receive ( IMemInputPin *  iface,
IMediaSample *  pSample 
)
static

Definition at line 1641 of file avimux.c.

1643{
1644 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1645
1646 TRACE("pin %p, pSample %p.\n", avimuxin, pSample);
1647
1648 return avimuxin->pin.pFuncsTable->pfnReceive(&avimuxin->pin, pSample);
1649}

◆ AviMuxIn_MemInputPin_ReceiveCanBlock()

static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveCanBlock ( IMemInputPin *  iface)
static

Definition at line 1670 of file avimux.c.

1671{
1672 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1673 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1674 HRESULT hr;
1675
1676 TRACE("avimuxin %p.\n", avimuxin);
1677
1678 if(!This->source.pMemInputPin)
1679 return S_FALSE;
1680
1681 hr = IMemInputPin_ReceiveCanBlock(This->source.pMemInputPin);
1682 return hr != S_FALSE ? S_OK : S_FALSE;
1683}
#define S_FALSE
Definition: winerror.h:3451

◆ AviMuxIn_MemInputPin_ReceiveMultiple()

static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveMultiple ( IMemInputPin *  iface,
IMediaSample **  pSamples,
LONG  nSamples,
LONG *  nSamplesProcessed 
)
static

Definition at line 1651 of file avimux.c.

1653{
1654 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1655 HRESULT hr = S_OK;
1656
1657 TRACE("pin %p, pSamples %p, nSamples %ld, nSamplesProcessed %p.\n",
1658 avimuxin, pSamples, nSamples, nSamplesProcessed);
1659
1660 for(*nSamplesProcessed=0; *nSamplesProcessed<nSamples; (*nSamplesProcessed)++)
1661 {
1662 hr = avimuxin->pin.pFuncsTable->pfnReceive(&avimuxin->pin, pSamples[*nSamplesProcessed]);
1663 if(hr != S_OK)
1664 break;
1665 }
1666
1667 return hr;
1668}

◆ AviMuxIn_MemInputPin_Release()

static ULONG WINAPI AviMuxIn_MemInputPin_Release ( IMemInputPin *  iface)
static

Definition at line 1582 of file avimux.c.

1583{
1584 AviMuxIn *avimuxin = AviMuxIn_from_IMemInputPin(iface);
1585 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1586 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1587}

◆ AviMuxIn_PropertyBag_AddRef()

static ULONG WINAPI AviMuxIn_PropertyBag_AddRef ( IPropertyBag *  iface)
static

Definition at line 1709 of file avimux.c.

1710{
1711 AviMuxIn *avimuxin = AviMuxIn_from_IPropertyBag(iface);
1712 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1713 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1714}
static AviMuxIn * AviMuxIn_from_IPropertyBag(IPropertyBag *iface)
Definition: avimux.c:1697

◆ AviMuxIn_PropertyBag_QueryInterface()

static HRESULT WINAPI AviMuxIn_PropertyBag_QueryInterface ( IPropertyBag *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1702 of file avimux.c.

1704{
1705 AviMuxIn *avimuxin = AviMuxIn_from_IPropertyBag(iface);
1706 return IPin_QueryInterface(&avimuxin->pin.pin.IPin_iface, riid, ppv);
1707}

◆ AviMuxIn_PropertyBag_Read()

static HRESULT WINAPI AviMuxIn_PropertyBag_Read ( IPropertyBag *  iface,
const WCHAR *  name,
VARIANT *  value,
IErrorLog *  error_log 
)
static

Definition at line 1723 of file avimux.c.

1725{
1726 FIXME("iface %p, name %s, value %p, error_log %p, stub!\n",
1727 iface, debugstr_w(name), value, error_log);
1728 return E_NOTIMPL;
1729}
#define debugstr_w
Definition: kernel32.h:32
Definition: name.c:39
Definition: pdh_main.c:64

◆ AviMuxIn_PropertyBag_Release()

static ULONG WINAPI AviMuxIn_PropertyBag_Release ( IPropertyBag *  iface)
static

Definition at line 1716 of file avimux.c.

1717{
1718 AviMuxIn *avimuxin = AviMuxIn_from_IPropertyBag(iface);
1719 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1720 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1721}

◆ AviMuxIn_PropertyBag_Write()

static HRESULT WINAPI AviMuxIn_PropertyBag_Write ( IPropertyBag *  iface,
const WCHAR *  name,
VARIANT *  value 
)
static

Definition at line 1731 of file avimux.c.

1733{
1734 FIXME("iface %p, name %s, value %s, stub!\n",
1736 return E_NOTIMPL;
1737}
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505

◆ AviMuxIn_QualityControl_AddRef()

static ULONG WINAPI AviMuxIn_QualityControl_AddRef ( IQualityControl *  iface)
static

Definition at line 1759 of file avimux.c.

1760{
1761 AviMuxIn *avimuxin = AviMuxIn_from_IQualityControl(iface);
1762 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1763 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1764}
static AviMuxIn * AviMuxIn_from_IQualityControl(IQualityControl *iface)
Definition: avimux.c:1747

◆ AviMuxIn_QualityControl_Notify()

static HRESULT WINAPI AviMuxIn_QualityControl_Notify ( IQualityControl *  iface,
IBaseFilter *  filter,
Quality  q 
)
static

Definition at line 1773 of file avimux.c.

1775{
1776 FIXME("iface %p, filter %p, type %u, proportion %ld, late %s, timestamp %s, stub!\n",
1777 iface, filter, q.Type, q.Proportion, wine_dbgstr_longlong(q.Late),
1778 wine_dbgstr_longlong(q.TimeStamp));
1779 return E_NOTIMPL;
1780}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063

◆ AviMuxIn_QualityControl_QueryInterface()

static HRESULT WINAPI AviMuxIn_QualityControl_QueryInterface ( IQualityControl *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1752 of file avimux.c.

1754{
1755 AviMuxIn *avimuxin = AviMuxIn_from_IQualityControl(iface);
1756 return IPin_QueryInterface(&avimuxin->pin.pin.IPin_iface, riid, ppv);
1757}

◆ AviMuxIn_QualityControl_Release()

static ULONG WINAPI AviMuxIn_QualityControl_Release ( IQualityControl *  iface)
static

Definition at line 1766 of file avimux.c.

1767{
1768 AviMuxIn *avimuxin = AviMuxIn_from_IQualityControl(iface);
1769 AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
1770 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1771}

◆ AviMuxIn_QualityControl_SetSink()

static HRESULT WINAPI AviMuxIn_QualityControl_SetSink ( IQualityControl *  iface,
IQualityControl *  sink 
)
static

Definition at line 1782 of file avimux.c.

1783{
1784 FIXME("iface %p, sink %p, stub!\n", iface, sink);
1785 return E_NOTIMPL;
1786}
GLsizei GLenum GLboolean sink
Definition: glext.h:5672

◆ AviMuxIn_Receive()

static HRESULT WINAPI AviMuxIn_Receive ( struct strmbase_sink *  base,
IMediaSample *  pSample 
)
static

Definition at line 1315 of file avimux.c.

1316{
1317 AviMux *avimux = impl_from_strmbase_filter(base->pin.filter);
1318 AviMuxIn *avimuxin = CONTAINING_RECORD(base, AviMuxIn, pin);
1319 REFERENCE_TIME start, stop;
1321 int frames_no;
1322 IMediaSample2 *ms2;
1323 BYTE *frame, *buf;
1325 DWORD flags;
1326 HRESULT hr;
1327
1328 TRACE("pin %p, pSample %p.\n", avimuxin, pSample);
1329
1330 hr = IMediaSample_QueryInterface(pSample, &IID_IMediaSample2, (void**)&ms2);
1331 if(SUCCEEDED(hr)) {
1333
1334 memset(&props, 0, sizeof(props));
1335 hr = IMediaSample2_GetProperties(ms2, sizeof(props), (BYTE*)&props);
1336 IMediaSample2_Release(ms2);
1337 if(FAILED(hr))
1338 return hr;
1339
1340 flags = props.dwSampleFlags;
1341 frame = props.pbBuffer;
1342 size = props.lActual;
1343 }else {
1344 flags = IMediaSample_IsSyncPoint(pSample) == S_OK ? AM_SAMPLE_SPLICEPOINT : 0;
1345 hr = IMediaSample_GetPointer(pSample, &frame);
1346 if(FAILED(hr))
1347 return hr;
1348 size = IMediaSample_GetActualDataLength(pSample);
1349 }
1350
1351 if(!avimuxin->pin.pin.mt.bTemporalCompression)
1353
1354 hr = IMediaSample_GetTime(pSample, &start, &stop);
1355 if(FAILED(hr))
1356 return hr;
1357
1358 if(avimuxin->stop>stop)
1360
1361 if(avimux->start == -1)
1362 avimux->start = start;
1363 if(avimux->stop < stop)
1364 avimux->stop = stop;
1365
1366 if(avimux->avih.dwSuggestedBufferSize < ALIGN(size)+sizeof(RIFFCHUNK))
1367 avimux->avih.dwSuggestedBufferSize = ALIGN(size) + sizeof(RIFFCHUNK);
1368 if(avimuxin->strh.dwSuggestedBufferSize < ALIGN(size)+sizeof(RIFFCHUNK))
1369 avimuxin->strh.dwSuggestedBufferSize = ALIGN(size) + sizeof(RIFFCHUNK);
1370
1371 frames_no = 1;
1372 if(avimuxin->stop!=-1 && start > avimuxin->stop) {
1373 frames_no += (double)(start - avimuxin->stop) / 10000000
1374 * avimuxin->strh.dwRate / avimuxin->strh.dwScale + 0.5;
1375 }
1376 avimuxin->stop = stop;
1377
1378 while(--frames_no) {
1379 /* TODO: store all control frames in one buffer */
1380 hr = IMemAllocator_GetBuffer(avimuxin->samples_allocator, &sample, NULL, NULL, 0);
1381 if(FAILED(hr))
1382 return hr;
1383 hr = IMediaSample_SetActualDataLength(sample, 0);
1384 if(SUCCEEDED(hr))
1385 hr = IMediaSample_SetDiscontinuity(sample, TRUE);
1386 if(SUCCEEDED(hr))
1387 hr = IMediaSample_SetSyncPoint(sample, FALSE);
1388 if(SUCCEEDED(hr))
1389 hr = queue_sample(avimux, avimuxin, sample);
1390 IMediaSample_Release(sample);
1391 if(FAILED(hr))
1392 return hr;
1393 }
1394
1395 hr = IMemAllocator_GetBuffer(avimuxin->samples_allocator, &sample, NULL, NULL, 0);
1396 if(FAILED(hr))
1397 return hr;
1398 max_size = IMediaSample_GetSize(sample);
1399 if(size > max_size)
1400 size = max_size;
1401 hr = IMediaSample_SetActualDataLength(sample, size);
1402 if(SUCCEEDED(hr))
1403 hr = IMediaSample_SetDiscontinuity(sample, FALSE);
1404 if(SUCCEEDED(hr))
1405 hr = IMediaSample_SetSyncPoint(sample, flags & AM_SAMPLE_SPLICEPOINT);
1406 /* TODO: avoid unnecessary copying */
1407 if(SUCCEEDED(hr))
1408 hr = IMediaSample_GetPointer(sample, &buf);
1409 if(SUCCEEDED(hr)) {
1410 memcpy(buf, frame, size);
1411 hr = queue_sample(avimux, avimuxin, sample);
1412 }
1413 IMediaSample_Release(sample);
1414
1415 return hr;
1416}
static HRESULT queue_sample(AviMux *avimux, AviMuxIn *avimuxin, IMediaSample *sample)
Definition: avimux.c:383
@ AM_SAMPLE_SPLICEPOINT
Definition: axcore.idl:437
static INT max_size
Definition: history.c:51
#define FALSE
Definition: types.h:117
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91
REFERENCE_TIME stop
Definition: avimux.c:92
REFERENCE_TIME start
Definition: avimux.c:92
AVIMAINHEADER avih
Definition: avimux.c:93
DWORD dwSuggestedBufferSize
Definition: aviriff.h:65
DWORD dwSuggestedBufferSize
Definition: aviriff.h:112
Definition: wave.c:25
#define VFW_E_START_TIME_AFTER_END
Definition: vfwmsgs.h:79

◆ AviMuxOut_AttemptConnection()

static HRESULT WINAPI AviMuxOut_AttemptConnection ( struct strmbase_source *  iface,
IPin *  pReceivePin,
const AM_MEDIA_TYPE *  pmt 
)
static

Definition at line 1136 of file avimux.c.

1138{
1141 unsigned int i;
1142 HRESULT hr;
1143
1144 hr = IPin_QueryDirection(pReceivePin, &dir);
1145 if(hr==S_OK && dir!=PINDIR_INPUT)
1147
1148 if (FAILED(hr = BaseOutputPinImpl_AttemptConnection(iface, pReceivePin, pmt)))
1149 return hr;
1150
1151 for (i = 0; i < filter->input_pin_no; ++i)
1152 {
1153 if (!filter->in[i]->pin.pin.peer)
1154 continue;
1155
1156 hr = IFilterGraph_Reconnect(filter->filter.graph, &filter->in[i]->pin.pin.IPin_iface);
1157 if (FAILED(hr))
1158 {
1159 IPin_Disconnect(&iface->pin.IPin_iface);
1160 break;
1161 }
1162 }
1163
1164 return hr;
1165}
unsigned int dir
Definition: maze.c:112
static AviMux * impl_from_source_pin(struct strmbase_pin *iface)
Definition: avimux.c:1109
enum _PinDirection PIN_DIRECTION
@ PINDIR_INPUT
Definition: axcore.idl:41
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt)
Definition: pin.c:710
struct strmbase_pin pin
Definition: strmbase.h:79
#define VFW_E_INVALID_DIRECTION
Definition: vfwmsgs.h:47

◆ AviMuxOut_DecideAllocator()

static HRESULT WINAPI AviMuxOut_DecideAllocator ( struct strmbase_source *  base,
IMemInputPin *  pPin,
IMemAllocator **  pAlloc 
)
static

Definition at line 1186 of file avimux.c.

1188{
1189 ALLOCATOR_PROPERTIES req, actual;
1190 HRESULT hr;
1191
1192 TRACE("(%p)->(%p %p)\n", base, pPin, pAlloc);
1193
1194 if (FAILED(hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL,
1195 CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (void **)pAlloc)))
1196 {
1197 ERR("Failed to create allocator, hr %#lx.\n", hr);
1198 return hr;
1199 }
1200
1201 hr = IMemInputPin_GetAllocatorRequirements(pPin, &req);
1202 if(FAILED(hr))
1203 req.cbAlign = 1;
1204 req.cBuffers = 32;
1205 req.cbBuffer = 0;
1206 req.cbPrefix = 0;
1207
1208 hr = IMemAllocator_SetProperties(*pAlloc, &req, &actual);
1209 if(FAILED(hr))
1210 return hr;
1211
1212 return IMemInputPin_NotifyAllocator(pPin, *pAlloc, TRUE);
1213}
#define ERR(fmt,...)
Definition: precomp.h:57
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685

◆ AviMuxOut_QualityControl_AddRef()

static ULONG WINAPI AviMuxOut_QualityControl_AddRef ( IQualityControl *  iface)
static

Definition at line 1236 of file avimux.c.

1237{
1239 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1240}
static AviMux * impl_from_out_IQualityControl(IQualityControl *iface)
Definition: avimux.c:1224

◆ AviMuxOut_QualityControl_Notify()

static HRESULT WINAPI AviMuxOut_QualityControl_Notify ( IQualityControl *  iface,
IBaseFilter *  sender,
Quality  q 
)
static

Definition at line 1248 of file avimux.c.

1250{
1252
1253 FIXME("filter %p, sender %p, type %#x, proportion %ld, late %s, timestamp %s, stub!\n",
1254 filter, sender, q.Type, q.Proportion,
1255 wine_dbgstr_longlong(q.Late), wine_dbgstr_longlong(q.TimeStamp));
1256
1257 return E_NOTIMPL;
1258}

◆ AviMuxOut_QualityControl_QueryInterface()

static HRESULT WINAPI AviMuxOut_QualityControl_QueryInterface ( IQualityControl *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1229 of file avimux.c.

1231{
1233 return IPin_QueryInterface(&This->source.pin.IPin_iface, riid, ppv);
1234}

◆ AviMuxOut_QualityControl_Release()

static ULONG WINAPI AviMuxOut_QualityControl_Release ( IQualityControl *  iface)
static

Definition at line 1242 of file avimux.c.

1243{
1245 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1246}

◆ AviMuxOut_QualityControl_SetSink()

static HRESULT WINAPI AviMuxOut_QualityControl_SetSink ( IQualityControl *  iface,
IQualityControl *  piqc 
)
static

Definition at line 1260 of file avimux.c.

1262{
1264 FIXME("(%p)->(%p)\n", This, piqc);
1265 return E_NOTIMPL;
1266}

◆ ConfigAviMux_AddRef()

static ULONG WINAPI ConfigAviMux_AddRef ( IConfigAviMux *  iface)
static

Definition at line 686 of file avimux.c.

687{
689 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
690}
static AviMux * impl_from_IConfigAviMux(IConfigAviMux *iface)
Definition: avimux.c:674

◆ ConfigAviMux_GetMasterStream()

static HRESULT WINAPI ConfigAviMux_GetMasterStream ( IConfigAviMux *  iface,
LONG *  pStream 
)
static

Definition at line 705 of file avimux.c.

706{
708 FIXME("(%p)->(%p)\n", This, pStream);
709 return E_NOTIMPL;
710}

◆ ConfigAviMux_GetOutputCompatibilityIndex()

static HRESULT WINAPI ConfigAviMux_GetOutputCompatibilityIndex ( IConfigAviMux *  iface,
BOOL *  pfOldIndex 
)
static

Definition at line 720 of file avimux.c.

722{
724 FIXME("(%p)->(%p)\n", This, pfOldIndex);
725 return E_NOTIMPL;
726}

◆ ConfigAviMux_QueryInterface()

static HRESULT WINAPI ConfigAviMux_QueryInterface ( IConfigAviMux *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 679 of file avimux.c.

681{
683 return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
684}

◆ ConfigAviMux_Release()

static ULONG WINAPI ConfigAviMux_Release ( IConfigAviMux *  iface)
static

Definition at line 692 of file avimux.c.

693{
695 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
696}

◆ ConfigAviMux_SetMasterStream()

static HRESULT WINAPI ConfigAviMux_SetMasterStream ( IConfigAviMux *  iface,
LONG  iStream 
)
static

Definition at line 698 of file avimux.c.

699{
701 FIXME("filter %p, index %ld, stub!\n", This, iStream);
702 return E_NOTIMPL;
703}

◆ ConfigAviMux_SetOutputCompatibilityIndex()

static HRESULT WINAPI ConfigAviMux_SetOutputCompatibilityIndex ( IConfigAviMux *  iface,
BOOL  fOldIndex 
)
static

Definition at line 712 of file avimux.c.

714{
716 FIXME("(%p)->(%x)\n", This, fOldIndex);
717 return E_NOTIMPL;
718}

◆ ConfigInterleaving_AddRef()

static ULONG WINAPI ConfigInterleaving_AddRef ( IConfigInterleaving *  iface)
static

Definition at line 750 of file avimux.c.

751{
753 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
754}
static AviMux * impl_from_IConfigInterleaving(IConfigInterleaving *iface)
Definition: avimux.c:738

◆ ConfigInterleaving_get_Interleaving()

static HRESULT WINAPI ConfigInterleaving_get_Interleaving ( IConfigInterleaving *  iface,
REFERENCE_TIME *  prtInterleave,
REFERENCE_TIME *  prtPreroll 
)
static

Definition at line 807 of file avimux.c.

809{
811 FIXME("(%p)->(%p %p)\n", This, prtInterleave, prtPreroll);
812 return E_NOTIMPL;
813}

◆ ConfigInterleaving_get_Mode()

static HRESULT WINAPI ConfigInterleaving_get_Mode ( IConfigInterleaving *  iface,
InterleavingMode *  pMode 
)
static

Definition at line 785 of file avimux.c.

787{
789 FIXME("(%p)->(%p)\n", This, pMode);
790 return E_NOTIMPL;
791}

◆ ConfigInterleaving_put_Interleaving()

static HRESULT WINAPI ConfigInterleaving_put_Interleaving ( IConfigInterleaving *  iface,
const REFERENCE_TIME *  prtInterleave,
const REFERENCE_TIME *  prtPreroll 
)
static

Definition at line 793 of file avimux.c.

795{
797
798 TRACE("(%p)->(%p %p)\n", This, prtInterleave, prtPreroll);
799
800 if(prtInterleave)
801 This->interleave = *prtInterleave;
802 if(prtPreroll)
803 This->preroll = *prtPreroll;
804 return S_OK;
805}

◆ ConfigInterleaving_put_Mode()

static HRESULT WINAPI ConfigInterleaving_put_Mode ( IConfigInterleaving *  iface,
InterleavingMode  mode 
)
static

Definition at line 762 of file avimux.c.

764{
766
767 TRACE("(%p)->(%d)\n", This, mode);
768
769 if(mode>INTERLEAVE_NONE_BUFFERED)
770 return E_INVALIDARG;
771
772 if(This->mode != mode) {
773 if(This->source.pin.peer) {
774 HRESULT hr = IFilterGraph_Reconnect(This->filter.graph, &This->source.pin.IPin_iface);
775 if(FAILED(hr))
776 return hr;
777 }
778
779 This->mode = mode;
780 }
781
782 return S_OK;
783}
#define E_INVALIDARG
Definition: ddrawi.h:101
GLenum mode
Definition: glext.h:6217

◆ ConfigInterleaving_QueryInterface()

static HRESULT WINAPI ConfigInterleaving_QueryInterface ( IConfigInterleaving *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 743 of file avimux.c.

745{
747 return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
748}

◆ ConfigInterleaving_Release()

static ULONG WINAPI ConfigInterleaving_Release ( IConfigInterleaving *  iface)
static

Definition at line 756 of file avimux.c.

757{
759 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
760}

◆ create_input_pin()

static HRESULT create_input_pin ( AviMux *  avimux)
static

Definition at line 1796 of file avimux.c.

1797{
1799 WCHAR name[19];
1800 HRESULT hr;
1801
1802 if(avimux->input_pin_no >= MAX_PIN_NO-1)
1803 return E_FAIL;
1804
1805 swprintf(name, ARRAY_SIZE(name), L"Input %02u", avimux->input_pin_no + 1);
1806
1807 if (!(object = calloc(1, sizeof(*object))))
1808 return E_OUTOFMEMORY;
1809
1810 strmbase_sink_init(&object->pin, &avimux->filter, name, &sink_ops, NULL);
1811 object->pin.IMemInputPin_iface.lpVtbl = &AviMuxIn_MemInputPinVtbl;
1812 object->IAMStreamControl_iface.lpVtbl = &AviMuxIn_AMStreamControlVtbl;
1813 object->IPropertyBag_iface.lpVtbl = &AviMuxIn_PropertyBagVtbl;
1814 object->IQualityControl_iface.lpVtbl = &AviMuxIn_QualityControlVtbl;
1815
1816 hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER,
1817 &IID_IMemAllocator, (void **)&object->samples_allocator);
1818 if (FAILED(hr))
1819 {
1821 free(object);
1822 return hr;
1823 }
1824
1825 hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER,
1826 &IID_IMemAllocator, (void **)&object->pin.pAllocator);
1827 if (FAILED(hr))
1828 {
1829 IMemAllocator_Release(object->samples_allocator);
1831 free(object);
1832 return hr;
1833 }
1834
1835 object->indx = (AVISUPERINDEX *)&object->indx_data;
1836 object->ix = (AVISTDINDEX *)object->ix_data;
1837
1838 avimux->in[avimux->input_pin_no++] = object;
1839 return S_OK;
1840}
static const IPropertyBagVtbl AviMuxIn_PropertyBagVtbl
Definition: avimux.c:1739
static const IQualityControlVtbl AviMuxIn_QualityControlVtbl
Definition: avimux.c:1788
#define MAX_PIN_NO
Definition: avimux.c:25
static const struct strmbase_sink_ops sink_ops
Definition: avimux.c:1492
static const IAMStreamControlVtbl AviMuxIn_AMStreamControlVtbl
Definition: avimux.c:1554
static const IMemInputPinVtbl AviMuxIn_MemInputPinVtbl
Definition: avimux.c:1685
#define ARRAY_SIZE(A)
Definition: main.h:20
#define E_FAIL
Definition: ddrawi.h:102
#define swprintf
Definition: precomp.h:40
short WCHAR
Definition: pedump.c:58
void strmbase_sink_init(struct strmbase_sink *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_sink_ops *ops, IMemAllocator *allocator)
Definition: pin.c:1168
int input_pin_no
Definition: avimux.c:89
AviMuxIn * in[MAX_PIN_NO-1]
Definition: avimux.c:90

Referenced by avi_mux_create(), and avi_mux_sink_connect().

◆ flush_queue()

static HRESULT flush_queue ( AviMux *  avimux,
AviMuxIn *  avimuxin,
BOOL  closing 
)
static

Definition at line 257 of file avimux.c.

258{
259 IMediaSample *sample, **prev, **head_prev;
260 BYTE *data;
261 RIFFCHUNK rf;
262 DWORD size;
263 DWORD flags;
264 HRESULT hr;
265
266 if (avimux->cur_stream != avimuxin->stream_id)
267 return S_OK;
268
269 while(avimuxin->samples_head) {
270 hr = IMediaSample_GetPointer(avimuxin->samples_head, (BYTE**)&head_prev);
271 if(FAILED(hr))
272 return hr;
273 head_prev--;
274
275 hr = IMediaSample_GetPointer(*head_prev, (BYTE**)&prev);
276 if(FAILED(hr))
277 return hr;
278 prev--;
279
280 sample = *head_prev;
281 size = IMediaSample_GetActualDataLength(sample);
282 hr = IMediaSample_GetPointer(sample, &data);
283 if(FAILED(hr))
284 return hr;
285 flags = IMediaSample_IsDiscontinuity(sample)==S_OK ? AM_SAMPLE_TIMEDISCONTINUITY : 0;
286 if(IMediaSample_IsSyncPoint(sample) == S_OK)
288
289 if (avimuxin->stream_time + (closing ? 0 : avimuxin->strh.dwScale) > avimux->cur_time
291 {
292 if(closing)
293 break;
294
295 avimux->cur_stream++;
296 if(avimux->cur_stream >= avimux->input_pin_no-1) {
297 avimux->cur_time += avimux->interleave;
298 avimux->cur_stream = 0;
299 }
300 avimuxin = avimux->in[avimux->cur_stream];
301 continue;
302 }
303
304 if(avimuxin->ix->nEntriesInUse == AVISTDINDEX_ENTRIES) {
305 /* TODO: use output pins Deliver/Receive method */
306 hr = out_seek(avimux, avimuxin->ix_off);
307 if(FAILED(hr))
308 return hr;
309 hr = out_write(avimux, avimuxin->ix, sizeof(avimuxin->ix_data));
310 if(FAILED(hr))
311 return hr;
312
313 avimuxin->indx->aIndex[avimuxin->indx->nEntriesInUse].qwOffset = avimuxin->ix_off;
314 avimuxin->indx->aIndex[avimuxin->indx->nEntriesInUse].dwSize = sizeof(avimuxin->ix_data);
315 avimuxin->indx->aIndex[avimuxin->indx->nEntriesInUse].dwDuration = AVISTDINDEX_ENTRIES;
316 avimuxin->indx->nEntriesInUse++;
317
318 memset(avimuxin->ix->aIndex, 0, sizeof(avimuxin->ix->aIndex)*avimuxin->ix->nEntriesInUse);
319 avimuxin->ix->nEntriesInUse = 0;
320 avimuxin->ix->qwBaseOffset = 0;
321
322 avimuxin->ix_off = avimux->size;
323 avimux->size += sizeof(avimuxin->ix_data);
324 }
325
326 if(*head_prev == avimuxin->samples_head)
327 avimuxin->samples_head = NULL;
328 else
329 *head_prev = *prev;
330
331 avimuxin->stream_time += avimuxin->strh.dwScale;
332 avimuxin->strh.dwLength++;
334 if(!avimuxin->ix->qwBaseOffset)
335 avimuxin->ix->qwBaseOffset = avimux->size;
336 avimuxin->ix->aIndex[avimuxin->ix->nEntriesInUse].dwOffset =
337 avimux->size + sizeof(RIFFCHUNK) - avimuxin->ix->qwBaseOffset;
338
339 hr = out_seek(avimux, avimux->size);
340 if(FAILED(hr)) {
341 IMediaSample_Release(sample);
342 return hr;
343 }
344 }
345 avimuxin->ix->aIndex[avimuxin->ix->nEntriesInUse].dwSize = size |
347 avimuxin->ix->nEntriesInUse++;
348
349 rf.fcc = FCC('0'+avimuxin->stream_id/10, '0'+avimuxin->stream_id%10,
350 'd', flags & AM_SAMPLE_SPLICEPOINT ? 'b' : 'c');
351 rf.cb = size;
354 avimux->idx1[avimux->idx1_entries-1].dwChunkOffset : avimux->size, size);
355 if(FAILED(hr)) {
356 IMediaSample_Release(sample);
357 return hr;
358 }
359
361 hr = out_write(avimux, &rf, sizeof(rf));
362 if(FAILED(hr)) {
363 IMediaSample_Release(sample);
364 return hr;
365 }
366 hr = out_write(avimux, data, size);
367 if(FAILED(hr)) {
368 IMediaSample_Release(sample);
369 return hr;
370 }
371 flags = 0;
372 hr = out_write(avimux, &flags, ALIGN(rf.cb)-rf.cb);
373 if(FAILED(hr)) {
374 IMediaSample_Release(sample);
375 return hr;
376 }
377 }
378 IMediaSample_Release(sample);
379 }
380 return S_OK;
381}
#define AVISTDINDEX_ENTRIES
Definition: avimux.c:27
#define AVIIF_KEYFRAME
Definition: aviriff.h:131
#define AVISTDINDEX_DELTAFRAME
Definition: aviriff.h:211
@ AM_SAMPLE_TIMEDISCONTINUITY
Definition: axcore.idl:442
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
LONGLONG stream_time
Definition: avimux.c:39
BYTE ix_data[FIELD_OFFSET(AVISTDINDEX, aIndex[AVISTDINDEX_ENTRIES])]
Definition: avimux.c:67
AVISTDINDEX * ix
Definition: avimux.c:60
int stream_id
Definition: avimux.c:38
int ix_off
Definition: avimux.c:59
AVISUPERINDEX * indx
Definition: avimux.c:48
AVIINDEXENTRY * idx1
Definition: avimux.c:97
int size
Definition: avimux.c:107
int idx1_entries
Definition: avimux.c:95
DWORD dwChunkOffset
Definition: vfw.h:988
DWORD dwSize
Definition: aviriff.h:216
DWORD dwOffset
Definition: aviriff.h:215
DWORD nEntriesInUse
Definition: aviriff.h:225
AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY]
Definition: aviriff.h:229
DWORDLONG qwBaseOffset
Definition: aviriff.h:227
DWORD dwLength
Definition: aviriff.h:111
struct _avisuperindex::_avisuperindex_entry aIndex[ANYSIZE_ARRAY]
DWORD nEntriesInUse
Definition: aviriff.h:201

Referenced by avi_mux_cleanup_stream(), and queue_sample().

◆ idx1_add_entry()

static HRESULT idx1_add_entry ( AviMux *  avimux,
DWORD  ckid,
DWORD  flags,
DWORD  off,
DWORD  len 
)
inlinestatic

Definition at line 238 of file avimux.c.

239{
240 if(avimux->idx1_entries == avimux->idx1_size) {
241 AVIINDEXENTRY *new_idx = realloc(avimux->idx1, sizeof(*avimux->idx1) * 2 * avimux->idx1_size);
242 if(!new_idx)
243 return E_OUTOFMEMORY;
244
245 avimux->idx1_size *= 2;
246 avimux->idx1 = new_idx;
247 }
248
249 avimux->idx1[avimux->idx1_entries].ckid = ckid;
250 avimux->idx1[avimux->idx1_entries].dwFlags = flags;
251 avimux->idx1[avimux->idx1_entries].dwChunkOffset = off;
252 avimux->idx1[avimux->idx1_entries].dwChunkLength = len;
253 avimux->idx1_entries++;
254 return S_OK;
255}
#define realloc
Definition: debug_ros.c:6
GLenum GLsizei len
Definition: glext.h:6722
int idx1_size
Definition: avimux.c:96
DWORD dwChunkLength
Definition: vfw.h:989
DWORD ckid
Definition: vfw.h:986
DWORD dwFlags
Definition: vfw.h:987

Referenced by avi_mux_init_stream(), and flush_queue().

◆ impl_from_IConfigAviMux()

◆ impl_from_IConfigInterleaving()

static AviMux * impl_from_IConfigInterleaving ( IConfigInterleaving *  iface)
inlinestatic

◆ impl_from_IMediaSeeking()

◆ impl_from_in_IPin()

◆ impl_from_IPersistMediaPropertyBag()

static AviMux * impl_from_IPersistMediaPropertyBag ( IPersistMediaPropertyBag *  iface)
inlinestatic

◆ impl_from_ISpecifyPropertyPages()

static AviMux * impl_from_ISpecifyPropertyPages ( ISpecifyPropertyPages *  iface)
inlinestatic

Definition at line 1070 of file avimux.c.

1071{
1072 return CONTAINING_RECORD(iface, AviMux, ISpecifyPropertyPages_iface);
1073}

Referenced by SpecifyPropertyPages_AddRef(), SpecifyPropertyPages_GetPages(), SpecifyPropertyPages_QueryInterface(), and SpecifyPropertyPages_Release().

◆ impl_from_out_IQualityControl()

static AviMux * impl_from_out_IQualityControl ( IQualityControl *  iface)
inlinestatic

◆ impl_from_source_pin()

static AviMux * impl_from_source_pin ( struct strmbase_pin *  iface)
inlinestatic

Definition at line 1109 of file avimux.c.

1110{
1111 return CONTAINING_RECORD(iface, AviMux, source.pin);
1112}

Referenced by AviMuxOut_AttemptConnection(), and source_query_interface().

◆ impl_from_strmbase_filter()

static AviMux * impl_from_strmbase_filter ( struct strmbase_filter *  filter)
inlinestatic

◆ impl_sink_from_strmbase_pin()

static AviMuxIn * impl_sink_from_strmbase_pin ( struct strmbase_pin *  iface)
inlinestatic

Definition at line 1276 of file avimux.c.

1277{
1278 return CONTAINING_RECORD(iface, AviMuxIn, pin.pin);
1279}

Referenced by avi_mux_sink_connect(), avi_mux_sink_disconnect(), and sink_query_interface().

◆ MediaSeeking_AddRef()

static ULONG WINAPI MediaSeeking_AddRef ( IMediaSeeking *  iface)
static

Definition at line 837 of file avimux.c.

838{
840 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
841}
static AviMux * impl_from_IMediaSeeking(IMediaSeeking *iface)
Definition: avimux.c:825

◆ MediaSeeking_CheckCapabilities()

static HRESULT WINAPI MediaSeeking_CheckCapabilities ( IMediaSeeking *  iface,
DWORD *  pCapabilities 
)
static

Definition at line 857 of file avimux.c.

859{
861 FIXME("(%p)->(%p)\n", This, pCapabilities);
862 return E_NOTIMPL;
863}

◆ MediaSeeking_ConvertTimeFormat()

static HRESULT WINAPI MediaSeeking_ConvertTimeFormat ( IMediaSeeking *  iface,
LONGLONG *  pTarget,
const GUID *  pTargetFormat,
LONGLONG  Source,
const GUID *  pSourceFormat 
)
static

Definition at line 929 of file avimux.c.

931{
933 FIXME("(%p)->(%p %s %s %s)\n", This, pTarget, debugstr_guid(pTargetFormat),
934 wine_dbgstr_longlong(Source), debugstr_guid(pSourceFormat));
935 return E_NOTIMPL;
936}
FxIoTarget * pTarget
Definition: fxdeviceapi.cpp:97
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169

◆ MediaSeeking_GetAvailable()

static HRESULT WINAPI MediaSeeking_GetAvailable ( IMediaSeeking *  iface,
LONGLONG *  pEarliest,
LONGLONG *  pLatest 
)
static

Definition at line 954 of file avimux.c.

956{
958 FIXME("(%p)->(%p %p)\n", This, pEarliest, pLatest);
959 return E_NOTIMPL;
960}

◆ MediaSeeking_GetCapabilities()

static HRESULT WINAPI MediaSeeking_GetCapabilities ( IMediaSeeking *  iface,
DWORD *  pCapabilities 
)
static

Definition at line 849 of file avimux.c.

851{
853 FIXME("(%p)->(%p)\n", This, pCapabilities);
854 return E_NOTIMPL;
855}

◆ MediaSeeking_GetCurrentPosition()

static HRESULT WINAPI MediaSeeking_GetCurrentPosition ( IMediaSeeking *  iface,
LONGLONG *  pCurrent 
)
static

Definition at line 921 of file avimux.c.

923{
925 FIXME("(%p)->(%p)\n", This, pCurrent);
926 return E_NOTIMPL;
927}

◆ MediaSeeking_GetDuration()

static HRESULT WINAPI MediaSeeking_GetDuration ( IMediaSeeking *  iface,
LONGLONG *  pDuration 
)
static

Definition at line 905 of file avimux.c.

907{
909 FIXME("(%p)->(%p)\n", This, pDuration);
910 return E_NOTIMPL;
911}

◆ MediaSeeking_GetPositions()

static HRESULT WINAPI MediaSeeking_GetPositions ( IMediaSeeking *  iface,
LONGLONG *  pCurrent,
LONGLONG *  pStop 
)
static

Definition at line 946 of file avimux.c.

948{
950 FIXME("(%p)->(%p %p)\n", This, pCurrent, pStop);
951 return E_NOTIMPL;
952}

◆ MediaSeeking_GetPreroll()

static HRESULT WINAPI MediaSeeking_GetPreroll ( IMediaSeeking *  iface,
LONGLONG *  pllPreroll 
)
static

Definition at line 976 of file avimux.c.

977{
979 FIXME("(%p)->(%p)\n", This, pllPreroll);
980 return E_NOTIMPL;
981}

◆ MediaSeeking_GetRate()

static HRESULT WINAPI MediaSeeking_GetRate ( IMediaSeeking *  iface,
double *  pdRate 
)
static

Definition at line 969 of file avimux.c.

970{
972 FIXME("(%p)->(%p)\n", This, pdRate);
973 return E_NOTIMPL;
974}

◆ MediaSeeking_GetStopPosition()

static HRESULT WINAPI MediaSeeking_GetStopPosition ( IMediaSeeking *  iface,
LONGLONG *  pStop 
)
static

Definition at line 913 of file avimux.c.

915{
917 FIXME("(%p)->(%p)\n", This, pStop);
918 return E_NOTIMPL;
919}

◆ MediaSeeking_GetTimeFormat()

static HRESULT WINAPI MediaSeeking_GetTimeFormat ( IMediaSeeking *  iface,
GUID *  pFormat 
)
static

Definition at line 881 of file avimux.c.

883{
885 FIXME("(%p)->(%p)\n", This, pFormat);
886 return E_NOTIMPL;
887}

◆ MediaSeeking_IsFormatSupported()

static HRESULT WINAPI MediaSeeking_IsFormatSupported ( IMediaSeeking *  iface,
const GUID *  pFormat 
)
static

Definition at line 865 of file avimux.c.

867{
869 FIXME("(%p)->(%s)\n", This, debugstr_guid(pFormat));
870 return E_NOTIMPL;
871}

◆ MediaSeeking_IsUsingTimeFormat()

static HRESULT WINAPI MediaSeeking_IsUsingTimeFormat ( IMediaSeeking *  iface,
const GUID *  pFormat 
)
static

Definition at line 889 of file avimux.c.

891{
893 FIXME("(%p)->(%s)\n", This, debugstr_guid(pFormat));
894 return E_NOTIMPL;
895}

◆ MediaSeeking_QueryInterface()

static HRESULT WINAPI MediaSeeking_QueryInterface ( IMediaSeeking *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 830 of file avimux.c.

832{
834 return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
835}

◆ MediaSeeking_QueryPreferredFormat()

static HRESULT WINAPI MediaSeeking_QueryPreferredFormat ( IMediaSeeking *  iface,
GUID *  pFormat 
)
static

Definition at line 873 of file avimux.c.

875{
877 FIXME("(%p)->(%p)\n", This, pFormat);
878 return E_NOTIMPL;
879}

◆ MediaSeeking_Release()

static ULONG WINAPI MediaSeeking_Release ( IMediaSeeking *  iface)
static

Definition at line 843 of file avimux.c.

844{
846 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
847}

◆ MediaSeeking_SetPositions()

static HRESULT WINAPI MediaSeeking_SetPositions ( IMediaSeeking *  iface,
LONGLONG *  pCurrent,
DWORD  dwCurrentFlags,
LONGLONG *  pStop,
DWORD  dwStopFlags 
)
static

Definition at line 938 of file avimux.c.

940{
942 FIXME("(%p)->(%p %#lx %p %#lx)\n", This, pCurrent, dwCurrentFlags, pStop, dwStopFlags);
943 return E_NOTIMPL;
944}

◆ MediaSeeking_SetRate()

static HRESULT WINAPI MediaSeeking_SetRate ( IMediaSeeking *  iface,
double  dRate 
)
static

Definition at line 962 of file avimux.c.

963{
965 FIXME("(%p)->(%lf)\n", This, dRate);
966 return E_NOTIMPL;
967}

◆ MediaSeeking_SetTimeFormat()

static HRESULT WINAPI MediaSeeking_SetTimeFormat ( IMediaSeeking *  iface,
const GUID *  pFormat 
)
static

Definition at line 897 of file avimux.c.

899{
901 FIXME("(%p)->(%s)\n", This, debugstr_guid(pFormat));
902 return E_NOTIMPL;
903}

◆ out_flush()

static HRESULT out_flush ( AviMux *  This)
static

Definition at line 171 of file avimux.c.

172{
173 ULONG written;
174 HRESULT hr;
175
176 if(!This->buf_pos)
177 return S_OK;
178
179 hr = IStream_Write(This->stream, This->buf, This->buf_pos, &written);
180 if(FAILED(hr))
181 return hr;
182 if (written != This->buf_pos)
183 return E_FAIL;
184
185 This->buf_pos = 0;
186 return S_OK;
187}
uint32_t ULONG
Definition: typedefs.h:59

Referenced by avi_mux_cleanup_stream(), out_seek(), and out_write().

◆ out_seek()

static HRESULT out_seek ( AviMux *  This,
int  pos 
)
static

Definition at line 189 of file avimux.c.

190{
192 HRESULT hr;
193
194 hr = out_flush(This);
195 if(FAILED(hr))
196 return hr;
197
198 li.QuadPart = pos;
199 hr = IStream_Seek(This->stream, li, STREAM_SEEK_SET, NULL);
200 if(FAILED(hr))
201 return hr;
202
203 This->out_pos = pos;
204 if(This->out_pos > This->size)
205 This->size = This->out_pos;
206 return hr;
207}
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by avi_mux_cleanup_stream(), and flush_queue().

◆ out_write()

static HRESULT out_write ( AviMux *  This,
const void *  data,
int  size 
)
static

Definition at line 209 of file avimux.c.

210{
211 int chunk_size;
212 HRESULT hr;
213
214 while(1) {
215 if (size > sizeof(This->buf) - This->buf_pos)
216 chunk_size = sizeof(This->buf) - This->buf_pos;
217 else
218 chunk_size = size;
219
220 memcpy(This->buf + This->buf_pos, data, chunk_size);
221 size -= chunk_size;
222 data = (const BYTE*)data + chunk_size;
223 This->buf_pos += chunk_size;
224 This->out_pos += chunk_size;
225 if (This->out_pos > This->size)
226 This->size = This->out_pos;
227
228 if(!size)
229 break;
230 hr = out_flush(This);
231 if(FAILED(hr))
232 return hr;
233 }
234
235 return S_OK;
236}

Referenced by avi_mux_cleanup_stream(), and flush_queue().

◆ PersistMediaPropertyBag_AddRef()

static ULONG WINAPI PersistMediaPropertyBag_AddRef ( IPersistMediaPropertyBag *  iface)
static

Definition at line 1018 of file avimux.c.

1019{
1021 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1022}
static AviMux * impl_from_IPersistMediaPropertyBag(IPersistMediaPropertyBag *iface)
Definition: avimux.c:1006

◆ PersistMediaPropertyBag_GetClassID()

static HRESULT WINAPI PersistMediaPropertyBag_GetClassID ( IPersistMediaPropertyBag *  iface,
CLSID *  pClassID 
)
static

Definition at line 1030 of file avimux.c.

1032{
1034 return IBaseFilter_GetClassID(&This->filter.IBaseFilter_iface, pClassID);
1035}

◆ PersistMediaPropertyBag_InitNew()

static HRESULT WINAPI PersistMediaPropertyBag_InitNew ( IPersistMediaPropertyBag *  iface)
static

Definition at line 1037 of file avimux.c.

1038{
1040 FIXME("(%p)->()\n", This);
1041 return E_NOTIMPL;
1042}

◆ PersistMediaPropertyBag_Load()

static HRESULT WINAPI PersistMediaPropertyBag_Load ( IPersistMediaPropertyBag *  iface,
IMediaPropertyBag *  pPropBag,
IErrorLog *  pErrorLog 
)
static

Definition at line 1044 of file avimux.c.

1046{
1048 FIXME("(%p)->()\n", This);
1049 return E_NOTIMPL;
1050}

◆ PersistMediaPropertyBag_QueryInterface()

static HRESULT WINAPI PersistMediaPropertyBag_QueryInterface ( IPersistMediaPropertyBag *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1011 of file avimux.c.

1013{
1015 return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
1016}

◆ PersistMediaPropertyBag_Release()

static ULONG WINAPI PersistMediaPropertyBag_Release ( IPersistMediaPropertyBag *  iface)
static

Definition at line 1024 of file avimux.c.

1025{
1027 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1028}

◆ PersistMediaPropertyBag_Save()

static HRESULT WINAPI PersistMediaPropertyBag_Save ( IPersistMediaPropertyBag *  iface,
IMediaPropertyBag *  pPropBag,
BOOL  fClearDirty,
BOOL  fSaveAllProperties 
)
static

Definition at line 1052 of file avimux.c.

1054{
1056 FIXME("(%p)->()\n", This);
1057 return E_NOTIMPL;
1058}

◆ queue_sample()

static HRESULT queue_sample ( AviMux *  avimux,
AviMuxIn *  avimuxin,
IMediaSample *  sample 
)
static

Definition at line 383 of file avimux.c.

384{
385 IMediaSample **prev, **head_prev;
386 HRESULT hr;
387
388 hr = IMediaSample_GetPointer(sample, (BYTE**)&prev);
389 if(FAILED(hr))
390 return hr;
391 prev--;
392
393 if(avimuxin->samples_head) {
394 hr = IMediaSample_GetPointer(avimuxin->samples_head, (BYTE**)&head_prev);
395 if(FAILED(hr))
396 return hr;
397 head_prev--;
398
399 *prev = *head_prev;
400 *head_prev = sample;
401 }else {
402 *prev = sample;
403 }
404 avimuxin->samples_head = sample;
405 IMediaSample_AddRef(sample);
406
407 return flush_queue(avimux, avimuxin, FALSE);
408}

Referenced by AviMuxIn_Receive().

◆ sink_query_accept()

static HRESULT sink_query_accept ( struct strmbase_pin *  base,
const AM_MEDIA_TYPE *  pmt 
)
static

Definition at line 1300 of file avimux.c.

1301{
1302 if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) &&
1303 IsEqualIID(&pmt->formattype, &FORMAT_WaveFormatEx))
1304 return S_OK;
1305 if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Interleaved) &&
1306 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo))
1307 return S_OK;
1308 if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) &&
1309 (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo) ||
1310 IsEqualIID(&pmt->formattype, &FORMAT_DvInfo)))
1311 return S_OK;
1312 return S_FALSE;
1313}

◆ sink_query_interface()

static HRESULT sink_query_interface ( struct strmbase_pin *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 1281 of file avimux.c.

1282{
1284
1285 if (IsEqualGUID(iid, &IID_IAMStreamControl))
1286 *out = &pin->IAMStreamControl_iface;
1287 else if (IsEqualGUID(iid, &IID_IMemInputPin))
1288 *out = &pin->pin.IMemInputPin_iface;
1289 else if (IsEqualGUID(iid, &IID_IPropertyBag))
1290 *out = &pin->IPropertyBag_iface;
1291 else if (IsEqualGUID(iid, &IID_IQualityControl))
1292 *out = &pin->IQualityControl_iface;
1293 else
1294 return E_NOINTERFACE;
1295
1296 IUnknown_AddRef((IUnknown *)*out);
1297 return S_OK;
1298}
const GUID IID_IPropertyBag
IAMStreamControl IAMStreamControl_iface
Definition: avimux.c:32
IPropertyBag IPropertyBag_iface
Definition: avimux.c:33
IQualityControl IQualityControl_iface
Definition: avimux.c:34

◆ source_get_media_type()

static HRESULT source_get_media_type ( struct strmbase_pin *  base,
unsigned int  iPosition,
AM_MEDIA_TYPE *  amt 
)
static

Definition at line 1167 of file avimux.c.

1168{
1169 TRACE("(%p)->(%d %p)\n", base, iPosition, amt);
1170
1171 if(iPosition > 0)
1172 return VFW_S_NO_MORE_ITEMS;
1173
1174 amt->majortype = MEDIATYPE_Stream;
1175 amt->subtype = MEDIASUBTYPE_Avi;
1176 amt->bFixedSizeSamples = TRUE;
1177 amt->bTemporalCompression = FALSE;
1178 amt->lSampleSize = 1;
1179 amt->formattype = GUID_NULL;
1180 amt->pUnk = NULL;
1181 amt->cbFormat = 0;
1182 amt->pbFormat = NULL;
1183 return S_OK;
1184}
#define GUID_NULL
Definition: ks.h:106
#define VFW_S_NO_MORE_ITEMS
Definition: vfwmsgs.h:19

◆ source_query_accept()

static HRESULT source_query_accept ( struct strmbase_pin *  iface,
const AM_MEDIA_TYPE *  mt 
)
static

Definition at line 1127 of file avimux.c.

1128{
1129 if (!IsEqualGUID(&mt->majortype, &GUID_NULL) && !IsEqualGUID(&mt->majortype, &MEDIATYPE_Stream))
1130 return S_FALSE;
1131 if (!IsEqualGUID(&mt->subtype, &GUID_NULL) && !IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_Avi))
1132 return S_FALSE;
1133 return S_OK;
1134}

◆ source_query_interface()

static HRESULT source_query_interface ( struct strmbase_pin *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 1114 of file avimux.c.

1115{
1117
1118 if (IsEqualGUID(iid, &IID_IQualityControl))
1119 *out = &filter->IQualityControl_iface;
1120 else
1121 return E_NOINTERFACE;
1122
1123 IUnknown_AddRef((IUnknown *)*out);
1124 return S_OK;
1125}

◆ SpecifyPropertyPages_AddRef()

static ULONG WINAPI SpecifyPropertyPages_AddRef ( ISpecifyPropertyPages *  iface)
static

Definition at line 1082 of file avimux.c.

1083{
1085 return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
1086}
static AviMux * impl_from_ISpecifyPropertyPages(ISpecifyPropertyPages *iface)
Definition: avimux.c:1070

◆ SpecifyPropertyPages_GetPages()

static HRESULT WINAPI SpecifyPropertyPages_GetPages ( ISpecifyPropertyPages *  iface,
CAUUID *  pPages 
)
static

Definition at line 1094 of file avimux.c.

1096{
1098 FIXME("(%p)->(%p)\n", This, pPages);
1099 return E_NOTIMPL;
1100}

◆ SpecifyPropertyPages_QueryInterface()

static HRESULT WINAPI SpecifyPropertyPages_QueryInterface ( ISpecifyPropertyPages *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1075 of file avimux.c.

1077{
1079 return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
1080}

◆ SpecifyPropertyPages_Release()

static ULONG WINAPI SpecifyPropertyPages_Release ( ISpecifyPropertyPages *  iface)
static

Definition at line 1088 of file avimux.c.

1089{
1091 return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
1092}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( quartz  )

Variable Documentation

◆ AviMuxIn_AMStreamControlVtbl

const IAMStreamControlVtbl AviMuxIn_AMStreamControlVtbl
static
Initial value:
= {
}
static HRESULT WINAPI AviMuxIn_AMStreamControl_StartAt(IAMStreamControl *iface, const REFERENCE_TIME *start, DWORD cookie)
Definition: avimux.c:1533
static ULONG WINAPI AviMuxIn_AMStreamControl_Release(IAMStreamControl *iface)
Definition: avimux.c:1526
static HRESULT WINAPI AviMuxIn_AMStreamControl_QueryInterface(IAMStreamControl *iface, REFIID riid, void **ppv)
Definition: avimux.c:1512
static ULONG WINAPI AviMuxIn_AMStreamControl_AddRef(IAMStreamControl *iface)
Definition: avimux.c:1519
static HRESULT WINAPI AviMuxIn_AMStreamControl_GetInfo(IAMStreamControl *iface, AM_STREAM_INFO *info)
Definition: avimux.c:1547
static HRESULT WINAPI AviMuxIn_AMStreamControl_StopAt(IAMStreamControl *iface, const REFERENCE_TIME *stop, BOOL send_extra, DWORD cookie)
Definition: avimux.c:1540

Definition at line 1554 of file avimux.c.

Referenced by create_input_pin().

◆ AviMuxIn_MemInputPinVtbl

const IMemInputPinVtbl AviMuxIn_MemInputPinVtbl
static
Initial value:
= {
}
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *pProps)
Definition: avimux.c:1626
static HRESULT WINAPI AviMuxIn_MemInputPin_GetAllocator(IMemInputPin *iface, IMemAllocator **ppAllocator)
Definition: avimux.c:1589
static HRESULT WINAPI AviMuxIn_MemInputPin_Receive(IMemInputPin *iface, IMediaSample *pSample)
Definition: avimux.c:1641
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveMultiple(IMemInputPin *iface, IMediaSample **pSamples, LONG nSamples, LONG *nSamplesProcessed)
Definition: avimux.c:1651
static ULONG WINAPI AviMuxIn_MemInputPin_Release(IMemInputPin *iface)
Definition: avimux.c:1582
static HRESULT WINAPI AviMuxIn_MemInputPin_ReceiveCanBlock(IMemInputPin *iface)
Definition: avimux.c:1670
static ULONG WINAPI AviMuxIn_MemInputPin_AddRef(IMemInputPin *iface)
Definition: avimux.c:1575
static HRESULT WINAPI AviMuxIn_MemInputPin_NotifyAllocator(IMemInputPin *iface, IMemAllocator *pAllocator, BOOL bReadOnly)
Definition: avimux.c:1604
static HRESULT WINAPI AviMuxIn_MemInputPin_QueryInterface(IMemInputPin *iface, REFIID riid, void **ppv)
Definition: avimux.c:1568

Definition at line 1685 of file avimux.c.

Referenced by create_input_pin().

◆ AviMuxIn_PropertyBagVtbl

const IPropertyBagVtbl AviMuxIn_PropertyBagVtbl
static
Initial value:
= {
}
static HRESULT WINAPI AviMuxIn_PropertyBag_QueryInterface(IPropertyBag *iface, REFIID riid, void **ppv)
Definition: avimux.c:1702
static ULONG WINAPI AviMuxIn_PropertyBag_AddRef(IPropertyBag *iface)
Definition: avimux.c:1709
static HRESULT WINAPI AviMuxIn_PropertyBag_Write(IPropertyBag *iface, const WCHAR *name, VARIANT *value)
Definition: avimux.c:1731
static HRESULT WINAPI AviMuxIn_PropertyBag_Read(IPropertyBag *iface, const WCHAR *name, VARIANT *value, IErrorLog *error_log)
Definition: avimux.c:1723
static ULONG WINAPI AviMuxIn_PropertyBag_Release(IPropertyBag *iface)
Definition: avimux.c:1716

Definition at line 1739 of file avimux.c.

Referenced by create_input_pin().

◆ AviMuxIn_QualityControlVtbl

const IQualityControlVtbl AviMuxIn_QualityControlVtbl
static
Initial value:
= {
}
static HRESULT WINAPI AviMuxIn_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
Definition: avimux.c:1752
static ULONG WINAPI AviMuxIn_QualityControl_AddRef(IQualityControl *iface)
Definition: avimux.c:1759
static HRESULT WINAPI AviMuxIn_QualityControl_Notify(IQualityControl *iface, IBaseFilter *filter, Quality q)
Definition: avimux.c:1773
static HRESULT WINAPI AviMuxIn_QualityControl_SetSink(IQualityControl *iface, IQualityControl *sink)
Definition: avimux.c:1782
static ULONG WINAPI AviMuxIn_QualityControl_Release(IQualityControl *iface)
Definition: avimux.c:1766

Definition at line 1788 of file avimux.c.

Referenced by create_input_pin().

◆ AviMuxOut_QualityControlVtbl

const IQualityControlVtbl AviMuxOut_QualityControlVtbl
static
Initial value:
= {
}
static HRESULT WINAPI AviMuxOut_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
Definition: avimux.c:1229
static ULONG WINAPI AviMuxOut_QualityControl_AddRef(IQualityControl *iface)
Definition: avimux.c:1236
static HRESULT WINAPI AviMuxOut_QualityControl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality q)
Definition: avimux.c:1248
static ULONG WINAPI AviMuxOut_QualityControl_Release(IQualityControl *iface)
Definition: avimux.c:1242
static HRESULT WINAPI AviMuxOut_QualityControl_SetSink(IQualityControl *iface, IQualityControl *piqc)
Definition: avimux.c:1260

Definition at line 1268 of file avimux.c.

Referenced by avi_mux_create().

◆ ConfigAviMuxVtbl

const IConfigAviMuxVtbl ConfigAviMuxVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ConfigAviMux_GetMasterStream(IConfigAviMux *iface, LONG *pStream)
Definition: avimux.c:705
static HRESULT WINAPI ConfigAviMux_SetOutputCompatibilityIndex(IConfigAviMux *iface, BOOL fOldIndex)
Definition: avimux.c:712
static HRESULT WINAPI ConfigAviMux_GetOutputCompatibilityIndex(IConfigAviMux *iface, BOOL *pfOldIndex)
Definition: avimux.c:720
static HRESULT WINAPI ConfigAviMux_SetMasterStream(IConfigAviMux *iface, LONG iStream)
Definition: avimux.c:698
static HRESULT WINAPI ConfigAviMux_QueryInterface(IConfigAviMux *iface, REFIID riid, void **ppv)
Definition: avimux.c:679
static ULONG WINAPI ConfigAviMux_AddRef(IConfigAviMux *iface)
Definition: avimux.c:686
static ULONG WINAPI ConfigAviMux_Release(IConfigAviMux *iface)
Definition: avimux.c:692

Definition at line 728 of file avimux.c.

Referenced by avi_mux_create().

◆ ConfigInterleavingVtbl

const IConfigInterleavingVtbl ConfigInterleavingVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ConfigInterleaving_get_Interleaving(IConfigInterleaving *iface, REFERENCE_TIME *prtInterleave, REFERENCE_TIME *prtPreroll)
Definition: avimux.c:807
static HRESULT WINAPI ConfigInterleaving_get_Mode(IConfigInterleaving *iface, InterleavingMode *pMode)
Definition: avimux.c:785
static ULONG WINAPI ConfigInterleaving_Release(IConfigInterleaving *iface)
Definition: avimux.c:756
static HRESULT WINAPI ConfigInterleaving_put_Mode(IConfigInterleaving *iface, InterleavingMode mode)
Definition: avimux.c:762
static HRESULT WINAPI ConfigInterleaving_put_Interleaving(IConfigInterleaving *iface, const REFERENCE_TIME *prtInterleave, const REFERENCE_TIME *prtPreroll)
Definition: avimux.c:793
static ULONG WINAPI ConfigInterleaving_AddRef(IConfigInterleaving *iface)
Definition: avimux.c:750
static HRESULT WINAPI ConfigInterleaving_QueryInterface(IConfigInterleaving *iface, REFIID riid, void **ppv)
Definition: avimux.c:743

Definition at line 815 of file avimux.c.

Referenced by avi_mux_create().

◆ filter_ops

const struct strmbase_filter_ops filter_ops
static
Initial value:
=
{
.filter_get_pin = avi_mux_get_pin,
.filter_destroy = avi_mux_destroy,
.filter_query_interface = avi_mux_query_interface,
.filter_init_stream = avi_mux_init_stream,
.filter_cleanup_stream = avi_mux_cleanup_stream,
}
static HRESULT avi_mux_cleanup_stream(struct strmbase_filter *iface)
Definition: avimux.c:410
static HRESULT avi_mux_init_stream(struct strmbase_filter *iface)
Definition: avimux.c:547
static struct strmbase_pin * avi_mux_get_pin(struct strmbase_filter *iface, unsigned int index)
Definition: avimux.c:118
static void avi_mux_destroy(struct strmbase_filter *iface)
Definition: avimux.c:129
static HRESULT avi_mux_query_interface(struct strmbase_filter *iface, REFIID iid, void **out)
Definition: avimux.c:150

Definition at line 665 of file avimux.c.

Referenced by avi_mux_create().

◆ MediaSeekingVtbl

const IMediaSeekingVtbl MediaSeekingVtbl
static
Initial value:
= {
}
static HRESULT WINAPI MediaSeeking_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: avimux.c:849
static HRESULT WINAPI MediaSeeking_QueryInterface(IMediaSeeking *iface, REFIID riid, void **ppv)
Definition: avimux.c:830
static HRESULT WINAPI MediaSeeking_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
Definition: avimux.c:954
static HRESULT WINAPI MediaSeeking_IsFormatSupported(IMediaSeeking *iface, const GUID *pFormat)
Definition: avimux.c:865
static HRESULT WINAPI MediaSeeking_GetDuration(IMediaSeeking *iface, LONGLONG *pDuration)
Definition: avimux.c:905
static HRESULT WINAPI MediaSeeking_CheckCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: avimux.c:857
static HRESULT WINAPI MediaSeeking_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: avimux.c:889
static HRESULT WINAPI MediaSeeking_GetPreroll(IMediaSeeking *iface, LONGLONG *pllPreroll)
Definition: avimux.c:976
static HRESULT WINAPI MediaSeeking_SetRate(IMediaSeeking *iface, double dRate)
Definition: avimux.c:962
static HRESULT WINAPI MediaSeeking_GetRate(IMediaSeeking *iface, double *pdRate)
Definition: avimux.c:969
static HRESULT WINAPI MediaSeeking_SetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
Definition: avimux.c:938
static HRESULT WINAPI MediaSeeking_GetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
Definition: avimux.c:946
static ULONG WINAPI MediaSeeking_AddRef(IMediaSeeking *iface)
Definition: avimux.c:837
static HRESULT WINAPI MediaSeeking_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: avimux.c:897
static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
Definition: avimux.c:921
static HRESULT WINAPI MediaSeeking_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: avimux.c:881
static HRESULT WINAPI MediaSeeking_QueryPreferredFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: avimux.c:873
static HRESULT WINAPI MediaSeeking_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
Definition: avimux.c:913
static ULONG WINAPI MediaSeeking_Release(IMediaSeeking *iface)
Definition: avimux.c:843
static HRESULT WINAPI MediaSeeking_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
Definition: avimux.c:929

Definition at line 983 of file avimux.c.

Referenced by avi_mux_create().

◆ PersistMediaPropertyBagVtbl

const IPersistMediaPropertyBagVtbl PersistMediaPropertyBagVtbl
static
Initial value:
= {
}
static HRESULT WINAPI PersistMediaPropertyBag_Load(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, IErrorLog *pErrorLog)
Definition: avimux.c:1044
static HRESULT WINAPI PersistMediaPropertyBag_Save(IPersistMediaPropertyBag *iface, IMediaPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
Definition: avimux.c:1052
static HRESULT WINAPI PersistMediaPropertyBag_GetClassID(IPersistMediaPropertyBag *iface, CLSID *pClassID)
Definition: avimux.c:1030
static HRESULT WINAPI PersistMediaPropertyBag_InitNew(IPersistMediaPropertyBag *iface)
Definition: avimux.c:1037
static ULONG WINAPI PersistMediaPropertyBag_AddRef(IPersistMediaPropertyBag *iface)
Definition: avimux.c:1018
static HRESULT WINAPI PersistMediaPropertyBag_QueryInterface(IPersistMediaPropertyBag *iface, REFIID riid, void **ppv)
Definition: avimux.c:1011
static ULONG WINAPI PersistMediaPropertyBag_Release(IPersistMediaPropertyBag *iface)
Definition: avimux.c:1024

Definition at line 1060 of file avimux.c.

Referenced by avi_mux_create().

◆ sink_ops

const struct strmbase_sink_ops sink_ops
static
Initial value:
=
{
.base.pin_query_interface = sink_query_interface,
.base.pin_query_accept = sink_query_accept,
.pfnReceive = AviMuxIn_Receive,
.sink_connect = avi_mux_sink_connect,
.sink_disconnect = avi_mux_sink_disconnect,
}
static HRESULT sink_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *pmt)
Definition: avimux.c:1300
static void avi_mux_sink_disconnect(struct strmbase_sink *iface)
Definition: avimux.c:1469
static HRESULT avi_mux_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt)
Definition: avimux.c:1418
static HRESULT WINAPI AviMuxIn_Receive(struct strmbase_sink *base, IMediaSample *pSample)
Definition: avimux.c:1315
static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
Definition: avimux.c:1281

Definition at line 1492 of file avimux.c.

Referenced by create_input_pin().

◆ source_ops

const struct strmbase_source_ops source_ops
static
Initial value:
=
{
.base.pin_query_interface = source_query_interface,
.base.pin_query_accept = source_query_accept,
.base.pin_get_media_type = source_get_media_type,
.pfnAttemptConnection = AviMuxOut_AttemptConnection,
.pfnDecideAllocator = AviMuxOut_DecideAllocator,
}
static HRESULT source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
Definition: avimux.c:1127
static HRESULT WINAPI AviMuxOut_DecideAllocator(struct strmbase_source *base, IMemInputPin *pPin, IMemAllocator **pAlloc)
Definition: avimux.c:1186
static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt)
Definition: avimux.c:1167
static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
Definition: avimux.c:1114
static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: avimux.c:1136

Definition at line 1215 of file avimux.c.

Referenced by avi_mux_create().

◆ SpecifyPropertyPagesVtbl

const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl
static
Initial value:
= {
}
static HRESULT WINAPI SpecifyPropertyPages_GetPages(ISpecifyPropertyPages *iface, CAUUID *pPages)
Definition: avimux.c:1094
static ULONG WINAPI SpecifyPropertyPages_AddRef(ISpecifyPropertyPages *iface)
Definition: avimux.c:1082
static ULONG WINAPI SpecifyPropertyPages_Release(ISpecifyPropertyPages *iface)
Definition: avimux.c:1088
static HRESULT WINAPI SpecifyPropertyPages_QueryInterface(ISpecifyPropertyPages *iface, REFIID riid, void **ppv)
Definition: avimux.c:1075

Definition at line 1102 of file avimux.c.

Referenced by avi_mux_create().