From a786dd45a4ebc6b91936b5e46d0ef0a9befc05af Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 2 Aug 2020 19:36:50 +0300 Subject: Move sdk and eax --- dxsdk/Include/DShowIDL/axcore.idl | 1284 ------------------------------------- 1 file changed, 1284 deletions(-) delete mode 100644 dxsdk/Include/DShowIDL/axcore.idl (limited to 'dxsdk/Include/DShowIDL/axcore.idl') diff --git a/dxsdk/Include/DShowIDL/axcore.idl b/dxsdk/Include/DShowIDL/axcore.idl deleted file mode 100644 index 4aceea78..00000000 --- a/dxsdk/Include/DShowIDL/axcore.idl +++ /dev/null @@ -1,1284 +0,0 @@ -//------------------------------------------------------------------------------ -// File: AXCore.idl -// -// Desc: Core streaming interfaces. Other ActiveMovie-only interfaces -// are in AXExtend.idl. -// -// Copyright (c) 1992-2002, Microsoft Corporation. All rights reserved. -//------------------------------------------------------------------------------ - - -// include unknwn.idl and objidl.idl first - -#define CHARS_IN_GUID 39 // 128 bits, plus { - } punctuation and terminal null - // chars NOT BYTES in the standard representation - // e.g. {D3588AB0-0781-11ce-B03A-0020AF0BA770} + null - -cpp_quote("#define CHARS_IN_GUID 39") - - -//===================================================================== -//===================================================================== -// media types & formats -//===================================================================== -//===================================================================== - -// There is a high-level media type (audio, compressed video, -// mpeg video, midi). Within each type, there is a subtype (cinepak, pcm) -// and a length+untyped data block defining the format in a -// type-specific manner. EG for video/cinepak, the data block would be -// a bitmapinfo. -// The contents of the format block are defined by the formattype GUID. -// For example, FORMAT_VideoInfo, FORMAT_WaveFormatEx. In the future, this -// may be a pointer to an object supporting property style interfaces -// in which case the GUID may be something like FORMAT_IUnknown. When -// you are passed a media type you should check the format type, if -// it isn't a type you recognize, then don't touch the format block - -typedef struct _AMMediaType { - GUID majortype; - GUID subtype; - BOOL bFixedSizeSamples; - BOOL bTemporalCompression; - ULONG lSampleSize; - GUID formattype; - IUnknown *pUnk; - ULONG cbFormat; - [size_is(cbFormat)] BYTE * pbFormat; -} AM_MEDIA_TYPE; - -//===================================================================== -//===================================================================== -// pin information -//===================================================================== -//===================================================================== - -// is this an input or output pin -typedef enum _PinDirection { - PINDIR_INPUT, - PINDIR_OUTPUT -} PIN_DIRECTION; - -// other types that need defining -#define MAX_PIN_NAME 128 -cpp_quote("#define MAX_PIN_NAME 128") -cpp_quote("#define MAX_FILTER_NAME 128") -#define MAX_FILTER_NAME 128 - - -//===================================================================== -//===================================================================== -// time information -// -// This represents a time (either reference or stream) in 100ns units. -// The class library contains a CRefTime helper class -// that supports simple comparison and arithmetic operations -//===================================================================== -//===================================================================== - -typedef LONGLONG REFERENCE_TIME; -typedef double REFTIME; - -// Win32 HANDLEs have to be cast to these as the MIDL compiler doesn't -// like the HANDLE type or in fact anything remotely associated with -// them. If this ever gets ported to a MAC environment then these will -// have to become an alertable synchronisation object that it supports - -typedef DWORD_PTR HSEMAPHORE; -typedef DWORD_PTR HEVENT; - -//===================================================================== -//===================================================================== -// Allocator properties -// -// Used to describe the actual properties of an allocator, -// and used to request properties from an allocator or from an upstream -// filter that could create an allocator. See IMemAllocator and -// IMemInputPin. -//===================================================================== -//===================================================================== -typedef struct _AllocatorProperties { - long cBuffers; // count of buffers at this allocator - long cbBuffer; // size of each buffer, excluding any prefix - - // alignment of the buffer - buffer start will be aligned on a multiple of - // this amount - long cbAlign; - - // prefix amount. Each buffer is immediately preceeded by cbPrefix bytes. - // note that GetPointer points to the beginning of the buffer proper. - // the prefix is aligned, i.e. (GetPointer() - cbPrefix) is aligned on cbAlign. - long cbPrefix; -} ALLOCATOR_PROPERTIES; - - - - - -// forward declarations (in alphabetical order - we were getting duplicates) -interface IAMovieSetup; -interface IEnumFilters; -interface IEnumMediaTypes; -interface IEnumPins; -interface IBaseFilter; -interface IFilterGraph; -interface IMediaFilter; -interface IMediaSample; -interface IMemAllocator; -interface IMemAllocatorCallbackTemp; -interface IMemAllocatorNotifyCallbackTemp; -interface IMemInputPin; -interface IPin; -interface IReferenceClock; - - - -//===================================================================== -//===================================================================== -// Defines IPin interface -// -// interface representing a single, unidirection connection point on a -// filter. A Pin will connect to exactly one other pin on another filter. -// This interface represents the interface other objects can call on -// this pin. The interface between the filter and the pin is private to -// the implementation of a specific filter. -// -// During the connection process, one pin will be instructed to take -// the lead: the connect interface on this pin will be calling, passing -// the IPin* for the other pin. This connecting pin will call the -// ReceiveConnection member function on the other pin, as well as presumably -// other format-enumeration and queryinterface calls to establish whether -// the connection is possible. -//===================================================================== -//===================================================================== - -[ -object, -uuid(56a86891-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IPin : IUnknown { - - // initiate a connection to another pin. calls ReceiveConnection on the - // other pin. Verifies that the connection is possible and may reject - // it. - // The mediatype parameter is optional. If it is not null, the pin must - // connect using that media type if possible. The subtype and/or format - // type can be GUID_NULL, meaning that the pin can fill them in as desired. - // This allows an application to partially specify the media type to be - // used for the connection, insisting on eg YUV 422 but leaving details - // (such as the image size) to be negotiated between the pins. - HRESULT Connect( - [in] IPin * pReceivePin, // connect yourself to this pin - [in] const AM_MEDIA_TYPE * pmt // (optional) connect using this type - ); - - // called by a connecting pin to make a connection - HRESULT ReceiveConnection( - [in] IPin * pConnector, - [in] const AM_MEDIA_TYPE *pmt // this is the media type we will exchange - ); - - // break a connection - no params since there is only one connection - // possible on this pin - HRESULT Disconnect(void); - - // Find the pin this pin is connected to (if any) - // The pointer returned is AddRef()d - // Fails if the pin is not connected - HRESULT ConnectedTo( - [out] IPin **pPin - ); - - // Return the media type of a connection if the pin is connected - HRESULT ConnectionMediaType( - [out] AM_MEDIA_TYPE *pmt - ); - - // get information about the pin itself - typedef struct _PinInfo { - IBaseFilter *pFilter; // the filter this pin is on - PIN_DIRECTION dir; // am I an input or output pin? - WCHAR achName[MAX_PIN_NAME]; // the name of this pin within this filter - } PIN_INFO; - - HRESULT QueryPinInfo( - [out] PIN_INFO * pInfo - ); - - // We often want to know the direction. Rather than use the - // relatively expensive QueryPinInfo, use this - HRESULT QueryDirection( - [out] PIN_DIRECTION *pPinDir - ); - - // Get an identifier for the pin (allows connections to be saved). - // The storage will be allocated by the filter using CoTaskMemAlloc - // The caller should free it using CoTaskMemFree - HRESULT QueryId( - [out] LPWSTR * Id - ); - - // will the pin accept the format type, S_OK yes, S_FALSE no - HRESULT QueryAccept( - [in] const AM_MEDIA_TYPE *pmt - ); - - // return an enumerator for this pin's preferred media types - HRESULT EnumMediaTypes( - [out] IEnumMediaTypes **ppEnum - ); - - // return an array of IPin* - the pins that this pin internally connects to - // All pins put in the array must be AddReffed (but no others) - // Errors: "Can't say" - FAIL; not enough slots - return S_FALSE - // Default: return E_NOTIMPL - // The filter graph will interpret E_NOTIMPL as any input pin connects to - // all visible output pins and vise versa. - // apPin can be NULL if nPin==0 (not otherwise). - HRESULT QueryInternalConnections( - [out] IPin* *apPin, // array of IPin* - [in, out] ULONG *nPin // on input, the number of slots - // on output the number of pins - ); - - // notify the pin that no more data is expected until a new run - // command is issued. End of stream should be queued and delivered after - // all queued data is delivered. Pass through if there is no queued data. - // Flush should flush any queued EOS. - // returns S_OK unless there is some error. - // input pins only: output pins will normally return E_UNEXPECTED. - HRESULT EndOfStream(void); - - // Flush - - // Enter flush state: do the following steps (in order) - // -- prevent any more Receives succeeding (set a flushing flag) - // -- discard any queued data - // -- free anyone blocked on Receive in your filter - // -- pass BeginFlush to any downstream pins - HRESULT BeginFlush(void); - - // End flush state: do the following steps in order - // -- ensure no more data will be pushed by your filter - // (sync with thread if you have one, stop it pushing and - // discard any queued data) - // -- re-enable Receive (clear internal flushing flag) - // -- pass EndFlush to any downstream pins - HRESULT EndFlush(void); - - // informational: all data arriving after this call is part of a segment - // from StartTime to StopTime, played at rate. This allows filters that - // process buffers containing more than one sample to clip the rendering - // to within the start and stop times. - // - // A source pin will call a destination pin on this method after completing - // delivery of any previous data, and before any Receive calls for the - // new data - HRESULT NewSegment( - [in] REFERENCE_TIME tStart, - [in] REFERENCE_TIME tStop, - [in] double dRate); -} - -typedef IPin *PPIN; - - -//===================================================================== -//===================================================================== -// Defines IEnumPins interface -// -// interface returned from IBaseFilter::EnumPins(). based on IEnumXXXX -//===================================================================== -//===================================================================== - -[ -object, -uuid(56a86892-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IEnumPins : IUnknown { - - HRESULT Next( - [in] ULONG cPins, // place this many pins... - [out, size_is(cPins)] IPin ** ppPins, // ...in this array - [out] ULONG * pcFetched // actual count passed - ); - - HRESULT Skip( - [in] ULONG cPins); - - HRESULT Reset(void); - - HRESULT Clone( - [out] IEnumPins **ppEnum - ); -} - -typedef IEnumPins *PENUMPINS; - - -//===================================================================== -//===================================================================== -// Defines IEnumMediaTypes interface -// -// Enumerates the preferred formats for a pin -//===================================================================== -//===================================================================== - -[ -object, -uuid(89c31040-846b-11ce-97d3-00aa0055595a), -pointer_default(unique) -] -interface IEnumMediaTypes : IUnknown { - - // to call this member function pass in the address of a pointer to a - // media type. The interface will allocate the necessary AM_MEDIA_TYPE - // structures and initialise them with the variable format block - - HRESULT Next( - [in] ULONG cMediaTypes, // place this many types... - [out, size_is(cMediaTypes)] - AM_MEDIA_TYPE ** ppMediaTypes, // ...in this array - [out] ULONG * pcFetched // actual count passed - ); - - HRESULT Skip( - [in] ULONG cMediaTypes); - - HRESULT Reset(void); - - HRESULT Clone( - [out] IEnumMediaTypes **ppEnum - ); -} - -typedef IEnumMediaTypes *PENUMMEDIATYPES; - - - -//======================================================================== -//======================================================================== -// Defines IFilterGraph interface -// -// abstraction representing a graph of filters -// This allows filters to be joined into a graph and operated as a unit. -//======================================================================== -//======================================================================== - -[ -object, -uuid(56a8689f-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IFilterGraph : IUnknown { - - //========================================================================== - // Low level filter functions - //========================================================================== - - // Add a filter to the graph and name it with *pName. - // If the name is not unique, The request will fail. - // The Filter graph will call the JoinFilterGraph - // member function of the filter to inform it. - // This must be called before attempting Connect, ConnectDirect or Render - // for pins of the filter. - - HRESULT AddFilter - ( [in] IBaseFilter * pFilter, - [in, string] LPCWSTR pName - ); - - - // Remove a filter from the graph. The filter graph implementation - // will inform the filter that it is being removed. - - HRESULT RemoveFilter - ( [in] IBaseFilter * pFilter - ); - - - // Set *ppEnum to be an enumerator for all filters in the graph. - - HRESULT EnumFilters - ( [out] IEnumFilters **ppEnum - ); - - - // Set *ppFilter to be the filter which was added with the name *pName - // Will fail and set *ppFilter to NULL if the name is not in this graph. - - HRESULT FindFilterByName - ( [in, string] LPCWSTR pName, - [out] IBaseFilter ** ppFilter - ); - - //========================================================================== - // Low level connection functions - //========================================================================== - - // Connect these two pins directly (i.e. without intervening filters) - // the media type is optional, and may be partially specified (that is - // the subtype and/or format type may be GUID_NULL). See IPin::Connect - // for details of the media type parameter. - HRESULT ConnectDirect - ( [in] IPin * ppinOut, // the output pin - [in] IPin * ppinIn, // the input pin - [in, unique] const AM_MEDIA_TYPE* pmt // optional mediatype - ); - - // Break the connection that this pin has and reconnect it to the - // same other pin. - - HRESULT Reconnect - ( [in] IPin * ppin // the pin to disconnect and reconnect - ); - - - - // Disconnect this pin, if connected. Successful no-op if not connected. - - HRESULT Disconnect - ( [in] IPin * ppin - ); - - //========================================================================== - // intelligent connectivity - now in IGraphBuilder, axextend.idl - //========================================================================== - - //========================================================================== - // Whole graph functions - //========================================================================== - - // Once a graph is built, it can behave as a (composite) filter. - // To control this filter, QueryInterface for IMediaFilter. - - // The filtergraph will by default ensure that the graph has a sync source - // when it is made to Run. SetSyncSource(NULL) will prevent that and allow - // all the filters to run unsynchronised until further notice. - // SetDefaultSyncSource will set the default sync source (the same as would - // have been set by default on the first call to Run). - HRESULT SetDefaultSyncSource(void); - -} - -typedef IFilterGraph *PFILTERGRAPH; - - - -//========================================================================== -//========================================================================== -// Defines IEnumFilters interface -// -// enumerator interface returned from IFilterGraph::EnumFilters(). -// based on IEnum pseudo-template -//========================================================================== -//========================================================================== - -[ -object, -uuid(56a86893-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IEnumFilters : IUnknown { - - HRESULT Next - ( [in] ULONG cFilters, // place this many filters... - [out] IBaseFilter ** ppFilter, // ...in this array of IBaseFilter* - [out] ULONG * pcFetched // actual count passed returned here - ); - - - HRESULT Skip - ( [in] ULONG cFilters - ); - - - HRESULT Reset(void); - - - HRESULT Clone - ( [out] IEnumFilters **ppEnum - ); -} - -typedef IEnumFilters *PENUMFILTERS; - - -//===================================================================== -//===================================================================== -// Defines IMediaFilter interface -// -// multimedia components that provide time-based data will expose this. -// this interface abstracts an object that processes time-based data streams -// and represents a multimedia device (possibly implemented in software). -// it controls the active/running state of the object and its synchronization -// to other objects in the system. -// -// derived from IPersist so that all filter-type objects in a graph -// can have their class id serialised. -//===================================================================== -//===================================================================== - -[ -object, -uuid(56a86899-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IMediaFilter : IPersist { - - // tell the filter to transition to the new state. The state transition - // may not be instantaneous (external mechanical activity may be involved, - // for example). The state functions may return before the state - // transition has completed - - // these functions will return S_OK if the transition is complete, S_FALSE if - // the transition is not complete but no error has occurred, or some error value - // if the transition failed. - HRESULT Stop(void); - HRESULT Pause(void); - - // in order to synchronise independent streams, you must pass a time - // value with the Run command. This is the difference between stream - // time and reference time. That is, it is the amount to be added to - // the IMediaSample timestamp to get the time at which that sample - // should be rendered according to the reference clock. - // If we are starting at the beginning of the stream, it will thus be - // simply the time at which the first sample should appear. If we are - // restarting from Paused mode in midstream, then it will be the total - // time we have been paused added to the initial start time. - - // the filtergraph will provide this information to its filters. If you - // are an app calling the filtergraph, it's ok to pass a start time of - // 0, in which case the filter graph will calculate a soon-as-possible - // time. FilterGraphs will accept 0 meaning ASAP; most filters will not. - - HRESULT Run(REFERENCE_TIME tStart); - - - // possible states that the filter could be in - typedef enum _FilterState { - State_Stopped, // not in use - State_Paused, // holding resources, ready to go - State_Running // actively processing media stream - } FILTER_STATE; - - // find out what state the filter is in. - // If timeout is 0, will return immediately - if a state transition is - // not complete, it will return the state being transitioned into, and - // the return code will be VFW_S_STATE_INTERMEDIATE. if no state - // transition is in progress the state will be returned and the return - // code will be S_OK. - // - // If timeout is non-zero, GetState will not return until the state - // transition is complete, or the timeout expires. - // The timeout is in milliseconds. - // You can also pass in INFINITE as a special value for the timeout, in - // which case it will block indefinitely waiting for the state transition - // to complete. If the timeout expires, the state returned is the - // state we are trying to reach, and the return code will be - // VFW_S_STATE_INTERMEDIATE. If no state transition is in progress - // the routine returns immediately with return code S_OK. - - // - // return State is State_Running, State_Paused or State_Stopped. - // return code is S_OK, or VFW_S_STATE_INTERMEDIATE if state - // transition is not complete or an error value if the method failed. - HRESULT GetState( - [in] DWORD dwMilliSecsTimeout, - [out] FILTER_STATE *State); - - - // tell the filter the reference clock to which it should synchronize - // activity. This is most important to rendering filters and may not - // be of any interest to other filters. - HRESULT SetSyncSource( - [in] IReferenceClock * pClock); - - // get the reference clock currently in use (it may be NULL) - HRESULT GetSyncSource( - [out] IReferenceClock ** pClock); -} - -typedef IMediaFilter *PMEDIAFILTER; - - -//===================================================================== -//===================================================================== -// Defines IBaseFilter interface -// -// all multimedia components will expose this interface -// this interface abstracts an object that has typed input and output -// connections and can be dynamically aggregated. -// -// IMediaFilter supports synchronisation and activity state: IBaseFilter -// is derived from that since all filters need to support IMediaFilter, -// whereas a few objects (plug-in control distributors for example) will -// support IMediaFilter but not IBaseFilter. -// -// IMediaFilter is itself derived from IPersist so that every filter -//supports GetClassID() -//===================================================================== -//===================================================================== - -[ -object, -uuid(56a86895-0ad4-11ce-b03a-0020af0ba770), -pointer_default(unique) -] -interface IBaseFilter : IMediaFilter { - - // enumerate all the pins available on this filter - // allows enumeration of all pins only. - // - HRESULT EnumPins( - [out] IEnumPins ** ppEnum // enum interface returned here - ); - - // Convert the external identifier of a pin to an IPin * - // This pin id is quite different from the pin Name in CreatePin. - // In CreatePin the Name is invented by the caller. In FindPin the Id - // must have come from a previous call to IPin::QueryId. Whether or not - // this operation would cause a pin to be created depends on the filter - // design, but if called twice with the same id it should certainly - // return the same pin both times. - HRESULT FindPin( - [in, string] LPCWSTR Id, - [out] IPin ** ppPin - ); - - // find out information about this filter - typedef struct _FilterInfo { - WCHAR achName[MAX_FILTER_NAME]; // maybe null if not part of graph - IFilterGraph * pGraph; // null if not part of graph - } FILTER_INFO; - - HRESULT QueryFilterInfo( - [out] FILTER_INFO * pInfo - ); - - // notify a filter that it has joined a filter graph. It is permitted to - // refuse. The filter should addref and store this interface for later use - // since it may need to notify events to this interface. A null pointer indicates - // that the filter is no longer part of a graph. - HRESULT JoinFilterGraph( - [in] IFilterGraph * pGraph, - [in, string] LPCWSTR pName - ); - - // return a Vendor information string. Optional - may return E_NOTIMPL. - // memory returned should be freed using CoTaskMemFree - HRESULT QueryVendorInfo( - [out, string] LPWSTR* pVendorInfo - ); -} - -typedef IBaseFilter *PFILTER; - - -//===================================================================== -//===================================================================== -// sync and state management -//===================================================================== -//===================================================================== - - -//===================================================================== -//===================================================================== -// Defines IReferenceClock interface -//===================================================================== -//===================================================================== - -[ - object, - uuid(56a86897-0ad4-11ce-b03a-0020af0ba770), - pointer_default(unique) -] -interface IReferenceClock : IUnknown { - - // get the time now - HRESULT GetTime( - [out] REFERENCE_TIME *pTime - ); - - // ask for an async notification that a time has elapsed - HRESULT AdviseTime( - [in] REFERENCE_TIME baseTime, // base reference time - [in] REFERENCE_TIME streamTime, // stream offset time - [in] HEVENT hEvent, // advise via this event - [out] DWORD_PTR * pdwAdviseCookie // where your cookie goes - ); - - // ask for an async periodic notification that a time has elapsed - HRESULT AdvisePeriodic( - [in] REFERENCE_TIME startTime, // starting at this time - [in] REFERENCE_TIME periodTime, // time between notifications - [in] HSEMAPHORE hSemaphore, // advise via a semaphore - [out] DWORD_PTR * pdwAdviseCookie // where your cookie goes - ); - - // cancel a request for notification - HRESULT Unadvise( - [in] DWORD_PTR dwAdviseCookie); -} - -typedef IReferenceClock *PREFERENCECLOCK; - -//===================================================================== -//===================================================================== -// Defines IReferenceClock2 interface -//===================================================================== -//===================================================================== - -[ - object, - uuid(36b73885-c2c8-11cf-8b46-00805f6cef60), - pointer_default(unique) -] -interface IReferenceClock2 : IReferenceClock { -} - -typedef IReferenceClock2 *PREFERENCECLOCK2; - - -//===================================================================== -//===================================================================== -// Data transport interfaces -//===================================================================== -//===================================================================== - - -//===================================================================== -//===================================================================== -// Defines IMediaSample interface -//===================================================================== -//===================================================================== - -[ - local, - object, - uuid(56a8689a-0ad4-11ce-b03a-0020af0ba770), - pointer_default(unique) -] -interface IMediaSample : IUnknown { - - // get me a read/write pointer to this buffer's memory. I will actually - // want to use sizeUsed bytes. - HRESULT GetPointer([out] BYTE ** ppBuffer); - - // return the size in bytes of the buffer data area - long GetSize(void); - - // get the stream time at which this sample should start and finish. - HRESULT GetTime( - [out] REFERENCE_TIME * pTimeStart, // put time here - [out] REFERENCE_TIME * pTimeEnd - ); - - // Set the stream time at which this sample should start and finish. - // pTimeStart==pTimeEnd==NULL will invalidate the time stamps in - // this sample - HRESULT SetTime( - [in] REFERENCE_TIME * pTimeStart, // put time here - [in] REFERENCE_TIME * pTimeEnd - ); - - // sync-point property. If true, then the beginning of this - // sample is a sync-point. (note that if AM_MEDIA_TYPE.bTemporalCompression - // is false then all samples are sync points). A filter can start - // a stream at any sync point. S_FALSE if not sync-point, S_OK if true. - - HRESULT IsSyncPoint(void); - HRESULT SetSyncPoint(BOOL bIsSyncPoint); - - // preroll property. If true, this sample is for preroll only and - // shouldn't be displayed. - HRESULT IsPreroll(void); - HRESULT SetPreroll(BOOL bIsPreroll); - - long GetActualDataLength(void); - HRESULT SetActualDataLength(long); - - // these allow for limited format changes in band - if no format change - // has been made when you receive a sample GetMediaType will return S_FALSE - - HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType); - HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType); - - // returns S_OK if there is a discontinuity in the data (this frame is - // not a continuation of the previous stream of data - // - there has been a seek or some dropped samples). - HRESULT IsDiscontinuity(void); - // set the discontinuity property - TRUE if this sample is not a - // continuation, but a new sample after a seek or a dropped sample. - HRESULT SetDiscontinuity(BOOL bDiscontinuity); - - // get the media times for this sample - HRESULT GetMediaTime( - [out] LONGLONG * pTimeStart, - [out] LONGLONG * pTimeEnd - ); - - // Set the media times for this sample - // pTimeStart==pTimeEnd==NULL will invalidate the media time stamps in - // this sample - HRESULT SetMediaTime( - [in] LONGLONG * pTimeStart, - [in] LONGLONG * pTimeEnd - ); -} - -typedef IMediaSample *PMEDIASAMPLE; - -// Values for dwFlags for AM_SAMPLE_PROPERTIES -enum tagAM_SAMPLE_PROPERTY_FLAGS - { AM_SAMPLE_SPLICEPOINT = 0x01, /* Is this a splice point - IE can it be decoded - without reference to - previous data */ - AM_SAMPLE_PREROLL = 0x02, /* Is this a preroll sample */ - AM_SAMPLE_DATADISCONTINUITY = 0x04, /* Set if start of new segment */ - AM_SAMPLE_TYPECHANGED = 0x08, /* Has the type changed */ - AM_SAMPLE_TIMEVALID = 0x10, /* Set if time is valid */ - AM_SAMPLE_TIMEDISCONTINUITY = 0x40, /* time gap in data starts after - this sample - pbBuffer can - be NULL - */ - AM_SAMPLE_FLUSH_ON_PAUSE = 0x80, /* For live data - discard - in paused state - */ - AM_SAMPLE_STOPVALID = 0x100, /* Stop time is valid */ - AM_SAMPLE_ENDOFSTREAM = 0x200, /* End of stream after - this data - This is reserved for - kernel streaming and is - not currently used by - ActiveMovie - */ - AM_STREAM_MEDIA = 0, /* Normal data stream id */ - AM_STREAM_CONTROL = 1 /* Control stream id */ - /* > 7FFFFFFF is application - defined stream - */ - }; - -// Media sample generic properties structure -typedef struct tagAM_SAMPLE2_PROPERTIES { - DWORD cbData; // Length of generic data for extensiblity - // Number of bytes INCLUDING this field - DWORD dwTypeSpecificFlags; // Type specific flag data - DWORD dwSampleFlags; // Flags bits defined by AM_SAMPLE_xxx flags - // All undefined bits RESERVED (set to 0, - // leave on copy) - LONG lActual; // Length of data in buffer - REFERENCE_TIME tStart; // Start time if valid - REFERENCE_TIME tStop; // Stop time if valid - DWORD dwStreamId; // Stream 0 is normal media transport - // Stream 1 is control - AM_MEDIA_TYPE *pMediaType; // Copy of media type - INVALID after Release() - BYTE *pbBuffer; // Pointer to buffer - INVALID after Release() - LONG cbBuffer; // Length of buffer -} AM_SAMPLE2_PROPERTIES; - -//===================================================================== -//===================================================================== -// Defines IMediaSample2 interface -//===================================================================== -//===================================================================== - -[ - local, - object, - uuid(36b73884-c2c8-11cf-8b46-00805f6cef60), - pointer_default(unique) -] -interface IMediaSample2 : IMediaSample { - - // Get sample properties - // - // cbProperties - length of generic data to retrieve - // pbProperties - pointer to generic data buffer - can - // be NULL if cbProperties is NULL - // data conforms to AM_SAMPLE_PROPERTIES - // - HRESULT GetProperties( - [in] DWORD cbProperties, - [out, size_is(cbProperties)] BYTE * pbProperties - ); - // Set sample properties - // - // cbProperties - length of generic data to set - // pbProperties - pointer to generic data buffer - can - // be NULL if cbProperties is NULL - // data conforms to AM_SAMPLE_PROPERTIES - // - // - HRESULT SetProperties( - [in] DWORD cbProperties, - [in, size_is(cbProperties)] const BYTE * pbProperties - ); - - - // // Get the clock associated with the sample - // HRESULT GetClock( - // [out] IReferenceClock2 **ppClock - // ); - - // // Get a pointer to the object containing the data - // // - // // riid - IID of interface required on object - // // ppvobject - Pointer to object containing the data - // // - // // Returns - // // S_OK - Got the object - // // E_NOINTERFACE - object does not support this interface - // // if IUnknown is not supported - // // there is no backing object - // // E_NOTIMPL - samples don't have backing objects - // // - // // - // HRESULT GetBackingObject( - // [in] REFIID riid, - // [out] void **ppvObject - // ); -} - -typedef IMediaSample2 *PMEDIASAMPLE2; - - -// flags for dwFlags in IMemAllocator::GetBuffer -// AM_GBF_PREVFRAMESKIPPED is only significant when asking for a buffer from the -// video renderer. It should be TRUE if and only if the previous frame -// was skipped. It affects quality management. -// AM_GBF_NOTASYNCPOINT indicates to the downstream filter (most likely the -// video renderer) that you are not going to fill this buffer with a sync point -// (keyframe) so now would be a bad time to return a buffer with a dynamic -// format change, because you will be unable to switch to the new format without -// waiting for the next sync point, causing some frames to be dropped. -#define AM_GBF_PREVFRAMESKIPPED 1 -#define AM_GBF_NOTASYNCPOINT 2 -cpp_quote("#define AM_GBF_PREVFRAMESKIPPED 1") -cpp_quote("#define AM_GBF_NOTASYNCPOINT 2") - -// This may not be supported by allocators -cpp_quote("#define AM_GBF_NOWAIT 4") - -// This flag is supported by the VMR's surface allocator -// When set the DDraw surface used for the media sample -// is returned is an un-locked state. Calls the GetPointer on -// the returned media sample will fail and return a NULL pointer -// -cpp_quote("#define AM_GBF_NODDSURFACELOCK 8") - -//===================================================================== -//===================================================================== -// Defines IMemAllocator interface -// -// an allocator of IMediaSample blocks to be used for data transfer between -// pins. Can be provided by input, output or a third party. Release -// the IMediaSample object obtained back to the pool by calling -// IMediaSample::Release. -//===================================================================== -//===================================================================== - -[ - object, - uuid(56a8689c-0ad4-11ce-b03a-0020af0ba770), - pointer_default(unique) -] -interface IMemAllocator : IUnknown { - - // negotiate buffer sizes, buffer count and alignment. pRequest is filled - // in by the caller with the requested values. pActual will be returned - // by the allocator with the closest that the allocator can come to this. - // Cannot be called unless the allocator is decommitted. - // Calls to GetBuffer need not succeed until Commit is called. - HRESULT SetProperties( - [in] ALLOCATOR_PROPERTIES* pRequest, - [out] ALLOCATOR_PROPERTIES* pActual); - - // return the properties actually being used on this allocator - HRESULT GetProperties( - [out] ALLOCATOR_PROPERTIES* pProps); - - - // commit the memory for the agreed buffers - HRESULT Commit(void); - - // release the memory for the agreed buffers. Any threads waiting in - // GetBuffer will return with an error. GetBuffer calls will always fail - // if called before Commit or after Decommit. - HRESULT Decommit(void); - - // get container for a sample. Blocking, synchronous call to get the - // next free buffer (as represented by an IMediaSample interface). - // on return, the time etc properties will be invalid, but the buffer - // pointer and size will be correct. - // Will only succeed if memory is committed. If GetBuffer is blocked - // waiting for a buffer and Decommit is called on another thread, - // GetBuffer will return with an error. - HRESULT GetBuffer( - [out] IMediaSample **ppBuffer, - [in] REFERENCE_TIME * pStartTime, - [in] REFERENCE_TIME * pEndTime, - [in] DWORD dwFlags - ); - - // put a buffer back on the allocators free list. - // this is typically called by the Release() method of the media - // sample when the reference count goes to 0 - // - HRESULT ReleaseBuffer( - [in] IMediaSample *pBuffer - ); -} - -typedef IMemAllocator *PMEMALLOCATOR; - -//===================================================================== -//===================================================================== -// Defines IMemAllocatorCallbackTemp interface -// -// If the allocator supports IMemAllocator2 then callbacks are -// available -// -//===================================================================== -//===================================================================== -[ - object, - uuid(379a0cf0-c1de-11d2-abf5-00a0c905f375), - pointer_default(unique) -] -interface IMemAllocatorCallbackTemp : IMemAllocator { - - // Set notification interface. pNotify can be NULL - HRESULT SetNotify( - [in] IMemAllocatorNotifyCallbackTemp *pNotify); - - // Get current stats - HRESULT GetFreeCount( - [out] LONG *plBuffersFree); -} - -//===================================================================== -//===================================================================== -// Defines IMemAllocatorNotify interface -// -//===================================================================== -//===================================================================== -[ - object, - uuid(92980b30-c1de-11d2-abf5-00a0c905f375), - pointer_default(unique) -] -interface IMemAllocatorNotifyCallbackTemp : IUnknown { - - // Called whenever ReleaseBuffer is called in the allocator - // Note the caller may have acquired locks and this call may - // occur in any context so generally the implementor of this - // call will just set an event or post a message for another - // thread to take action. - HRESULT NotifyRelease(); -} - -//===================================================================== -//===================================================================== -// Defines IMemInputPin interface -// -// basic shared memory transport interface. -//===================================================================== -//===================================================================== - -[ - object, - uuid(56a8689d-0ad4-11ce-b03a-0020af0ba770), - pointer_default(unique) -] -interface IMemInputPin : IUnknown { - - // return the allocator interface that this input pin - // would like the output pin to use - HRESULT GetAllocator( - [out] IMemAllocator ** ppAllocator); - - // tell the input pin which allocator the output pin is actually - // going to use. - // If the readonly flag is set, then all samples from this allocator are - // to be treated as read-only, and should be copied before being modified. - HRESULT NotifyAllocator( - [in] IMemAllocator * pAllocator, - [in] BOOL bReadOnly - ); - - // this method is optional (can return E_NOTIMPL). Output pins are not obliged to call - // this method, nor are they obliged to fulfil the request. Input pins making such a - // request should check the allocator in NotifyAllocator to see if it meets their needs. If - // not, the input pin is responsible for any necessary data copy. - // Zero values will be treated as don't care: so a pin can return an alignment value - // and leave the other values 0. - HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps); - - // here's the next block of data from the stream. AddRef it if - // you need to hold it beyond the end of the Receive call. - // call pSample->Release when done with it. - // - // This is a blocking synchronous call. Usually no blocking - // will occur but if a filter cannot process the sample immediately - // it may use the caller's thread to wait until it can. - HRESULT Receive( - [in] IMediaSample * pSample); - - // Same as Receive but with multiple samples. Useful for - // fragmented streams - HRESULT ReceiveMultiple( - [in, size_is(nSamples)] IMediaSample **pSamples, - [in] long nSamples, - [out] long *nSamplesProcessed); - - // See if Receive might block - // Returns S_OK if it can block, S_FALSE if it can't or some - // failure code (assume it can in this case) - HRESULT ReceiveCanBlock(); -} - -typedef IMemInputPin *PMEMINPUTPIN; - - -//===================================================================== -//===================================================================== -// Defines IAMovieSetup interface -// -// exported by filter to allow it to be self-registering -//===================================================================== -//===================================================================== - -[ -object, -uuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20), -pointer_default(unique) -] -interface IAMovieSetup : IUnknown { - - // methods to register and unregister filter, etc. - - HRESULT Register( ); - HRESULT Unregister( ); -} - -typedef IAMovieSetup *PAMOVIESETUP; - - -//===================================================================== -//===================================================================== -// Defines IMediaSeeking interface -// -// Controls seeking (time, bytes, frames, fields and samples) -//===================================================================== -//===================================================================== - -typedef enum AM_SEEKING_SeekingFlags -{ - AM_SEEKING_NoPositioning = 0x00, // No change - AM_SEEKING_AbsolutePositioning = 0x01, // Position is supplied and is absolute - AM_SEEKING_RelativePositioning = 0x02, // Position is supplied and is relative - AM_SEEKING_IncrementalPositioning = 0x03, // (Stop) position relative to current - // Useful for seeking when paused (use +1) - AM_SEEKING_PositioningBitsMask = 0x03, // Useful mask - AM_SEEKING_SeekToKeyFrame = 0x04, // Just seek to key frame (performance gain) - AM_SEEKING_ReturnTime = 0x08, // Plug the media time equivalents back into the supplied LONGLONGs - - AM_SEEKING_Segment = 0x10, // At end just do EC_ENDOFSEGMENT, - // don't do EndOfStream - AM_SEEKING_NoFlush = 0x20 // Don't flush -} AM_SEEKING_SEEKING_FLAGS; - -typedef enum AM_SEEKING_SeekingCapabilities -{ - AM_SEEKING_CanSeekAbsolute = 0x001, - AM_SEEKING_CanSeekForwards = 0x002, - AM_SEEKING_CanSeekBackwards = 0x004, - AM_SEEKING_CanGetCurrentPos = 0x008, - AM_SEEKING_CanGetStopPos = 0x010, - AM_SEEKING_CanGetDuration = 0x020, - AM_SEEKING_CanPlayBackwards = 0x040, - AM_SEEKING_CanDoSegments = 0x080, - AM_SEEKING_Source = 0x100 // Doesn't pass thru used to - // count segment ends -} AM_SEEKING_SEEKING_CAPABILITIES; - -[ - object, - uuid(36b73880-c2c8-11cf-8b46-00805f6cef60), - pointer_default(unique) -] -interface IMediaSeeking : IUnknown { - - // Returns the capability flags - HRESULT GetCapabilities( [out] DWORD * pCapabilities ); - - // And's the capabilities flag with the capabilities requested. - // Returns S_OK if all are present, S_FALSE if some are present, E_FAIL if none. - // *pCababilities is always updated with the result of the 'and'ing and can be - // checked in the case of an S_FALSE return code. - HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities ); - - // returns S_OK if mode is supported, S_FALSE otherwise - HRESULT IsFormatSupported([in] const GUID * pFormat); - HRESULT QueryPreferredFormat([out] GUID * pFormat); - - HRESULT GetTimeFormat([out] GUID *pFormat); - // Returns S_OK if *pFormat is the current time format, otherwise S_FALSE - // This may be used instead of the above and will save the copying of the GUID - HRESULT IsUsingTimeFormat([in] const GUID * pFormat); - - // (may return VFE_E_WRONG_STATE if graph is stopped) - HRESULT SetTimeFormat([in] const GUID * pFormat); - - // return current properties - HRESULT GetDuration([out] LONGLONG *pDuration); - HRESULT GetStopPosition([out] LONGLONG *pStop); - HRESULT GetCurrentPosition([out] LONGLONG *pCurrent); - - // Convert time from one format to another. - // We must be able to convert between all of the formats that we say we support. - // (However, we can use intermediate formats (e.g. MEDIA_TIME).) - // If a pointer to a format is null, it implies the currently selected format. - HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat, - [in] LONGLONG Source, [in] const GUID * pSourceFormat ); - - - // Set current and end positions in one operation - // Either pointer may be null, implying no change - HRESULT SetPositions( [in,out] LONGLONG * pCurrent, [in] DWORD dwCurrentFlags - , [in,out] LONGLONG * pStop, [in] DWORD dwStopFlags ); - - // Get CurrentPosition & StopTime - // Either pointer may be null, implying not interested - HRESULT GetPositions( [out] LONGLONG * pCurrent, - [out] LONGLONG * pStop ); - - // Get earliest / latest times to which we can currently seek "efficiently". - // This method is intended to help with graphs where the source filter has - // a very high latency. Seeking within the returned limits should just - // result in a re-pushing of already cached data. Seeking beyond these - // limits may result in extended delays while the data is fetched (e.g. - // across a slow network). - // (NULL pointer is OK, means caller isn't interested.) - HRESULT GetAvailable( [out] LONGLONG * pEarliest, [out] LONGLONG * pLatest ); - - // Rate stuff - HRESULT SetRate([in] double dRate); - HRESULT GetRate([out] double * pdRate); - - // Preroll - HRESULT GetPreroll([out] LONGLONG * pllPreroll); -} - -typedef IMediaSeeking *PMEDIASEEKING; - -// Flags for IMediaEventEx -cpp_quote("enum tagAM_MEDIAEVENT_FLAGS") -cpp_quote("{") -cpp_quote(" AM_MEDIAEVENT_NONOTIFY = 0x01") -cpp_quote("};") -- cgit v1.2.3