mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
9.5 KiB
328 lines
9.5 KiB
// ImageSync.idl : IDL source for ImageSync.dll
|
|
//
|
|
|
|
// This file will be processed by the MIDL tool to
|
|
// produce the type library (ImageSync.tlb) and marshalling code.
|
|
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
// 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
|
|
//=====================================================================
|
|
//=====================================================================
|
|
|
|
|
|
cpp_quote("#ifdef DSHOW_INDEPENDENT")
|
|
// 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;
|
|
|
|
typedef unsigned long HSEMAPHORE;
|
|
typedef unsigned long HEVENT;
|
|
typedef __int64 REFERENCE_TIME;
|
|
typedef double REFTIME;
|
|
cpp_quote("#endif")
|
|
|
|
|
|
cpp_quote("#if 0")
|
|
// This is temporary hack to get around the fact thatI don't know how to persuade
|
|
// MIDL to allow forward declarations.
|
|
typedef DWORD* LPDIRECTDRAW7;
|
|
typedef DWORD* LPDIRECTDRAWSURFACE7;
|
|
cpp_quote ("#endif")
|
|
|
|
cpp_quote("#include <ddraw.h>")
|
|
|
|
|
|
import "oaidl.idl";
|
|
import "ocidl.idl";
|
|
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// DDraw information
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
cpp_quote("//")
|
|
cpp_quote("// The following declarations within the 'if 0' block are dummy")
|
|
cpp_quote("// typedef's used to make the ImageSync.idl build under midl.")
|
|
cpp_quote("// The actual definitions are contained in ddraw.h.")
|
|
cpp_quote("//")
|
|
|
|
cpp_quote("#if 0")
|
|
typedef IUnknown* IReferenceClock;
|
|
cpp_quote("#endif")
|
|
|
|
cpp_quote("#include <ddraw.h>")
|
|
|
|
|
|
cpp_quote("#ifdef DSHOW_INDEPENDENT")
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// QualityControl information
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
typedef enum tagQualityMessageType {
|
|
Famine,
|
|
Flood
|
|
} QualityMessageType;
|
|
|
|
typedef struct tagQuality {
|
|
QualityMessageType Type;
|
|
|
|
// milli-units. 1000 = no change
|
|
// for Flood:
|
|
// What proportion of the media samples currently
|
|
// coming through are required in the future.
|
|
// 800 means please drop another 20%
|
|
// For Famine:
|
|
// How much to "keep in" e.g. 800 means send me
|
|
// 20% less e.g. by dropping 20% of the samples.
|
|
// 1100 would mean "I'm coping, send me more".
|
|
long Proportion;
|
|
|
|
// How much you need to catch up by
|
|
REFERENCE_TIME Late;
|
|
|
|
// The stream time when this was generated (probably
|
|
// corresponds to the start time on some sample).
|
|
REFERENCE_TIME TimeStamp;
|
|
} Quality;
|
|
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// IQualProp
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
object,
|
|
uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3),
|
|
|
|
helpstring("IQualProp Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IQualProp : IUnknown
|
|
{
|
|
HRESULT get_FramesDroppedInRenderer(
|
|
[out] int *cFramesDropped
|
|
);
|
|
|
|
HRESULT get_FramesDrawn(
|
|
[out] int *pcFramesDrawn
|
|
);
|
|
|
|
HRESULT get_AvgFrameRate(
|
|
[out] int *piAvgFrameRate
|
|
);
|
|
|
|
HRESULT get_Jitter(
|
|
[out] int *piJitter
|
|
);
|
|
|
|
HRESULT get_AvgSyncOffset(
|
|
[out] int *piAvg
|
|
);
|
|
|
|
HRESULT get_DevSyncOffset(
|
|
[out] int *piDev
|
|
);
|
|
};
|
|
cpp_quote("#endif")
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// IVMRImagePresenter
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
object,
|
|
uuid(CE704FE7-E71E-41fb-BAA2-C4403E1182F5),
|
|
|
|
helpstring("IVMRImagePresenter Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IVMRImagePresenter : IUnknown
|
|
{
|
|
HRESULT StartPresenting();
|
|
|
|
HRESULT StopPresenting();
|
|
|
|
HRESULT PresentImage(
|
|
[in] LPDIRECTDRAWSURFACE7 lpSurf,
|
|
[in] DWORD dwFlags
|
|
);
|
|
};
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// IImageSyncStepComplete
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
object,
|
|
uuid(1DBCA562-5C92-474a-A276-382079164970),
|
|
|
|
helpstring("IImageSyncStepComplete Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IImageSyncStepComplete : IUnknown
|
|
{
|
|
HRESULT StepComplete(
|
|
[in] BOOL fCancelled
|
|
);
|
|
};
|
|
|
|
|
|
typedef enum {
|
|
ImageSync_State_Stopped,
|
|
ImageSync_State_Cued,
|
|
ImageSync_State_Playing
|
|
} ImageSequenceState;
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// IImageSyncControl
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
object,
|
|
uuid(A67F6A0D-883B-44ce-AA93-87BA3017E19C),
|
|
|
|
helpstring("IImageSyncControl Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IImageSyncControl : IUnknown
|
|
{
|
|
// ============================================================
|
|
// Synchronisation control
|
|
// ============================================================
|
|
|
|
HRESULT SetImagePresenter(
|
|
[in] IVMRImagePresenter* lpImagePresenter
|
|
);
|
|
|
|
HRESULT SetReferenceClock(
|
|
[in] IReferenceClock* lpRefClock
|
|
);
|
|
|
|
|
|
// ============================================================
|
|
// Image sequence control
|
|
// ============================================================
|
|
|
|
HRESULT CueImageSequence(
|
|
);
|
|
|
|
HRESULT BeginImageSequence(
|
|
[in] REFERENCE_TIME* baseTime
|
|
);
|
|
|
|
HRESULT EndImageSequence(
|
|
);
|
|
|
|
HRESULT GetImageSequenceState(
|
|
[in] DWORD dwMSecsTimeOut,
|
|
[out] DWORD* lpdwState
|
|
);
|
|
|
|
|
|
// ============================================================
|
|
// Frame stepping
|
|
// ============================================================
|
|
|
|
HRESULT FrameStep(
|
|
[in] IImageSyncStepComplete* lpStepComplete,
|
|
[in] DWORD nFramesToStep,
|
|
[in] DWORD dwStepFlags
|
|
);
|
|
|
|
HRESULT CancelFrameStep(
|
|
);
|
|
};
|
|
|
|
typedef enum {
|
|
ImageSync_Sample_SyncPoint = 0x00000001,
|
|
ImageSync_Sample_Preroll = 0x00000002,
|
|
ImageSync_Sample_Discontinuity = 0x00000004,
|
|
ImageSync_Sample_TimeValid = 0x00000008,
|
|
ImageSync_Sample_DontPresent = 0x00000010
|
|
} SampleFlags;
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// IImageSync
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
object,
|
|
uuid(56a86897-0ad4-11ce-b03a-0020af0ba770),
|
|
|
|
helpstring("IImageSync Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IImageSync : IUnknown
|
|
{
|
|
// return the buffer to the renderer along with time stamps relating to
|
|
// when the buffer should be presented.
|
|
HRESULT Receive(
|
|
[in] REFERENCE_TIME startTime, // sample start time
|
|
[in] REFERENCE_TIME endTime, // sample end time
|
|
[in] DWORD_PTR lpSurf, // sample
|
|
[in] DWORD dwSampleFlags // flags relating to the sample
|
|
);
|
|
|
|
// ask for quality control information from the renderer
|
|
HRESULT GetQualityControlMessage(
|
|
[out] Quality* pQualityMsg // where your cookie goes
|
|
);
|
|
};
|
|
|
|
|
|
//=====================================================================
|
|
//=====================================================================
|
|
//
|
|
// ImageSynchronization Class
|
|
//
|
|
//=====================================================================
|
|
//=====================================================================
|
|
[
|
|
uuid(A4A309B1-F733-4646-A127-C95F98CB144B),
|
|
version(1.0),
|
|
helpstring("ImageSynchronization 1.0 Type Library")
|
|
]
|
|
library IMAGESYNCHRONIZATIONlib
|
|
{
|
|
importlib("stdole2.tlb");
|
|
|
|
[
|
|
uuid(7D8AA343-6E63-4663-BE90-6B80F66540A3),
|
|
helpstring("ImageSynchronization Class")
|
|
]
|
|
coclass ImageSynchronization
|
|
{
|
|
[default] interface IImageSyncControl;
|
|
};
|
|
};
|