?? qedit.idl
字號:
[propget, id(6), helpstring("property Invert")] HRESULT Invert([out, retval] BOOL *);
[propput, id(6), helpstring("property Invert")] HRESULT Invert([in] BOOL);
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This little COM interface will look 'around' for the closest
// path match for a given file. If the file already exists, then
// this interface should hardly do anything. If it's not found,
// it will go look for it and if successful, return S_FALSE. If it
// cannot find the file, it will call the hook, if set and return
// it's return code. if the hook is not set, it is in a type of
// error condition. The Dexter-provided MediaLocator will bring up
// a dialog box asking you to browse for your file. Other COM
// objects may do something else.
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[
object,
uuid(288581E0-66CE-11d2-918F-00C0DF10D434),
odl,
helpstring("IMediaLocator Interface"),
pointer_default(unique)
]
interface IMediaLocator : IUnknown
{
// same flags as used by IRenderEngine's SetSourceNameValidation
HRESULT FindMediaFile( BSTR Input, BSTR FilterString, BSTR * pOutput, long Flags );
HRESULT AddFoundLocation( BSTR DirectoryName );
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This object provides caching of duration and stream type
// information for files that would produce a directshow source
// filter. It takes too long to figure this out in DShow right
// now, so this is one way around it. The way it works is that
// you first fill out the Filename property, then call and
// ask how many streams it has, or, set the CurrentStream prop
// and then ask for the per-stream properties, StreamType or
// StreamLength. They both reference the CurrentStream prop that
// you set. I also allowed you (for convenience) to just give
// it a IUnknown Filter that represents an IBaseFilter source
// filter that is NOT currently in a graph. It will use that
// instead. When using this, though, you will not get cached
// values. The cached values are stored in the system's ini file
// called DCBC2A70-70D8-4459-BFFA-E0D61DEA3FDF.INI. Nice, huh? :-)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[
object,
uuid(65BD0710-24D2-4ff7-9324-ED2E5D3ABAFA),
odl,
helpstring("IMediaDet Interface"),
pointer_default(unique)
]
interface IMediaDet : IUnknown
{
[propget, id(1), helpstring("property Filter")] HRESULT Filter([out, retval] IUnknown* *pVal);
[propput, id(1), helpstring("property Filter")] HRESULT Filter([in] IUnknown* newVal);
[propget, id(2), helpstring("property OutputStreams")] HRESULT OutputStreams([out, retval] long *pVal);
[propget, id(3), helpstring("property CurrentStream")] HRESULT CurrentStream([out, retval] long *pVal);
[propput, id(3), helpstring("property CurrentStream")] HRESULT CurrentStream([in] long newVal);
[propget, id(4), helpstring("property StreamType")] HRESULT StreamType([out, retval] GUID *pVal);
[propget, id(5), helpstring("property StreamTypeB")] HRESULT StreamTypeB([out, retval] BSTR *pVal);
[propget, id(6), helpstring("property StreamLength")] HRESULT StreamLength([out, retval] double *pVal);
[propget, id(7), helpstring("property Filename")] HRESULT Filename([out, retval] BSTR *pVal);
[propput, id(7), helpstring("property Filename")] HRESULT Filename([in] BSTR newVal);
[id(8), helpstring("method GetBitmapBits")] HRESULT GetBitmapBits(double StreamTime, long * pBufferSize, char * pBuffer, long Width, long Height);
[id(9), helpstring("method WriteBitmapBits")] HRESULT WriteBitmapBits(double StreamTime, long Width, long Height, BSTR Filename );
[propget, id(10), helpstring("property StreamMediaType")] HRESULT StreamMediaType([out, retval] AM_MEDIA_TYPE * pVal);
[id(11), helpstring("method GetSampleGrabber")] HRESULT GetSampleGrabber( [out] ISampleGrabber ** ppVal );
[propget, id(12), helpstring("property FrameRate")] HRESULT FrameRate([out, retval] double *pVal);
[id(13), helpstring("method EnterBitmapGrabMode")] HRESULT EnterBitmapGrabMode( double SeekTime );
};
// useless interface, don't use it!
[
object,
uuid(AE9472BE-B0C3-11D2-8D24-00A0C9441E20),
odl,
helpstring("IGrfCache Interface"),
pointer_default(unique)
]
interface IGrfCache : IDispatch
{
[id(1), helpstring("method AddFilter")]
HRESULT AddFilter(
IGrfCache * ChainedCache,
LONGLONG ID,
const IBaseFilter * pFilter,
LPCWSTR pName);
[id(2), helpstring("method ConnectPins")]
HRESULT ConnectPins(
IGrfCache * ChainedCache,
LONGLONG PinID1,
const IPin * pPin1,
LONGLONG PinID2,
const IPin * pPin2);
[id(3), helpstring("method SetGraph")]
HRESULT SetGraph(const IGraphBuilder * pGraph);
[id(4), helpstring("method DoConnectionsNow")]
HRESULT DoConnectionsNow();
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// The RenderEngin builds a graph from the timeline and gives
// you some simple positional commands.
// explained methods:
// SetTimelineObject - tell the render engine who to parse
// ConnectEverything - build up a graph based on the timeline
// ScrapIt - throw away graph and everything
// GetFilterGraph - get the graph that's built up, if any
// SetFilterGraph - allows you to preset the graph that's built up.
// cannot call this if there already is a graph.
// !!! the following methods are unused/not implemented
// SetInterestRange - discard COM objects and memory outside of this
// range, if possible. Used for scrubbing on a long timeline and
// freeing up resources
// SetRenderRange - pretend like a portion of the timeline IS the timeline
// and don't connect anything in the graph outside of that range.
// Commit - allocate what's necessary and get prepared to run
// Decommit - free anything possible
// GetCaps - find out some info about the render engine
// DoSmartRecompression - connect compressed sources if
// possible
// in the graph, this will RenderPin( ) on every switcher
// rendering pin.
// SetSourceNameValidation - allows you to set some flags which
// determine how source files are found, if they need to be found.
// FilterString is a list of extensions to find for the media
// files (see OPENFILENAME filters)
// pOverride is a media locator you would like to use instead
// of the built in one
// The flags are defined in the struct immediately below.
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[
object,
uuid(6BEE3A81-66C9-11d2-918F-00C0DF10D434),
odl,
helpstring("IRenderEngine Interface"),
pointer_default(unique)
]
interface IRenderEngine : IUnknown
{
HRESULT SetTimelineObject( IAMTimeline * pTimeline );
HRESULT GetTimelineObject( [out] IAMTimeline ** ppTimeline );
HRESULT GetFilterGraph( [out] IGraphBuilder ** ppFG );
HRESULT SetFilterGraph( IGraphBuilder * pFG );
HRESULT SetInterestRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
HRESULT SetInterestRange2( double Start, double Stop );
HRESULT SetRenderRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
HRESULT SetRenderRange2( double Start, double Stop );
HRESULT GetGroupOutputPin( long Group, [out] IPin ** ppRenderPin );
HRESULT ScrapIt( );
HRESULT RenderOutputPins( );
HRESULT GetVendorString( [out,retval] BSTR * pVendorID );
HRESULT ConnectFrontEnd( );
HRESULT SetSourceConnectCallback( IGrfCache * pCallback );
HRESULT SetDynamicReconnectLevel( long Level );
HRESULT DoSmartRecompression( );
HRESULT UseInSmartRecompressionGraph( );
HRESULT SetSourceNameValidation( BSTR FilterString, IMediaLocator * pOverride, LONG Flags );
// not implemented yet
HRESULT Commit( );
HRESULT Decommit( );
HRESULT GetCaps( long Index, long * pReturn );
};
[
object,
uuid(6BEE3A82-66C9-11d2-918F-00C0DF10D434),
odl,
helpstring("IRenderEngine2 Interface"),
pointer_default(unique)
]
interface IRenderEngine2 : IUnknown
{
HRESULT SetResizerGUID( GUID ResizerGuid );
}
// used for the smart render engine when it needs to find a compressor
[
object,
uuid(F03FA8DE-879A-4d59-9B2C-26BB1CF83461),
odl,
helpstring("IFindCompressorCB Interface"),
pointer_default(unique)
]
interface IFindCompressorCB : IUnknown
{
HRESULT GetCompressor( AM_MEDIA_TYPE * pType, AM_MEDIA_TYPE * pCompType, [out] IBaseFilter ** ppFilter );
}
[
object,
uuid(F03FA8CE-879A-4d59-9B2C-26BB1CF83461),
odl,
helpstring("ISmartRenderEngine Interface"),
pointer_default(unique)
]
interface ISmartRenderEngine : IUnknown
{
HRESULT SetGroupCompressor( long Group, IBaseFilter * pCompressor );
HRESULT GetGroupCompressor( long Group, IBaseFilter ** pCompressor );
HRESULT SetFindCompressorCB( IFindCompressorCB * pCallback );
}
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// TIMELINE TIMELINE TIMELINE TIMELINE TIMELINE TIMELINE
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Every object on the timeline supports at least this interface.
// explained methods:
// Get/SetStartStop - the timeline times at which this object is
// active. Groups and Tracks have start times of zero.
// FixTimes - used by the render engine. Rounds the input times
// to the nearest FPS of the parent Group, for use in setting
// up the big switch.
// GetSubObject - get the sub-object which is associated with this
// timeline object. Each timeline object can carry around a
// pointer to 'something else'. For our Render Engine, this is
// a pointer to a filter that gets put into a graph.
// NOTE: Getting the subobject will FORCE it to load if it's possible
// to force this. If you don't want it to do this, don't call
// this function.
// SetSubObject - see GetSubObject
// SetSubObjectGUID - instead of giving the node a pointer, you can
// instead give it a GUID and see if this works instead. The
// sub-object will attempt to be instantiated when 'necessary'
// which is really when it's asked for with GetSubObject./
// !!! a better way to do this perhaps?
// GetSubObjectLoaded - ask if the sub-object pointer is set
// Get/SetTimelineType - return the major type which is stored here,
// used by the API user and the render engine.
// Get/SetTimelineSubType - see above
// Get/SetUserID - get and set a number, any number
// GetGenID - every created object has a unique number to it. Used
// by the render engine.
// Get/SetUserName - a storable name, for users of the API
// Get/SetPropertySetter - the object that will set properties for this
// object (it will support IPropertySetter and it is created by
// CPropertySetter)
// Get/SetUserData - gets the persistant data used by the user of
// the API.
// Get/SetMuted - set whether this object should be active or not.
// Setting a parent of other objects off also turns off the
// sub-objects.
// Get/SetLocked - set whether you can edit this object or not.
// Note: the timeline doesn't enforce this, it just stores
// a value for convenience.
// Get/SetDirtyRange -
// RemoveAll - remove this object, and if in the tree already, all it's
// sub objects, including children
// Remove - remove this object, and if in the tree already, all it's
// sub objects, but not kids
// GetTimelineNoRef - called internally by the timeline.
// GetGroupIBelongTo - called internally by the timeline.
// GetEmbedDepth - find out how many tracks we are a part of
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[
object,
local,
uuid(78530B77-61F9-11D2-8CAD-00A024580902),
odl,
helpstring("IAMTimelineObj Interface"),
pointer_default(unique)
]
interface IAMTimelineObj : IUnknown
{
[helpstring("method GetStartStop")]
HRESULT GetStartStop(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
[helpstring("method GetStartStop2")]
HRESULT GetStartStop2(REFTIME * pStart, REFTIME * pStop);
[helpstring("method FixTimes")]
HRESULT FixTimes(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
[helpstring("method FixTimes2")]
HRESULT FixTimes2(REFTIME * pStart, REFTIME * pStop);
[helpstring("method SetStartStop")]
HRESULT SetStartStop(REFERENCE_TIME Start, REFERENCE_TIME Stop);
[helpstring("method SetStartStop2")]
HRESULT SetStartStop2(REFTIME Start, REFTIME Stop);
[helpstring("method GetPropertySetter")]
HRESULT GetPropertySetter([out,retval] IPropertySetter* *pVal);
[helpstring("method SetPropertySetter")]
HRESULT SetPropertySetter(IPropertySetter* newVal);
[helpstring("method GetSubObject")]
HRESULT GetSubObject([out,retval] IUnknown* *pVal);
[helpstring("method SetSubObject")]
HRESULT SetSubObject(IUnknown* newVal);
[helpstring("method SetSubObjectGUID")]
HRESULT SetSubObjectGUID(GUID newVal);
[helpstring("method SetSubObjectGUIDByBSTR")]
HRESULT SetSubObjectGUIDB(BSTR newVal);
[helpstring("method GetSubObjectGUID")]
HRESULT GetSubObjectGUID(GUID * pVal);
[helpstring("method GetSubObjectGUIDByBSTR")]
HRESULT GetSubObjectGUIDB([out,retval] BSTR * pVal);
[helpstring("method GetSubObjectLoaded")]
HRESULT GetSubObjectLoaded(BOOL * pVal);
[helpstring("method GetTimelineType")]
HRESULT GetTimelineType(TIMELINE_MAJOR_TYPE * pVal);
[helpstring("method SetTimelineType")]
HRESULT SetTimelineType(TIMELINE_MAJOR_TYPE newVal);
[helpstring("method GetUserID")]
HRESULT GetUserID(long * pVal);
[helpstring("method SetUserID")]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -