?? axcore.idl
字號:
// 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")
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -