home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 December / Chip_2001-12_cd1.bin / zkuste / delphi / kompon / d56 / CMDXCAP.ZIP / DirectShow.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-04-21  |  742.2 KB  |  18,209 lines

  1. (* ========================================================================== *
  2.  *  ###### ####   ###                                                         *
  3.  *  ##  ###  ### ##       ,######  ##   ##   ######  ###        ###           *
  4.  *  ##   ###  ####        ##       ##   ##  ##    ##  ##   #    ##            *
  5.  *  ##    ##   ###        ######   #######  ##    ##  \## ### ##/             *
  6.  *  ##    ##  #####         #####  #######  ##    ##   #########              *
  7.  *  ##   ##  ##  ###          ,##  ##   ##  ##    ##    ### ###               *
  8.  *  ###### ###    ####   #######   ##   ##   ######     ##   ##               *
  9.  *                                                                            *
  10.  *  Copyright (C) 1995-2000 Microsoft Corporation.  All Rights Reserved.      *
  11.  *                                                                            *
  12.  *  DirectMedia farther adaptation by ????                                    *
  13.  *  DirectX 8.0 Delphi adaptation by Ivo Steinmann                            *
  14.  *  Updated by Henri GOURVEST                                                 *
  15.  *                   EMAIL: hgourvest@progdigy.com                            *
  16.  *                   HOME : http://www.progdigy.com                           *
  17.  *  Modified: 27-Feb-2001                                                     *
  18.  *                                                                            *
  19.  *  Download: http://www.delphi-jedi.org/DelphiGraphics/                      *
  20.  * ****************************************************************************
  21.  * Files                                                                      *
  22.  * =====                                                                      *
  23.  *  comlite.h, errors.h, dv.h, strmif.h, mmstream.h, amstream.h, ddstream.h,  *
  24.  *  austream.h, mpconfig.h, control.h, qnetwork.h, playlist.h, il21dec.h,     *
  25.  *  amvideo.h, amaudio.h, vptype.h, vpconfig.h, vpnotify.h, mpegtype.h,       *
  26.  *  dvdevcod.h, dvdmedia.h, bdatypes.h, activecf.h, vfwmsgs.h,(edevdefs.h,    *
  27.  *  XPrtDefs.h), aviriff.h, evcode.h, uuids.h, ksuuids.h, DXVA.h,AMVA.h,      *
  28.  *  videoacc.h, regbag.h, tuner.h, DXTrans.h, QEdit.h, mpeguids.h, dshowasf.h,*
  29.  *  amparse.h, audevcod.h, atsmedia.h, MediaErr, MedParam.h, mediaobj.h,      *
  30.  *  dmodshow.h, dmoreg.h, DMORt.h, dmoimpl.h, ks.h, ksproxy.h, ksmedia.h,     *
  31.  *  dmksctrl.h, bdamedia.h.                                                   *
  32.  ******************************************************************************
  33.  * HISTORY                                                                    *
  34.  * =======                                                                    *
  35.  *  24-feb-2001: - TPhysicalConnectorType corrected.                          *
  36.  *               - IMediaEvent, IMediaControl and IAMovie have been corrected *
  37.  *                 for use of "mstimeout := INFINITE" in some functions.      *
  38.  *  27-feb-2001: - IAMCrossbar.get_CrossbarPinInfo modified to use            *
  39.  *                 TPhysicalConnectorType.                                    *
  40.  *               - IAMStreamConfig, IMediaSample2 and IDvdInfo2 corrected.    *
  41.  *               - IDVEnc now use ByteBool instead of byte                    *
  42.  *  20-Mar-2001: - EC_WMT_EVENT_BASE, EC_WMT_INDEX_EVENT added                *
  43.  *               - IDvdInfo2.GetDVDTextStringAsUnicode corrected              *
  44.  *               - IEnumMediaTypes.Next correctted                                       *
  45.  *                                                                            *
  46.  ******************************************************************************
  47.  * TODO                                                                       *
  48.  * ====                                                                       *
  49.  *  - tune.h, TMediaObjectImpl(DMOImpl.h).                                    *
  50.  ******************************************************************************
  51.  * THANK TO                                                                   *
  52.  * ========                                                                   *
  53.  *  - Peter NEUMANN for debugging.                                            *
  54.  *============================================================================*)
  55.  
  56. unit DirectShow;
  57.  
  58. interface
  59.  
  60. {$ALIGN ON}
  61. {$MINENUMSIZE 4}
  62. //{$WEAKPACKAGEUNIT}
  63.  
  64. uses
  65.   Windows,
  66.   ActiveX,
  67.   DirectDraw,
  68.   DirectSound,
  69.   MMSystem;
  70.  
  71. (*==========================================================================;
  72.  *
  73.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  74.  *
  75.  *  File:       comlite.h
  76.  *
  77.  ***************************************************************************)
  78.  
  79. function  QzInitialize(pvReserved: Pointer): HResult; stdcall;
  80. procedure QzUninitialize; stdcall;
  81. procedure QzFreeUnusedLibraries; stdcall;
  82.  
  83. function  QzGetMalloc(dwMemContext: Longint; out malloc: IMalloc): HResult; stdcall;
  84. function  QzTaskMemAlloc(cb: Longint): Pointer; stdcall;
  85. function  QzTaskMemRealloc(pv: Pointer; cb: Longint): Pointer; stdcall;
  86. procedure QzTaskMemFree(pv: Pointer); stdcall;
  87. function  QzCreateFilterObject(const clsid: TCLSID; unkOuter: IUnknown;
  88.   dwClsContext: Longint; const iid: TIID; out pv): HResult; stdcall;
  89. function  QzCLSIDFromString(psz: POleStr; out clsid: TCLSID): HResult; stdcall;
  90. function  QzStringFromGUID2(const guid: TGUID; psz: POleStr; cbMax: Integer): Integer; stdcall;
  91.  
  92. (*==========================================================================;
  93.  *
  94.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  95.  *
  96.  *  File:       errors.h
  97.  *
  98.  ***************************************************************************)
  99.  
  100. const
  101.   VFW_FIRST_CODE     = $200;
  102.   MAX_ERROR_TEXT_LEN = 160;
  103.  
  104. type
  105.   AMGetErrorTextProcA = function(hr: HRESULT; pbuffer: PChar; MaxLen: DWORD): BOOL; stdcall;
  106.   AMGetErrorTextProcW = function(hr: HRESULT; pbuffer: PWideChar; MaxLen: DWORD): BOOL; stdcall;
  107.  
  108.   {$IFDEF UNICODE}
  109.   AMGetErrorTextProc  = AMGetErrorTextProcW;
  110.   {$ELSE}
  111.   AMGetErrorTextProc  = AMGetErrorTextProcA;
  112.   {$ENDIF}
  113.  
  114. function AMGetErrorTextA(hr: HRESULT; pbuffer: PChar; MaxLen: DWORD): DWORD; stdcall;
  115. function AMGetErrorTextW(hr: HRESULT; pbuffer: PWideChar; MaxLen: DWORD): DWORD; stdcall;
  116. function AMGetErrorText(hr: HRESULT; pbuffer: PChar; MaxLen: DWORD): DWORD; stdcall;
  117.  
  118.  
  119. (*==========================================================================;
  120.  *
  121.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  122.  *
  123.  *  File:       dv.h
  124.  *
  125.  ***************************************************************************)
  126.  
  127. const
  128.   DV_DVSD_NTSC_FRAMESIZE  =      120000;
  129.   DV_DVSD_PAL_FRAMESIZE      =      144000;
  130.  
  131.   DV_SMCHN       = $0000e000;
  132.   DV_AUDIOMODE   = $00000f00;
  133.   DV_AUDIOSMP    = $38000000;
  134.  
  135.   DV_AUDIOQU     = $07000000;
  136.   DV_NTSCPAL     = $00200000;
  137.   DV_STYPE     = $001f0000;
  138.  
  139. //There are NTSC or PAL DV camcorders  
  140.   DV_NTSC     = 0;
  141.   DV_PAL     = 1;
  142. //DV camcorder can output sd/hd/sl
  143.   DV_SD          = $00;
  144.   DV_HD          = $01;
  145.   DV_SL          = $02;
  146. //user can choice 12 bits or 16 bits audio from DV camcorder
  147.   DV_CAP_AUD16Bits  =  $00;
  148.   DV_CAP_AUD12Bits  =  $01;
  149.  
  150.   SIZE_DVINFO    = $20;
  151.  
  152. type
  153.   TDVAudInfo = record
  154.     bAudStyle: array[0..1] of Byte;
  155.     //LSB 6 bits for starting DIF sequence number
  156.     //MSB 2 bits: 0 for mon. 1: stereo in one 5/6 DIF sequences, 2: stereo audio in both 5/6 DIF sequences
  157.     //example: 0x00: mon, audio in first 5/6 DIF sequence
  158.     //                 0x05: mon, audio in 2nd 5 DIF sequence
  159.     //                 0x15: stereo, audio only in 2nd 5 DIF sequence
  160.     //                 0x10: stereo, audio only in 1st 5/6 DIF sequence
  161.     //                 0x20: stereo, left ch in 1st 5/6 DIF sequence, right ch in 2nd 5/6 DIF sequence
  162.     //                 0x26: stereo, rightch in 1st 6 DIF sequence, left ch in 2nd 6 DIF sequence
  163.     bAudQu: array[0..1] of Byte;            //qbits, only support 12, 16,
  164.  
  165.     bNumAudPin: Byte;                              //how many pin(language)
  166.     wAvgSamplesPerPinPerFrm: array[0..1] of WORD;  //samples size for one audio pin in one frame(which has 10 or 12 DIF sequence)
  167.     wBlkMode: WORD;                                //45 for NTSC, 54 for PAL
  168.     wDIFMode: WORD;                                //5  for NTSC, 6 for PAL
  169.     wBlkDiv: WORD;                                 //15  for NTSC, 18 for PAL
  170.   end;
  171.  
  172.  
  173. (*==========================================================================;
  174.  *
  175.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  176.  *
  177.  *  File:       strmif.h
  178.  *
  179.  ***************************************************************************)
  180. const
  181.   IID_IPin                            : TGUID = '{56A86891-0AD4-11CE-B03A-0020AF0BA770}';
  182.   IID_IEnumPins                       : TGUID = '{56A86892-0AD4-11CE-B03A-0020AF0BA770}';
  183.   IID_IEnumMediaTypes                 : TGUID = '{89C31040-846B-11CE-97D3-00AA0055595A}';
  184.   IID_IFilterGraph                    : TGUID = '{56A8689F-0AD4-11CE-B03A-0020AF0BA770}';
  185.   IID_IEnumFilters                    : TGUID = '{56A86893-0AD4-11CE-B03A-0020AF0BA770}';
  186.   IID_IMediaFilter                    : TGUID = '{56A86899-0AD4-11CE-B03A-0020AF0BA770}';
  187.   IID_IBaseFilter                     : TGUID = '{56A86895-0AD4-11CE-B03A-0020AF0BA770}';
  188.   IID_IReferenceClock                 : TGUID = '{56A86897-0AD4-11CE-B03A-0020AF0BA770}';
  189.   IID_IReferenceClock2                : TGUID = '{36B73885-C2C8-11CF-8B46-00805F6CEF60}';
  190.   IID_IMediaSample                    : TGUID = '{56A8689A-0AD4-11CE-B03A-0020AF0BA770}';
  191.   IID_IMediaSample2                   : TGUID = '{36B73884-C2C8-11CF-8B46-00805F6CEF60}';
  192.   IID_IMemAllocator                   : TGUID = '{56A8689C-0AD4-11CE-B03A-0020AF0BA770}';
  193.   IID_IMemInputPin                    : TGUID = '{56A8689D-0AD4-11CE-B03A-0020AF0BA770}';
  194.   IID_IAMovieSetup                    : TGUID = '{A3D8CEC0-7E5A-11CF-BBC5-00805F6CEF20}';
  195.   IID_IMediaSeeking                   : TGUID = '{36B73880-C2C8-11CF-8B46-00805F6CEF60}';
  196.   IID_IEnumRegFilters                 : TGUID = '{56A868A4-0AD4-11CE-B03A-0020AF0BA770}';
  197.   IID_IFilterMapper                   : TGUID = '{56A868A3-0AD4-11CE-B03A-0020AF0BA770}';
  198.   IID_IFilterMapper2                  : TGUID = '{B79BB0B0-33C1-11D1-ABE1-00A0C905F375}';
  199.   IID_IQualityControl                 : TGUID = '{56A868A5-0AD4-11CE-B03A-0020AF0BA770}';
  200.   IID_IOverlayNotify                  : TGUID = '{56A868A0-0AD4-11CE-B03A-0020AF0BA770}';
  201.   IID_IOverlay                        : TGUID = '{56A868A1-0AD4-11CE-B03A-0020AF0BA770}';
  202.   IID_IMediaEventSink                 : TGUID = '{56A868A2-0AD4-11CE-B03A-0020AF0BA770}';
  203.   IID_IFileSourceFilter               : TGUID = '{56A868A6-0AD4-11CE-B03A-0020AF0BA770}';
  204.   IID_IFileSinkFilter                 : TGUID = '{A2104830-7C70-11CF-8BCE-00AA00A3F1A6}';
  205.   IID_IFileSinkFilter2                : TGUID = '{00855B90-CE1B-11D0-BD4F-00A0C911CE86}';
  206.   IID_IFileAsyncIO                    : TGUID = '{56A868A7-0AD4-11CE-B03A-0020AF0BA770}';
  207.   IID_IGraphBuilder                   : TGUID = '{56A868A9-0AD4-11CE-B03A-0020AF0BA770}';
  208.   IID_ICaptureGraphBuilder            : TGUID = '{BF87B6E0-8C27-11D0-B3F0-00AA003761C5}';
  209.   IID_IAMCopyCaptureFileProgress      : TGUID = '{670D1D20-A068-11D0-B3F0-00AA003761C5}';
  210.   IID_IFilterGraph2                   : TGUID = '{36B73882-C2C8-11CF-8B46-00805F6CEF60}';
  211.   IID_IStreamBuilder                  : TGUID = '{56A868BF-0AD4-11CE-B03A-0020AF0BA770}';
  212.   IID_IAsyncReader                    : TGUID = '{56A868AA-0AD4-11CE-B03A-0020AF0BA770}';
  213.   IID_IGraphVersion                   : TGUID = '{56A868AB-0AD4-11CE-B03A-0020AF0BA770}';
  214.   IID_IResourceConsumer               : TGUID = '{56A868AD-0AD4-11CE-B03A-0020AF0BA770}';
  215.   IID_IResourceManager                : TGUID = '{56A868AC-0AD4-11CE-B03A-0020AF0BA770}';
  216.   IID_IDistributorNotify              : TGUID = '{56A868AF-0AD4-11CE-B03A-0020AF0BA770}';
  217.   IID_IAMStreamControl                : TGUID = '{36b73881-c2c8-11cf-8b46-00805f6cef60}';
  218.   IID_ISeekingPassThru                : TGUID = '{36B73883-C2C8-11CF-8B46-00805F6CEF60}';
  219.   IID_IAMStreamConfig                 : TGUID = '{C6E13340-30AC-11d0-A18C-00A0C9118956}';
  220.   IID_IConfigInterleaving             : TGUID = '{BEE3D220-157B-11d0-BD23-00A0C911CE86}';
  221.   IID_IConfigAviMux                   : TGUID = '{5ACD6AA0-F482-11ce-8B67-00AA00A3F1A6}';
  222.   IID_IAMVideoCompression             : TGUID = '{C6E13343-30AC-11d0-A18C-00A0C9118956}';
  223.   IID_IAMVfwCaptureDialogs            : TGUID = '{D8D715A0-6E5E-11D0-B3F0-00AA003761C5}';
  224.   IID_IAMVfwCompressDialogs           : TGUID = '{D8D715A3-6E5E-11D0-B3F0-00AA003761C5}';
  225.   IID_IAMDroppedFrames                : TGUID = '{C6E13344-30AC-11d0-A18C-00A0C9118956}';
  226.   IID_IAMAudioInputMixer              : TGUID = '{54C39221-8380-11d0-B3F0-00AA003761C5}';
  227.   IID_IAMAnalogVideoDecoder           : TGUID = '{C6E13350-30AC-11d0-A18C-00A0C9118956}';
  228.   IID_IAMVideoProcAmp                 : TGUID = '{C6E13360-30AC-11d0-A18C-00A0C9118956}';
  229.   IID_IAMCameraControl                : TGUID = '{C6E13370-30AC-11d0-A18C-00A0C9118956}';
  230.   IID_IAMCrossbar                     : TGUID = '{C6E13380-30AC-11d0-A18C-00A0C9118956}';
  231.   IID_IAMTuner                        : TGUID = '{211A8761-03AC-11d1-8D13-00AA00BD8339}';
  232.   IID_IAMTunerNotification            : TGUID = '{211A8760-03AC-11d1-8D13-00AA00BD8339}';
  233.   IID_IAMTVTuner                      : TGUID = '{211A8766-03AC-11d1-8D13-00AA00BD8339}';
  234.   IID_IBPCSatelliteTuner              : TGUID = '{211A8765-03AC-11d1-8D13-00AA00BD8339}';
  235.   IID_IAMTVAudio                      : TGUID = '{83EC1C30-23D1-11d1-99E6-00A0C9560266}';
  236.   IID_IAMTVAudioNotification          : TGUID = '{83EC1C33-23D1-11D1-99E6-00A0C9560266}';
  237.   IID_IAMAnalogVideoEncoder           : TGUID = '{C6E133B0-30AC-11d0-A18C-00A0C9118956}';
  238.   IID_IMediaPropertyBag               : TGUID = '{6025A880-C0D5-11D0-BD4E-00A0C911CE86}';
  239.   IID_IPersistMediaPropertyBag        : TGUID = '{5738E040-B67F-11d0-BD4D-00A0C911CE86}';
  240.   IID_IAMPhysicalPinInfo              : TGUID = '{F938C991-3029-11CF-8C44-00AA006B6814}';
  241.   IID_IAMExtDevice                    : TGUID = '{B5730A90-1A2C-11CF-8C23-00AA006B6814}';
  242.   IID_IAMExtTransport                 : TGUID = '{A03CD5F0-3045-11CF-8C44-00AA006B6814}';
  243.   IID_IAMTimecodeReader               : TGUID = '{9B496CE1-811B-11CF-8C77-00AA006B6814}';
  244.   IID_IAMTimecodeGenerator            : TGUID = '{9B496CE0-811B-11CF-8C77-00AA006B6814}';
  245.   IID_IAMTimecodeDisplay              : TGUID = '{9B496CE2-811B-11CF-8C77-00AA006B6814}';
  246.   IID_IAMDevMemoryAllocator           : TGUID = '{C6545BF0-E76B-11D0-BD52-00A0C911CE86}';
  247.   IID_IAMDevMemoryControl             : TGUID = '{C6545BF1-E76B-11D0-BD52-00A0C911CE86}';
  248.   IID_IAMStreamSelect                 : TGUID = '{C1960960-17F5-11D1-ABE1-00A0C905F375}';
  249.   IID_IAMovie                         : TGUID = '{359ACE10-7688-11CF-8B23-00805F6CEF60}';
  250.   IID_ICreateDevEnum                  : TGUID = '{29840822-5B84-11D0-BD3B-00A0C911CE86}';
  251.   IID_IDvdControl                     : TGUID = '{A70EFE61-E2A3-11D0-A9BE-00AA0061BE93}';
  252.   IID_IDvdControl2                    : TGUID = '{33BC7430-EEC0-11D2-8201-00A0C9D74842}';
  253.   IID_IDvdInfo                        : TGUID = '{A70EFE60-E2A3-11D0-A9BE-00AA0061BE93}';
  254.   IID_IDvdInfo2                       : TGUID = '{34151510-EEC0-11D2-8201-00A0C9D74842}';
  255.   IID_IDvdGraphBuilder                : TGUID = '{FCC152B6-F372-11d0-8E00-00C04FD7C08B}';
  256.   IID_IDvdState                       : TGUID = '{86303d6d-1c4a-4087-ab42-f711167048ef}';
  257.   IID_IDvdCmd                         : TGUID = '{5a4a97e4-94ee-4a55-9751-74b5643aa27d}';
  258.   IID_IVideoFrameStep                 : TGUID = '{e46a9787-2b71-444d-a4b5-1fab7b708d6a}';
  259.   IID_IFilterMapper3                  : TGUID = '{b79bb0b1-33c1-11d1-abe1-00a0c905f375}';
  260.   IID_IOverlayNotify2                 : TGUID = '{680EFA10-D535-11D1-87C8-00A0C9223196}';
  261.   IID_ICaptureGraphBuilder2           : TGUID = '{93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D}';
  262.   IID_IMemAllocatorCallbackTemp       : TGUID = '{379a0cf0-c1de-11d2-abf5-00a0c905f375}';
  263.   IID_IMemAllocatorNotifyCallbackTemp : TGUID = '{92980b30-c1de-11d2-abf5-00a0c905f375}';
  264.   IID_IAMVideoControl                 : TGUID = '{6a2e0670-28e4-11d0-a18c-00a0c9118956}';
  265.   IID_IKsPropertySet                  : TGUID = '{31EFAC30-515C-11d0-A9AA-00AA0061BE93}';
  266.   IID_IAMResourceControl              : TGUID = '{8389d2d0-77d7-11d1-abe6-00a0c905f375}';
  267.   IID_IAMClockAdjust                  : TGUID = '{4d5466b0-a49c-11d1-abe8-00a0c905f375}';
  268.   IID_IAMFilterMiscFlags              : TGUID = '{2dd74950-a890-11d1-abe8-00a0c905f375}';
  269.   IID_IDrawVideoImage                 : TGUID = '{48efb120-ab49-11d2-aed2-00a0c995e8d5}';
  270.   IID_IDecimateVideoImage             : TGUID = '{2e5ea3e0-e924-11d2-b6da-00a0c995e8df}';
  271.   IID_IAMVideoDecimationProperties    : TGUID = '{60d32930-13da-11d3-9ec6-c4fcaef5c7be}';
  272.   IID_IAMLatency                      : TGUID = '{62EA93BA-EC62-11d2-B770-00C04FB6BD3D}';
  273.   IID_IAMPushSource                   : TGUID = '{F185FE76-E64E-11d2-B76E-00C04FB6BD3D}';
  274.   IID_IAMDeviceRemoval                : TGUID = '{f90a6130-b658-11d2-ae49-0000f8754b99}';
  275.   IID_IDVEnc                          : TGUID = '{d18e17a0-aacb-11d0-afb0-00aa00b67a42}';
  276.   IID_IIPDVDec                        : TGUID = '{b8e8bd60-0bfe-11d0-af91-00aa00b67a42}';
  277.   IID_IDVSplitter                     : TGUID = '{92a3a302-da7c-4a1f-ba7e-1802bb5d2d02}';
  278.   IID_IAMAudioRendererStats           : TGUID = '{22320CB2-D41A-11d2-BF7C-D7CB9DF0BF93}';
  279.   IID_IAMGraphStreams                 : TGUID = '{632105FA-072E-11d3-8AF9-00C04FB6BD3D}';
  280.   IID_IAMOverlayFX                    : TGUID = '{62fae250-7e65-4460-bfc9-6398b322073c}';
  281.   IID_IAMOpenProgress                 : TGUID = '{8E1C39A1-DE53-11cf-AA63-0080C744528D}';
  282.   IID_IMpeg2Demultiplexer             : TGUID = '{436eee9c-264f-4242-90e1-4e330c107512}';
  283.   IID_IEnumStreamIdMap                : TGUID = '{945C1566-6202-46fc-96C7-D87F289C6534}';
  284.   IID_IMPEG2StreamIdMap               : TGUID = '{D0E04C47-25B8-4369-925A-362A01D95444}';
  285.   IID_IDDrawExclModeVideo             : TGUID = '{153ACC21-D83B-11d1-82BF-00A0C9696C8F}';
  286.   IID_IDDrawExclModeVideoCallback     : TGUID = '{913c24a0-20ab-11d2-9038-00a0c9697298}';
  287.   IID_IPinConnection                  : TGUID = '{4a9a62d3-27d4-403d-91e9-89f540e55534}';
  288.   IID_IPinFlowControl                 : TGUID = '{c56e9858-dbf3-4f6b-8119-384af2060deb}';
  289.   IID_IGraphConfig                    : TGUID = '{03A1EB8E-32BF-4245-8502-114D08A9CB88}';
  290.   IID_IGraphConfigCallback            : TGUID = '{ade0fd60-d19d-11d2-abf6-00a0c905f375}';
  291.   IID_IFilterChain                    : TGUID = '{DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29}';
  292.  
  293. const
  294.   CHARS_IN_GUID   = 39;
  295.  
  296.   MAX_PIN_NAME    = 128;
  297.   MAX_FILTER_NAME = 128;
  298.  
  299. type
  300.   TAM_Media_Type = record
  301.     majortype: TGUID;
  302.     subtype: TGUID;
  303.     bFixedSizeSamples: BOOL;
  304.     bTemporalCompression: BOOL;
  305.     lSampleSize: ULONG;
  306.     formattype: TGUID;
  307.     pUnk: IUnknown;
  308.     cbFormat: ULONG;
  309.     pbFormat: Pointer;
  310.   end;
  311.   PAM_Media_Type = ^TAM_Media_Type;
  312.  
  313.   TPin_Direction = (
  314.     PINDIR_INPUT,
  315.     PINDIR_OUTPUT
  316.   );
  317.  
  318.   TReference_Time = int64;
  319.   PReference_Time = ^TReference_Time;
  320.  
  321.   TRefTime = double;
  322.  
  323.   HSEMAPHORE = Longint;
  324.  
  325.   TAllocator_Properties = record
  326.     cBuffers: Longint;
  327.     cbBuffer: Longint;
  328.     cbAlign: Longint;
  329.     cbPrefix: Longint;
  330.   end;
  331.  
  332.   IBaseFilter = interface;
  333.  
  334.   TPin_Info = record
  335.     pFilter: IBaseFilter;
  336.     dir: TPin_Direction;
  337.     achName: array[0..127] of WCHAR;
  338.   end;
  339.  
  340.   IEnumMediaTypes = interface;
  341.  
  342.   IPin = interface(IUnknown)
  343.     ['{56A86891-0AD4-11CE-B03A-0020AF0BA770}']
  344.     function Connect(pReceivePin: IPin; pmt: PAM_Media_Type): HRESULT; stdcall;
  345.     function ReceiveConnection(pConnector: IPin; const pmt: TAM_Media_Type): HRESULT; stdcall;
  346.     function Disconnect: HRESULT; stdcall;
  347.     function ConnectedTo(out pPin: IPin): HRESULT; stdcall;
  348.     function ConnectionMediaType(var pmt: TAM_Media_Type): HRESULT; stdcall;
  349.     function QueryPinInfo(out pInfo: TPin_Info): HRESULT; stdcall;
  350.     function QueryDirection(out pPinDir: TPin_Direction): HRESULT; stdcall;
  351.     function QueryId(out Id: LPWSTR): HRESULT; stdcall;
  352.     function QueryAccept(const pmt: TAM_Media_Type): HRESULT; stdcall;
  353.     function EnumMediaTypes(out ppEnum: IEnumMediaTypes): HRESULT; stdcall;
  354.     function QueryInternalConnections(out apPin: IPin; var nPin: ULONG): HRESULT; stdcall;
  355.     function EndOfStream: HRESULT; stdcall;
  356.     function BeginFlush: HRESULT; stdcall;
  357.     function EndFlush: HRESULT; stdcall;
  358.     function NewSegment(tStart, tStop: TReference_Time; dRate: double): HRESULT; stdcall;
  359.   end;
  360. //lookat Next(pcFetched
  361.   IEnumPins = interface(IUnknown)
  362.     ['{56A86892-0AD4-11CE-B03A-0020AF0BA770}']
  363.     function Next(cPins: ULONG; out ppPins: IPin; out pcFetched: ULONG): HRESULT; stdcall;
  364.     function Skip(cPins: ULONG): HRESULT; stdcall;
  365.     function Reset: HRESULT; stdcall;
  366.     function Clone(out ppEnum: IEnumPins): HRESULT; stdcall;
  367.   end;
  368. //lookat Next pcFetched
  369.   IEnumMediaTypes = interface(IUnknown)
  370.     ['{89C31040-846B-11CE-97D3-00AA0055595A}']
  371.     function Next(cMediaTypes: ULONG; out ppMediaTypes: PAM_Media_Type;
  372.         out pcFetched: ULONG): HRESULT; stdcall;
  373.     function Skip(cMediaTypes: ULONG): HRESULT; stdcall;
  374.     function Reset: HRESULT; stdcall;
  375.     function Clone(out ppEnum: IEnumMediaTypes): HRESULT; stdcall;
  376.   end;
  377.  
  378.   IEnumFilters = interface;
  379. //lookat
  380.   IFilterGraph = interface(IUnknown)
  381.     ['{56A8689F-0AD4-11CE-B03A-0020AF0BA770}']
  382.     function AddFilter(pFilter: IBaseFilter; pName: PWideChar): HRESULT; stdcall;
  383.     function RemoveFilter(pFilter: IBaseFilter): HRESULT; stdcall;
  384.     function EnumFilters(out ppEnum: IEnumFilters): HRESULT; stdcall;
  385.     function FindFilterByName(pName: PWideChar; out ppFilter: IBaseFilter): HRESULT; stdcall;
  386.     function ConnectDirect(ppinOut, ppinIn: IPin; pmt: PAM_Media_Type): HRESULT; stdcall;
  387.     function Reconnect(ppin: IPin): HRESULT; stdcall;
  388.     function Disconnect(ppin: IPin): HRESULT; stdcall;
  389.     function SetDefaultSyncSource: HRESULT; stdcall;
  390.   end;
  391. //lookat Next pcFetched
  392.   IEnumFilters = interface(IUnknown)
  393.     ['{56A86893-0AD4-11CE-B03A-0020AF0BA770}']
  394.     function Next(cFilters: ULONG; out ppFilter: IBaseFilter;
  395.         out pcFetched: ULONG): HRESULT; stdcall;
  396.     function Skip(cFilters: ULONG): HRESULT; stdcall;
  397.     function Reset: HRESULT; stdcall;
  398.     function Clone(out ppEnum: IEnumFilters): HRESULT; stdcall;
  399.   end;
  400.  
  401.   TFilter_State = (
  402.     State_Stopped,
  403.     State_Paused,
  404.     State_Running
  405.   );
  406.  
  407.   IReferenceClock = interface;
  408.  
  409.   IMediaFilter = interface(IPersist)
  410.     ['{56A86899-0AD4-11CE-B03A-0020AF0BA770}']
  411.     function Stop: HRESULT; stdcall;
  412.     function Pause: HRESULT; stdcall;
  413.     function Run(tStart: TReference_Time): HRESULT; stdcall;
  414.     function GetState(dwMilliSecsTimeout: DWORD; out State: TFilter_State): HRESULT; stdcall;
  415.     function SetSyncSource(pClock: IReferenceClock): HRESULT; stdcall;
  416.     function GetSyncSource(out pClock: IReferenceClock): HRESULT; stdcall;
  417.   end;
  418.  
  419.   TFilterInfo = record
  420.     achName: array[0..127] of WCHAR;
  421.     pGraph: IFilterGraph;
  422.   end;
  423.  
  424.   IBaseFilter = interface(IMediaFilter)
  425.     ['{56A86895-0AD4-11CE-B03A-0020AF0BA770}']
  426.     function EnumPins(out ppEnum: IEnumPins): HRESULT; stdcall;
  427.     function FindPin(Id: PWideChar; out ppPin: IPin): HRESULT; stdcall;
  428.     function QueryFilterInfo(out pInfo: TFilterInfo): HRESULT; stdcall;
  429.     function JoinFilterGraph(pGraph: IFilterGraph; pName: PWideChar): HRESULT; stdcall;
  430.     function QueryVendorInfo(out pVendorInfo: PWideChar): HRESULT; stdcall;
  431.   end;
  432.  
  433.   IReferenceClock = interface(IUnknown)
  434.     ['{56A86897-0AD4-11CE-B03A-0020AF0BA770}']
  435.     function GetTime(out pTime: TReference_Time): HRESULT; stdcall;
  436.     function AdviseTime(baseTime, streamTime: TReference_Time;
  437.         hEvent: THandle; out pdwAdviseCookie: DWORD): HRESULT; stdcall;
  438.     function AdvisePeriodic(startTime, periodTime: TReference_Time;
  439.         hSemaphore: HSEMAPHORE; out pdwAdviseCookie: DWORD): HRESULT; stdcall;
  440.     function Unadvise(dwAdviseCookie: DWORD): HRESULT; stdcall;
  441.   end;
  442.  
  443.   IReferenceClock2 = interface(IReferenceClock)
  444.     ['{36B73885-C2C8-11CF-8B46-00805F6CEF60}']
  445.   end;
  446. //lookat
  447.   IMediaSample = interface(IUnknown)
  448.     ['{56A8689A-0AD4-11CE-B03A-0020AF0BA770}']
  449.     function GetPointer(out ppBuffer: PBYTE): HRESULT; stdcall;
  450.     function GetSize: Longint; stdcall;
  451.     function GetTime(out pTimeStart, pTimeEnd: TReference_Time): HRESULT; stdcall;
  452.     function SetTime(pTimeStart, pTimeEnd: PReference_Time): HRESULT; stdcall;
  453.     function IsSyncPoint: HRESULT; stdcall;
  454.     function SetSyncPoint(bIsSyncPoint: BOOL): HRESULT; stdcall;
  455.     function IsPreroll: HRESULT; stdcall;
  456.     function SetPreroll(bIsPreroll: BOOL): HRESULT; stdcall;
  457.     function GetActualDataLength: Longint; stdcall;
  458.     function SetActualDataLength(lLen: Longint): HRESULT; stdcall;
  459.     function GetMediaType(out ppMediaType: PAM_Media_Type): HRESULT; stdcall;
  460.     function SetMediaType(var pMediaType: TAM_Media_Type): HRESULT; stdcall;
  461.     function IsDiscontinuity: HRESULT; stdcall;
  462.     function SetDiscontinuity(bDiscontinuity: BOOL): HRESULT; stdcall;
  463.     function GetMediaTime(out pTimeStart, pTimeEnd: int64): HRESULT; stdcall;
  464.     function SetMediaTime(pTimeStart, pTimeEnd: Pint64): HRESULT; stdcall;
  465.   end;
  466.  
  467. const
  468.   AM_SAMPLE_SPLICEPOINT         = $1;
  469.   AM_SAMPLE_PREROLL             = $2;
  470.   AM_SAMPLE_DATADISCONTINUITY   = $4;
  471.   AM_SAMPLE_TYPECHANGED         = $8;
  472.   AM_SAMPLE_TIMEVALID           = $10;
  473.   AM_SAMPLE_TIMEDISCONTINUITY   = $40;
  474.   AM_SAMPLE_FLUSH_ON_PAUSE      = $80;
  475.   AM_SAMPLE_STOPVALID           = $100;
  476.   AM_SAMPLE_ENDOFSTREAM         = $200;
  477.   AM_STREAM_MEDIA               = 0;
  478.   AM_STREAM_CONTROL             = 1;
  479.  
  480. type
  481.   TAM_Sample2_Properties = record
  482.     cbData: DWORD;
  483.     dwTypeSpecificFlags: DWORD;
  484.     dwSampleFlags: DWORD;
  485.     lActual: Longint;
  486.     tStart: TReference_Time;
  487.     tStop: TReference_Time;
  488.     dwStreamId: DWORD;
  489.     pMediaType: PAM_Media_Type;
  490.     pbBuffer: Pointer;
  491.     cbBuffer: Longint;
  492.   end;
  493.  
  494. type
  495.   IMediaSample2 = interface(IMediaSample)
  496.     ['{36B73884-C2C8-11CF-8B46-00805F6CEF60}']
  497.     function GetProperties(cbProperties: DWORD; out pbProperties): HRESULT; stdcall;
  498.     function SetProperties(cbProperties: DWORD; var pbProperties): HRESULT; stdcall;
  499.   end;
  500.  
  501. const
  502.   AM_GBF_PREVFRAMESKIPPED = 1;
  503.   AM_GBF_NOTASYNCPOINT    = 2;
  504.   AM_GBF_NOWAIT           = 4;
  505.  
  506. type
  507. //lookat
  508.   IMemAllocator = interface(IUnknown)
  509.     ['{56A8689C-0AD4-11CE-B03A-0020AF0BA770}']
  510.     function SetProperties(var pRequest: TAllocator_Properties;
  511.         out pActual: TAllocator_Properties): HRESULT; stdcall;
  512.     function GetProperties(out pProps: TAllocator_Properties): HRESULT; stdcall;
  513.     function Commit: HRESULT; stdcall;
  514.     function Decommit: HRESULT; stdcall;
  515.     function GetBuffer(out ppBuffer: IMediaSample;
  516.         pStartTime, pEndTime: PReference_Time; dwFlags: DWORD): HRESULT; stdcall;
  517.     function ReleaseBuffer(pBuffer: IMediaSample): HRESULT; stdcall;
  518.   end;
  519.  
  520.   IMemAllocatorNotifyCallbackTemp = interface(IUnknown)
  521.     ['{92980b30-c1de-11d2-abf5-00a0c905f375}']
  522.     function NotifyRelease: HRESULT; stdcall;
  523.   end;
  524.  
  525.   IMemAllocatorCallbackTemp = interface(IMemAllocator)
  526.     ['{379a0cf0-c1de-11d2-abf5-00a0c905f375}']
  527.     function SetNotify(pNotify: IMemAllocatorNotifyCallbackTemp): HRESULT; stdcall;
  528.     function GetFreeCount(out plBuffersFree: LongInt): HRESULT; stdcall;
  529.   end;
  530.  
  531.   IMemInputPin = interface(IUnknown)
  532.     ['{56A8689D-0AD4-11CE-B03A-0020AF0BA770}']
  533.     function GetAllocator(out ppAllocator: IMemAllocator): HRESULT; stdcall;
  534.     function NotifyAllocator(pAllocator: IMemAllocator; bReadOnly: BOOL): HRESULT; stdcall;
  535.     function GetAllocatorRequirements(out pProps: TAllocator_Properties): HRESULT; stdcall;
  536.     function Receive(pSample: IMediaSample): HRESULT; stdcall;
  537.     function ReceiveMultiple(var pSamples: IMediaSample; nSamples: Longint;
  538.         out nSamplesProcessed: Longint): HRESULT; stdcall;
  539.     function ReceiveCanBlock: HRESULT; stdcall;
  540.   end;
  541.  
  542.   //Deprecated Interface
  543.   IAMovieSetup = interface(IUnknown)
  544.     ['{A3D8CEC0-7E5A-11CF-BBC5-00805F6CEF20}']
  545.     function Register: HRESULT; stdcall;
  546.     function Unregister: HRESULT; stdcall;
  547.   end;
  548.  
  549. const
  550.   AM_SEEKING_NoPositioning          = 0;
  551.   AM_SEEKING_AbsolutePositioning    = $1;
  552.   AM_SEEKING_RelativePositioning    = $2;
  553.   AM_SEEKING_IncrementalPositioning = $3;
  554.   AM_SEEKING_PositioningBitsMask    = $3;
  555.   AM_SEEKING_SeekToKeyFrame         = $4;
  556.   AM_SEEKING_ReturnTime             = $8;
  557.   AM_SEEKING_Segment                = $10;
  558.   AM_SEEKING_NoFlush                = $20;
  559.  
  560.   AM_SEEKING_CanSeekAbsolute        = $1;
  561.   AM_SEEKING_CanSeekForwards        = $2;
  562.   AM_SEEKING_CanSeekBackwards       = $4;
  563.   AM_SEEKING_CanGetCurrentPos       = $8;
  564.   AM_SEEKING_CanGetStopPos          = $10;
  565.   AM_SEEKING_CanGetDuration         = $20;
  566.   AM_SEEKING_CanPlayBackwards       = $40;
  567.   AM_SEEKING_CanDoSegments          = $80;
  568.   AM_SEEKING_Source                 = $100;
  569.  
  570. //lookat  
  571. type
  572.   IMediaSeeking = interface(IUnknown)
  573.     ['{36B73880-C2C8-11CF-8B46-00805F6CEF60}']
  574.     function GetCapabilities(out pCapabilities: DWORD): HRESULT; stdcall;
  575.     function CheckCapabilities(var pCapabilities: DWORD): HRESULT; stdcall;
  576.     function IsFormatSupported(const pFormat: TGUID): HRESULT; stdcall;
  577.     function QueryPreferredFormat(out pFormat: TGUID): HRESULT; stdcall;
  578.     function GetTimeFormat(out pFormat: TGUID): HRESULT; stdcall;
  579.     function IsUsingTimeFormat(const pFormat: TGUID): HRESULT; stdcall;
  580.     function SetTimeFormat(const pFormat: TGUID): HRESULT; stdcall;
  581.     function GetDuration(out pDuration: int64): HRESULT; stdcall;
  582.     function GetStopPosition(out pStop: int64): HRESULT; stdcall;
  583.     function GetCurrentPosition(out pCurrent: int64): HRESULT; stdcall;
  584.     function ConvertTimeFormat(out pTarget: int64; pTargetFormat: PGUID;
  585.         Source: int64; pSourceFormat: PGUID): HRESULT; stdcall;
  586.     function SetPositions(var pCurrent: int64; dwCurrentFlags: DWORD;
  587.         var pStop: int64; dwStopFlags: DWORD): HRESULT; stdcall;
  588.     function GetPositions(out pCurrent, pStop: int64): HRESULT; stdcall;
  589.     function GetAvailable(out pEarliest, pLatest: int64): HRESULT; stdcall;
  590.     function SetRate(dRate: double): HRESULT; stdcall;
  591.     function GetRate(out pdRate: double): HRESULT; stdcall;
  592.     function GetPreroll(out pllPreroll: int64): HRESULT; stdcall;
  593.   end;
  594.  
  595. const
  596.   AM_MEDIAEVENT_NONOTIFY = $01;
  597.  
  598. type
  599.   TRegFilter = record
  600.     Clsid: TGUID;
  601.     Name: LPWSTR;
  602.   end;
  603.   PRegFilter = ^TRegFilter;
  604.  
  605.   //Deprecated Interface
  606.   IEnumRegFilters = interface(IUnknown)
  607.     ['{56A868A4-0AD4-11CE-B03A-0020AF0BA770}']
  608.     function Next(cFilters: ULONG; out apRegFilter: TRegFilter;
  609.         out pcFetched: ULONG): HRESULT; stdcall;
  610.     function Skip(cFilters: ULONG): HRESULT; stdcall;
  611.     function Reset: HRESULT; stdcall;
  612.     function Clone(out ppEnum: IEnumRegFilters): HRESULT; stdcall;
  613.   end;
  614.  
  615. const
  616.   MERIT_PREFERRED       = $800000;
  617.   MERIT_NORMAL          = $600000;
  618.   MERIT_UNLIKELY        = $400000;
  619.   MERIT_DO_NOT_USE      = $200000;
  620.   MERIT_SW_COMPRESSOR   = $100000;
  621.   MERIT_HW_COMPRESSOR   = $100050;
  622.  
  623. type
  624.   //lookat
  625.   //Deprecated Interface
  626.   IFilterMapper = interface(IUnknown)
  627.     ['{56A868A3-0AD4-11CE-B03A-0020AF0BA770}']
  628.     function RegisterFilter(const clsid: TGUID; Name: LPCWSTR; dwMerit: DWORD):
  629.         HRESULT; stdcall;
  630.     function RegisterFilterInstance(const clsid: TGUID; Name: LPCWSTR;
  631.         out MRId: TGUID): HRESULT; stdcall;
  632.     function RegisterPin(const Filter: TGUID; Name: LPCWSTR;
  633.         bRendered, bOutput, bZero, bMany: BOOL; ConnectsToFilter: PGUID;
  634.         ConnectsToPin: PWideChar): HRESULT; stdcall;
  635.     function RegisterPinType(const clsFilter: TGUID; strName: LPCWSTR;
  636.         const clsMajorType, clsSubType: TGUID): HRESULT; stdcall;
  637.     function UnregisterFilter(const Filter: TGUID): HRESULT; stdcall;
  638.     function UnregisterFilterInstance(const MRId: TGUID): HRESULT; stdcall;
  639.     function UnregisterPin(const Filter: TGUID; Name: LPCWSTR): HRESULT; stdcall;
  640.     function EnumMatchingFilters(out ppEnum: IEnumRegFilters; dwMerit: DWORD;
  641.         bInputNeeded: BOOL; const clsInMaj, clsInSub: TGUID;
  642.         bRender, bOututNeeded: BOOL; const clsOutMaj, clsOutSub: TGUID): HRESULT; stdcall;
  643.   end;
  644.  
  645.   PRegPinTypes = ^TRegPinTypes;
  646.   TRegPinTypes = record
  647.     clsMajorType: PGUID;
  648.     clsMinorType: PGUID;
  649.   end;
  650.  
  651.   PRegFilterPins = ^TRegFilterPins;
  652.   TRegFilterPins = record
  653.     strName: PWideChar;
  654.     bRendered: BOOL;
  655.     bOutput: BOOL;
  656.     bZero: BOOL;
  657.     bMany: BOOL;
  658.     oFilter: PGUID;
  659.     strConnectsToPin: PWideChar;
  660.     nMediaTypes: LongWord;
  661.     lpMediaType: PRegPinTypes;
  662.   end;
  663.  
  664.   PRegPinMedium = ^TRegPinMedium;
  665.   TRegPinMedium = record
  666.     clsMedium: TGUID;
  667.     dw1: DWORD;
  668.     dw2: DWORD;
  669.   end;
  670.  
  671. const
  672.   REG_PINFLAG_B_ZERO     = $1;
  673.   REG_PINFLAG_B_RENDERER = $2;
  674.   REG_PINFLAG_B_MANY     = $4;
  675.   REG_PINFLAG_B_OUTPUT   = $8;
  676.  
  677. type
  678.   PRegFilterPins2 = ^TRegFilterPins2;
  679.   TRegFilterPins2 = record
  680.     dwFlags: DWORD;
  681.     cInstances: UINT;
  682.     nMediaTypes: UINT;
  683.     lpMediaType: PRegPinTypes;
  684.     lpMedium: PRegPinMedium;
  685.     clsPinCategory: PGUID;
  686.   end;
  687.  
  688.   TRegFilter2 = record
  689.     dwVersion: DWORD;
  690.     dwMerit: DWORD;
  691.     case Integer of
  692.       0: (
  693.         cPins: ULONG;
  694.         cPins2: ULONG;
  695.       );
  696.       1: (
  697.         rgPins: PRegFilterPins;
  698.         rgPins2: PRegFilterPins2;
  699.       );
  700.   end;
  701. //lookat
  702.  IFilterMapper2 = interface(IUnknown)
  703.     ['{B79BB0B0-33C1-11D1-ABE1-00A0C905F375}']
  704.     function CreateCategory(const clsidCategory: TGUID; dwCategoryMerit: DWORD;
  705.         Description: PWideChar): HRESULT; stdcall;
  706.     function UnregisterFilter(const pclsidCategory: TGUID;
  707.         szInstance: PWideChar; const Filter: TGUID): HRESULT; stdcall;
  708.     function RegisterFilter(const clsidFilter: TGUID; Name: PWideChar;
  709.         ppMoniker: IMoniker; pclsidCategory: PGUID;
  710.         szInstance: PWideChar; const prf2: TRegFilter2): HRESULT; stdcall;
  711.     function EnumMatchingFilters(out ppEnum: IEnumMoniker; dwFlags: DWORD; bExactMatch: BOOL;
  712.         dwMerit: DWORD; bInputNeeded: BOOL; cInputTypes: DWORD; pInputTypes: PGUID;
  713.         pMedIn: PREGPINMEDIUM; pPinCategoryIn: PGUID; bRender, bOutputNeeded: BOOL;
  714.         cOutputTypes: DWORD; pOutputTypes: PGUID; pMedOut: PRegPinMedium;
  715.         pPinCategoryOut: PGUID): HRESULT; stdcall;
  716.   end;
  717.  
  718.   TQualityMessageType = (
  719.     Famine,
  720.     Flood
  721.   );
  722.  
  723.   TQuality = record
  724.     Typ: TQualityMessageType;
  725.     Proportion: Longint;
  726.     Late: TReference_Time;
  727.     TimeStamp: TReference_Time;
  728.   end;
  729.  
  730.   IQualityControl = interface(IUnknown)
  731.     ['{56A868A5-0AD4-11CE-B03A-0020AF0BA770}']
  732.     function Notify(pSelf: IBaseFilter; q: TQuality): HRESULT; stdcall;
  733.     function SetSink(piqc: IQualityControl): HRESULT; stdcall;
  734.   end;
  735.  
  736. const
  737.   CK_NOCOLORKEY = $0;
  738.   CK_INDEX      = $1;
  739.   CK_RGB        = $2;
  740.  
  741. type
  742.   TColorKey = record
  743.     KeyType: DWORD;
  744.     PaletteIndex: DWORD;
  745.     LowColorValue: COLORREF;
  746.     HighColorValue: COLORREF;
  747.   end;
  748.  
  749. const
  750.   ADVISE_NONE       = 0;
  751.   ADVISE_CLIPPING   = $1;
  752.   ADVISE_PALETTE    = $2;
  753.   ADVISE_COLORKEY   = $4;
  754.   ADVISE_POSITION   = $8;
  755.  
  756.   ADVISE_ALL = ADVISE_CLIPPING or ADVISE_PALETTE or ADVISE_COLORKEY or ADVISE_POSITION;
  757.  
  758. type
  759.   IOverlayNotify = interface(IUnknown)
  760.     ['{56A868A0-0AD4-11CE-B03A-0020AF0BA770}']
  761.     function OnPaletteChange(dwColors: DWORD; const pPalette: TPALETTEENTRY): HRESULT; stdcall;
  762.     function OnClipChange(const pSourceRect, pDestinationRect: TRect;
  763.         const pRgnData: TRgnData): HRESULT; stdcall;
  764.     function OnColorKeyChange(const pColorKey: TColorKey): HRESULT; stdcall;
  765.     function OnPositionChange(const pSourceRect, pDestinationRect: TRect): HRESULT; stdcall;
  766.   end;
  767.  
  768.   IOverlayNotify2 = interface(IOverlayNotify)
  769.     ['{680EFA10-D535-11D1-87C8-00A0C9223196}']
  770.     function OnDisplayChange(var hMonitor: HMONITOR ): HRESULT; stdcall;
  771.   end;
  772.  
  773.   IOverlay = interface(IUnknown)
  774.     ['{56A868A1-0AD4-11CE-B03A-0020AF0BA770}']
  775.     function GetPalette(out pdwColors: DWORD; out ppPalette: PPALETTEENTRY): HRESULT; stdcall;
  776.     function SetPalette(dwColors: DWORD; var pPalette: PaletteEntry): HRESULT; stdcall;
  777.     function GetDefaultColorKey(out pColorKey: TColorKey): HRESULT; stdcall;
  778.     function GetColorKey(out pColorKey: TColorKey): HRESULT; stdcall;
  779.     function SetColorKey(var pColorKey: TColorKey): HRESULT; stdcall;
  780.     function GetWindowHandle(out pHwnd: HWND): HRESULT; stdcall;
  781.     function GetClipList(out pSourceRect, pDestinationRect: TRect;
  782.         out ppRgnData: PRgnData): HRESULT; stdcall;
  783.     function GetVideoPosition(out pSourceRect, pDestinationRect: TRect): HRESULT; stdcall;
  784.     function Advise(pOverlayNotify: IOverlayNotify; dwInterests: DWORD): HRESULT; stdcall;
  785.     function Unadvise: HRESULT; stdcall;
  786.   end;
  787.  
  788.   IMediaEventSink = interface(IUnknown)
  789.     ['{56A868A2-0AD4-11CE-B03A-0020AF0BA770}']
  790.     function Notify(EventCode, EventParam1, EventParam2: Longint): HRESULT; stdcall;
  791.   end;
  792.  
  793. //lookat
  794.   IFileSourceFilter = interface(IUnknown)
  795.     ['{56A868A6-0AD4-11CE-B03A-0020AF0BA770}']
  796.     function Load(pszFileName: PWCHAR; pmt: PAM_Media_Type): HRESULT; stdcall;
  797.     function GetCurFile(out ppszFileName: PWideChar; out pmt: TAM_Media_Type): HRESULT; stdcall;
  798.   end;
  799.  
  800.   IFileSinkFilter = interface(IUnknown)
  801.     ['{A2104830-7C70-11CF-8BCE-00AA00A3F1A6}']
  802.     function SetFileName(pszFileName: PWideChar; var pmt: TAM_Media_Type): HRESULT; stdcall;
  803.     function GetCurFile(out ppszFileName: PWideChar; out pmt: TAM_Media_Type): HRESULT; stdcall;
  804.   end;
  805.  
  806.   IFileSinkFilter2 = interface(IFileSinkFilter)
  807.     ['{00855B90-CE1B-11D0-BD4F-00A0C911CE86}']
  808.     function SetMode(dwFlags: DWORD): HRESULT; stdcall;
  809.     function GetMode(out pdwFlags: DWORD): HRESULT; stdcall;
  810.   end;
  811.  
  812.   TAM_FileSink_Flags = (
  813.     AM_FILE_INVALID_0,
  814.     AM_FILE_OVERWRITE
  815.   );
  816.  
  817.   PAsyncIOReq = ^TAsyncIOReq;
  818.   TAsyncIOReq = record
  819.     engine: array[0..3] of DWORD;
  820.     lpv: Pointer;
  821.     cb: DWORD;
  822.     dwError: DWORD;
  823.     cbDone: DWORD;
  824.     liPos: TLargeInteger;
  825.     hEvent: DWORD;
  826.     dwUser: DWORD;
  827.   end;
  828.  
  829. //old interface
  830.   IFileAsyncIO = interface(IUnknown)
  831.     ['{56A868A7-0AD4-11CE-B03A-0020AF0BA770}']
  832.     function QueryAlignment(out pdwAlign: DWORD): HRESULT; stdcall;
  833.     function Read(const pReq: TAsyncIOReq): HRESULT; stdcall;
  834.     function Write(const pReq: TAsyncIOReq): HRESULT; stdcall;
  835.     function WaitForNext(out ppReq: PAsyncIOReq;
  836.         dwTimeout: DWORD): HRESULT; stdcall;
  837.     function WaitForSpecific(out pReq: TAsyncIOReq;
  838.         dwTimeout: DWORD): HRESULT; stdcall;
  839.     function DiscardPending: HRESULT; stdcall;
  840.     function Flush: HRESULT; stdcall;
  841.   end;
  842.  
  843. //lookat
  844.   IGraphBuilder = interface(IFilterGraph)
  845.     ['{56A868A9-0AD4-11CE-B03A-0020AF0BA770}']
  846.     function Connect(ppinOut, ppinIn: IPin): HRESULT; stdcall;
  847.     function Render(ppinOut: IPin): HRESULT; stdcall;
  848.     function RenderFile(lpcwstrFile, lpcwstrPlayList: PWideChar): HRESULT; stdcall;
  849.     function AddSourceFilter(lpcwstrFileName, lpcwstrFilterName: LPCWSTR;
  850.         out ppFilter: IBaseFilter): HRESULT; stdcall;
  851.     function SetLogFile(hFile: PHandle): HRESULT; stdcall;
  852.     function Abort: HRESULT; stdcall;
  853.     function ShouldOperationContinue: HRESULT; stdcall;
  854.   end;
  855.  
  856.   IAMCopyCaptureFileProgress = interface;
  857.  
  858.   //lookat
  859.   //Deprecated Interface
  860.   ICaptureGraphBuilder = interface(IUnknown)
  861.     ['{BF87B6E0-8C27-11D0-B3F0-00AA003761C5}']
  862.     function SetFiltergraph(pfg: IGraphBuilder): HRESULT; stdcall;
  863.     function GetFiltergraph(out ppfg: IGraphBuilder): HRESULT; stdcall;
  864.     function SetOutputFileName(const pType: TGUID; lpstrFile: PWCHAR;
  865.         out ppf: IBaseFilter; out ppSink: IFileSinkFilter): HRESULT; stdcall;
  866.     function FindInterface(pCategory: PGUID; pf: IBaseFilter;
  867.         const riid: TGUID; out ppint): HRESULT; stdcall;
  868.     function RenderStream(pCategory: PGUID; pSource: IUnknown;
  869.         pfCompressor, pfRenderer: IBaseFilter): HRESULT; stdcall;
  870.     function ControlStream(pCategory: PGUID; pFilter: IBaseFilter;
  871.         pstart, pstop: PREFERENCE_TIME; wStartCookie, wStopCookie: WORD): HRESULT; stdcall;
  872.     function AllocCapFile(lpstr: PWCHAR; dwlSize: int64): HRESULT; stdcall;
  873.     function CopyCaptureFile(lpwstrOld, lpwstrNew: PWCHAR; fAllowEscAbort: Integer;
  874.         pCallback: IAMCopyCaptureFileProgress): HRESULT; stdcall;
  875.   end;
  876. //lookat
  877.   ICaptureGraphBuilder2 = interface(IUnknown)
  878.     ['{93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D}']
  879.     function SetFiltergraph(pfg: IGraphBuilder): HRESULT; stdcall;
  880.     function GetFiltergraph(out ppfg: IGraphBuilder): HRESULT; stdcall;
  881.     function SetOutputFileName(const pType: TGUID; lpstrFile: PWCHAR; out ppf: IBaseFilter; out ppSink: IFileSinkFilter): HRESULT; stdcall;
  882.     function FindInterface(pCategory, pType: PGUID; pf: IBaseFilter; const riid: TGUID; out ppint): HRESULT; stdcall;
  883.     function RenderStream(pCategory, pType: PGUID; pSource: IUnknown; pfCompressor, pfRenderer: IBaseFilter): HRESULT; stdcall;
  884.     function ControlStream(pCategory, pType: PGUID; pFilter: IBaseFilter; pstart, pstop: PREFERENCE_TIME; wStartCookie, wStopCookie: WORD ): HRESULT; stdcall;
  885.     function AllocCapFile(lpstr: PWCHAR; dwlSize: int64): HRESULT; stdcall;
  886.     function CopyCaptureFile(lpwstrOld, lpwstrNew: PWCHAR; fAllowEscAbort: Integer; pCallback: IAMCopyCaptureFileProgress): HRESULT; stdcall;
  887.     function FindPin(pSource: IUnknown; pindir: TPIN_DIRECTION; const pCategory, pType: TGUID; fUnconnected: BOOL; num: integer; out ppPin: IPin): HRESULT; stdcall;
  888.   end;
  889.  
  890.   IAMCopyCaptureFileProgress = interface(IUnknown)
  891.     ['{670D1D20-A068-11D0-B3F0-00AA003761C5}']
  892.     function Progress(iProgress: Integer): HRESULT; stdcall;
  893.   end;
  894.  
  895. const
  896.   AM_RENDEREX_RENDERTOEXISTINGRENDERERS = $01;
  897.  
  898. type
  899. //lookat
  900.   IFilterGraph2 = interface(IGraphBuilder)
  901.     ['{36B73882-C2C8-11CF-8B46-00805F6CEF60}']
  902.     function AddSourceFilterForMoniker(pMoniker: IMoniker; pCtx: IBindCtx;
  903.         lpcwstrFilterName: LPCWSTR; out ppFilter: IBaseFilter): HRESULT; stdcall;
  904.     function ReconnectEx(ppin: IPin; pmt: PAM_Media_Type): HRESULT; stdcall;
  905.     // Render a pin without adding any new renderers (pvContext = nil)
  906.     // not in the documentation ??
  907.     function RenderEx(pPinOut: IPin; dwFlags: DWORD; var pvContext: PDWORD): HRESULT; stdcall;
  908.   end;
  909.  
  910.   IStreamBuilder = interface(IUnknown)
  911.     ['{56A868BF-0AD4-11CE-B03A-0020AF0BA770}']
  912.     function Render(ppinOut: IPin; pGraph: IGraphBuilder): HRESULT; stdcall;
  913.     function Backout(ppinOut: IPin; pGraph: IGraphBuilder): HRESULT; stdcall;
  914.   end;
  915.  
  916.   IAsyncReader = interface(IUnknown)
  917.     ['{56A868AA-0AD4-11CE-B03A-0020AF0BA770}']
  918.     function RequestAllocator(pPreferred: IMemAllocator;
  919.         const pProps: TAllocator_Properties; out ppActual: IMemAllocator): HRESULT; stdcall;
  920.     function Request(pSample: IMediaSample; dwUser: DWORD): HRESULT; stdcall;
  921.     function WaitForNext(dwTimeout: DWORD; out ppSample: IMediaSample;
  922.         out pdwUser: DWORD): HRESULT; stdcall;
  923.     function SyncReadAligned(pSample: IMediaSample): HRESULT; stdcall;
  924.     function SyncRead(llPosition: int64; lLength: Longint; out pBuffer: Pbyte): HRESULT; stdcall;
  925.     function Length(out pTotal, pAvailable: int64): HRESULT; stdcall;
  926.     function BeginFlush: HRESULT; stdcall;
  927.     function EndFlush: HRESULT; stdcall;
  928.   end;
  929.  
  930.   IGraphVersion = interface(IUnknown)
  931.     ['{56A868AB-0AD4-11CE-B03A-0020AF0BA770}']
  932.     function QueryVersion(var pVersion: Longint): HRESULT; stdcall;
  933.   end;
  934.  
  935.   IResourceConsumer = interface(IUnknown)
  936.     ['{56A868AD-0AD4-11CE-B03A-0020AF0BA770}']
  937.     function AcquireResource(idResource: Longint): HRESULT; stdcall;
  938.     function ReleaseResource(idResource: Longint): HRESULT; stdcall;
  939.   end;
  940.  
  941.   IResourceManager = interface(IUnknown)
  942.     ['{56A868AC-0AD4-11CE-B03A-0020AF0BA770}']
  943.     function Register(pName: LPCWSTR; cResource: Longint;
  944.         out plToken: Longint): HRESULT; stdcall;
  945.     function RegisterGroup(pName: LPCWSTR; cResource: Longint;
  946.         const palTokens: Longint; out plToken: Longint): HRESULT; stdcall;
  947.     function RequestResource(idResource: Longint; pFocusObject: IUnknown;
  948.         pConsumer: IResourceConsumer): HRESULT; stdcall;
  949.     function NotifyAcquire(idResource: Longint; pConsumer: IResourceConsumer;
  950.         hr: HRESULT): HRESULT; stdcall;
  951.     function NotifyRelease(idResource: Longint; pConsumer: IResourceConsumer;
  952.         bStillWant: BOOL): HRESULT; stdcall;
  953.     function CancelRequest(idResource: Longint; pConsumer: IResourceConsumer): HRESULT; stdcall;
  954.     function SetFocus(pFocusObject: IUnknown): HRESULT; stdcall;
  955.     function ReleaseFocus(pFocusObject: IUnknown): HRESULT; stdcall;
  956.   end;
  957.  
  958.   IDistributorNotify = interface(IUnknown)
  959.     ['{56A868AF-0AD4-11CE-B03A-0020AF0BA770}']
  960.     function Stop: HRESULT; stdcall;
  961.     function Pause: HRESULT; stdcall;
  962.     function Run(tStart: TReference_Time): HRESULT; stdcall;
  963.     function SetSyncSource(pClock: IReferenceClock): HRESULT; stdcall;
  964.     function NotifyGraphChange: HRESULT; stdcall;
  965.   end;
  966.  
  967. const
  968.   AM_STREAM_INFO_START_DEFINED   = $1;
  969.   AM_STREAM_INFO_STOP_DEFINED    = $2;
  970.   AM_STREAM_INFO_DISCARDING      = $4;
  971.   AM_STREAM_INFO_STOP_SEND_EXTRA = $10;
  972.  
  973. type
  974.   TAM_Stream_Info = record
  975.     tStart: TReference_Time;
  976.     tStop: TReference_Time;
  977.     dwStartCookie: DWORD;
  978.     dwStopCookie: DWORD;
  979.     dwFlags: DWORD;
  980.   end;
  981.  
  982.   IAMStreamControl = interface(IUnknown)
  983.     ['{36b73881-c2c8-11cf-8b46-00805f6cef60}']
  984.     function StartAt(ptStart: PReference_Time; dwCookie: DWORD): HRESULT; stdcall;
  985.     function StopAt(ptStop: PReference_Time; bSendExtra: BOOL;
  986.         dwCookie: DWORD): HRESULT; stdcall;
  987.     function GetInfo(out pInfo: TAM_Stream_Info): HRESULT; stdcall;
  988.   end;
  989.  
  990.   ISeekingPassThru = interface(IUnknown)
  991.     ['{36B73883-C2C8-11CF-8B46-00805F6CEF60}']
  992.     function Init(bSupportRendering: BOOL; pPin: IPin): HRESULT; stdcall;
  993.   end;
  994.  
  995.   TVideo_Stream_Config_Caps = record
  996.     guid: TGUID;
  997.     VideoStandard: ULONG;
  998.     InputSize: TSize;
  999.     MinCroppingSize: TSize;
  1000.     MaxCroppingSize: TSize;
  1001.     CropGranularityX: Integer;
  1002.     CropGranularityY: Integer;
  1003.     CropAlignX: Integer;
  1004.     CropAlignY: Integer;
  1005.     MinOutputSize: TSize;
  1006.     MaxOutputSize: TSize;
  1007.     OutputGranularityX: Integer;
  1008.     OutputGranularityY: Integer;
  1009.     StretchTapsX: Integer;
  1010.     StretchTapsY: Integer;
  1011.     ShrinkTapsX: Integer;
  1012.     ShrinkTapsY: Integer;
  1013.     MinFrameInterval: Int64;
  1014.     MaxFrameInterval: Int64;
  1015.     MinBitsPerSecond: Longint;
  1016.     MaxBitsPerSecond: Longint;
  1017.   end;
  1018.  
  1019.   TAudio_Stream_Config_Caps = record
  1020.     guid: TGUID;
  1021.     MinimumChannels: ULONG;
  1022.     MaximumChannels: ULONG;
  1023.     ChannelsGranularity: ULONG;
  1024.     MinimumBitsPerSample: ULONG;
  1025.     MaximumBitsPerSample: ULONG;
  1026.     BitsPerSampleGranularity: ULONG;
  1027.     MinimumSampleFrequency: ULONG;
  1028.     MaximumSampleFrequency: ULONG;
  1029.     SampleFrequencyGranularity: ULONG;
  1030.   end;
  1031.  
  1032.   IAMStreamConfig = interface(IUnknown)
  1033.     ['{C6E13340-30AC-11d0-A18C-00A0C9118956}']
  1034.     function SetFormat(const pmt: TAM_Media_Type): HRESULT; stdcall;
  1035.     function GetFormat(out ppmt: PAM_Media_Type): HRESULT; stdcall;
  1036.     function GetNumberOfCapabilities(out piCount, piSize: Integer): HRESULT; stdcall;
  1037.     function GetStreamCaps(iIndex: Integer; out ppmt: PAM_Media_Type;
  1038.       out pSCC): HRESULT; stdcall;
  1039.   end;
  1040.  
  1041.   TInterleavingMode = (
  1042.     INTERLEAVE_NONE,
  1043.     INTERLEAVE_CAPTURE,
  1044.     INTERLEAVE_FULL
  1045.   );
  1046.  
  1047.   IConfigInterleaving = interface(IUnknown)
  1048.     ['{BEE3D220-157B-11d0-BD23-00A0C911CE86}']
  1049.     function put_Mode(mode: TInterleavingMode): HRESULT; stdcall;
  1050.     function get_Mode(out pMode: TInterleavingMode): HRESULT; stdcall;
  1051.     function put_Interleaving(const prtInterleave, prtPreroll: TReference_Time): HRESULT; stdcall;
  1052.     function get_Interleaving(out prtInterleave, prtPreroll: TReference_Time): HRESULT; stdcall;
  1053.   end;
  1054.  
  1055.   IConfigAviMux = interface(IUnknown)
  1056.     ['{5ACD6AA0-F482-11ce-8B67-00AA00A3F1A6}']
  1057.     function SetMasterStream(iStream: Longint): HRESULT; stdcall;
  1058.     function GetMasterStream(out pStream: Longint): HRESULT; stdcall;
  1059.     function SetOutputCompatibilityIndex(fOldIndex: BOOL): HRESULT; stdcall;
  1060.     function GetOutputCompatibilityIndex(out pfOldIndex: BOOL): HRESULT; stdcall;
  1061.   end;
  1062.  
  1063. const
  1064.   CompressionCaps_CanQuality    = $1;
  1065.   CompressionCaps_CanCrunch     = $2;
  1066.   CompressionCaps_CanKeyFrame   = $4;
  1067.   CompressionCaps_CanBFrame     = $8;
  1068.   CompressionCaps_CanWindow     = $10;
  1069.  
  1070. type
  1071.   IAMVideoCompression = interface(IUnknown)
  1072.     ['{C6E13343-30AC-11d0-A18C-00A0C9118956}']
  1073.     function put_KeyFrameRate(KeyFrameRate: Longint): HRESULT; stdcall;
  1074.     function get_KeyFrameRate(out pKeyFrameRate: Longint): HRESULT; stdcall;
  1075.     function put_PFramesPerKeyFrame(PFramesPerKeyFrame: Longint): HRESULT; stdcall;
  1076.     function get_PFramesPerKeyFrame(out pPFramesPerKeyFrame: Longint): HRESULT; stdcall;
  1077.     function put_Quality(Quality: double): HRESULT; stdcall;
  1078.     function get_Quality(out pQuality: double): HRESULT; stdcall;
  1079.     function put_WindowSize(WindowSize: int64): HRESULT; stdcall;
  1080.     function get_WindowSize(out pWindowSize: int64): HRESULT; stdcall;
  1081.     function GetInfo(pszVersion: PWideChar; var pcbVersion: Integer;
  1082.         pszDescription: PWideChar; var pcbDescription: Integer;
  1083.         out pDefaultKeyFrameRate, pDefaultPFramesPerKey: Longint;
  1084.         out pDefaultQuality: double; out pCapabilities: Longint): HRESULT; stdcall;
  1085.     function OverrideKeyFrame(FrameNumber: Longint): HRESULT; stdcall;
  1086.     function OverrideFrameSize(FrameNumber, Size: Longint): HRESULT; stdcall;
  1087.   end;
  1088.  
  1089. const
  1090.   VfwCaptureDialog_Source  = $1;
  1091.   VfwCaptureDialog_Format  = $2;
  1092.   VfwCaptureDialog_Display = $4;
  1093.  
  1094.   VfwCompressDialog_Config = $1;
  1095.   VfwCompressDialog_About  = $2;
  1096.  
  1097. type
  1098.   IAMVfwCaptureDialogs = interface(IUnknown)
  1099.     ['{D8D715A0-6E5E-11D0-B3F0-00AA003761C5}']
  1100.     function HasDialog(iDialog: Integer): HRESULT; stdcall;
  1101.     function ShowDialog(iDialog: Integer; hwnd: HWND): HRESULT; stdcall;
  1102.     function SendDriverMessage(iDialog: Integer; uMsg: Integer;
  1103.         dw1, dw2: Longint): HRESULT; stdcall;
  1104.   end;
  1105.  
  1106.   IAMVfwCompressDialogs = interface(IUnknown)
  1107.     ['{D8D715A3-6E5E-11D0-B3F0-00AA003761C5}']
  1108.     function ShowDialog(iDialog: Integer; hwnd: HWND): HRESULT; stdcall;
  1109.     function GetState(out pState; var pcbState: Integer): HRESULT; stdcall;
  1110.     function SetState(var pState; cbState: Integer): HRESULT; stdcall;
  1111.     function SendDriverMessage(uMsg: Integer; dw1, dw2: Longint): HRESULT; stdcall;
  1112.   end;
  1113.  
  1114.   IAMDroppedFrames = interface(IUnknown)
  1115.     ['{C6E13344-30AC-11d0-A18C-00A0C9118956}']
  1116.     function GetNumDropped(out plDropped: Longint): HRESULT; stdcall;
  1117.     function GetNumNotDropped(out plNotDropped: Longint): HRESULT; stdcall;
  1118.     function GetDroppedInfo(lSize: Longint; out plArray: Longint;
  1119.         out plNumCopied: Longint): HRESULT; stdcall;
  1120.     function GetAverageFrameSize(out plAverageSize: Longint): HRESULT; stdcall;
  1121.   end;
  1122.  
  1123. const
  1124.   AMF_AUTOMATICGAIN = -1;
  1125.  
  1126. type
  1127.   IAMAudioInputMixer = interface(IUnknown)
  1128.     ['{54C39221-8380-11d0-B3F0-00AA003761C5}']
  1129.     function put_Enable(fEnable: BOOL): HRESULT; stdcall;
  1130.     function get_Enable(out pfEnable: BOOL): HRESULT; stdcall;
  1131.     function put_Mono(fMono: BOOL): HRESULT; stdcall;
  1132.     function get_Mono(out pfMono: BOOL): HRESULT; stdcall;
  1133.     function put_MixLevel(Level: double): HRESULT; stdcall;
  1134.     function get_MixLevel(out pLevel: double): HRESULT; stdcall;
  1135.     function put_Pan(Pan: double): HRESULT; stdcall;
  1136.     function get_Pan(out pPan: double): HRESULT; stdcall;
  1137.     function put_Loudness(fLoudness: BOOL): HRESULT; stdcall;
  1138.     function get_Loudness(out pfLoudness: BOOL): HRESULT; stdcall;
  1139.     function put_Treble(Treble: double): HRESULT; stdcall;
  1140.     function get_Treble(out pTreble: double): HRESULT; stdcall;
  1141.     function get_TrebleRange(out pRange: double): HRESULT; stdcall;
  1142.     function put_Bass(Bass: double): HRESULT; stdcall;
  1143.     function get_Bass(out pBass: double): HRESULT; stdcall;
  1144.     function get_BassRange(out pRange: double): HRESULT; stdcall;
  1145.   end;
  1146.  
  1147.   IAMBufferNegotiation = interface(IUnknown)
  1148.     ['{56ED71A0-AF5F-11D0-B3F0-00AA003761C5}']
  1149.     function SuggestAllocatorProperties(const pprop: TAllocator_Properties): HRESULT; stdcall;
  1150.     function GetAllocatorProperties(var pprop: TAllocator_Properties): HRESULT; stdcall;
  1151.   end;
  1152.  
  1153. const
  1154.   AnalogVideo_None        = 0;
  1155.   AnalogVideo_NTSC_M      = $1;
  1156.   AnalogVideo_NTSC_M_J    = $2;
  1157.   AnalogVideo_NTSC_433    = $4;
  1158.   AnalogVideo_PAL_B       = $10;
  1159.   AnalogVideo_PAL_D       = $20;
  1160.   AnalogVideo_PAL_G       = $40;
  1161.   AnalogVideo_PAL_H       = $80;
  1162.   AnalogVideo_PAL_I       = $100;
  1163.   AnalogVideo_PAL_M       = $200;
  1164.   AnalogVideo_PAL_N       = $400;
  1165.   AnalogVideo_PAL_60      = $800;
  1166.   AnalogVideo_SECAM_B     = $1000;
  1167.   AnalogVideo_SECAM_D     = $2000;
  1168.   AnalogVideo_SECAM_G     = $4000;
  1169.   AnalogVideo_SECAM_H     = $8000;
  1170.   AnalogVideo_SECAM_K     = $10000;
  1171.   AnalogVideo_SECAM_K1    = $20000;
  1172.   AnalogVideo_SECAM_L     = $40000;
  1173.   AnalogVideo_SECAM_L1    = $80000;
  1174.  
  1175.   AnalogVideo_NTSC_Mask   = $00000007;
  1176.   AnalogVideo_PAL_Mask    = $00000FF0;
  1177.   AnalogVideo_SECAM_Mask  = $000FF000;
  1178.  
  1179. type
  1180.   TTunerInputType =(
  1181.     TunerInputCable,
  1182.     TunerInputAntenna
  1183.   );
  1184.  
  1185.   TVideoCopyProtectionType = (
  1186.     VideoCopyProtectionMacrovisionBasic,
  1187.     VideoCopyProtectionMacrovisionCBI
  1188.   );
  1189.  
  1190.   TPhysicalConnectorType = TOleEnum;
  1191. const
  1192.     PhysConn_Video_Tuner            = 1;
  1193.     PhysConn_Video_Composite            = PhysConn_Video_Tuner + 1;
  1194.     PhysConn_Video_SVideo            = PhysConn_Video_Composite + 1;
  1195.     PhysConn_Video_RGB                    = PhysConn_Video_SVideo + 1;
  1196.     PhysConn_Video_YRYBY            = PhysConn_Video_RGB + 1;
  1197.     PhysConn_Video_SerialDigital    = PhysConn_Video_YRYBY + 1;
  1198.     PhysConn_Video_ParallelDigital    = PhysConn_Video_SerialDigital + 1;
  1199.     PhysConn_Video_SCSI                    = PhysConn_Video_ParallelDigital + 1;
  1200.     PhysConn_Video_AUX                    = PhysConn_Video_SCSI + 1;
  1201.     PhysConn_Video_1394                    = PhysConn_Video_AUX + 1;
  1202.     PhysConn_Video_USB                    = PhysConn_Video_1394 + 1;
  1203.     PhysConn_Video_VideoDecoder            = PhysConn_Video_USB + 1;
  1204.     PhysConn_Video_VideoEncoder            = PhysConn_Video_VideoDecoder + 1;
  1205.     PhysConn_Video_SCART            = PhysConn_Video_VideoEncoder + 1;
  1206.     PhysConn_Video_Black            = PhysConn_Video_SCART + 1;
  1207.     PhysConn_Audio_Tuner            = $1000;
  1208.     PhysConn_Audio_Line                    = PhysConn_Audio_Tuner + 1;
  1209.     PhysConn_Audio_Mic                    = PhysConn_Audio_Line + 1;
  1210.     PhysConn_Audio_AESDigital            = PhysConn_Audio_Mic + 1;
  1211.     PhysConn_Audio_SPDIFDigital            = PhysConn_Audio_AESDigital + 1;
  1212.     PhysConn_Audio_SCSI                    = PhysConn_Audio_SPDIFDigital + 1;
  1213.     PhysConn_Audio_AUX                    = PhysConn_Audio_SCSI + 1;
  1214.     PhysConn_Audio_1394                    = PhysConn_Audio_AUX + 1;
  1215.     PhysConn_Audio_USB                    = PhysConn_Audio_1394 + 1;
  1216.     PhysConn_Audio_AudioDecoder            = PhysConn_Audio_USB + 1;
  1217.  
  1218. type
  1219.   IAMAnalogVideoDecoder = interface(IUnknown)
  1220.     ['{C6E13350-30AC-11d0-A18C-00A0C9118956}']
  1221.     function get_AvailableTVFormats(out lAnalogVideoStandard: Longint): HRESULT; stdcall;
  1222.     function put_TVFormat(lAnalogVideoStandard: Longint): HRESULT; stdcall;
  1223.     function get_TVFormat(out plAnalogVideoStandard: Longint): HRESULT; stdcall;
  1224.     function get_HorizontalLocked(out plLocked: Longint): HRESULT; stdcall;
  1225.     function put_VCRHorizontalLocking(lVCRHorizontalLocking: Longint): HRESULT; stdcall;
  1226.     function get_VCRHorizontalLocking(out plVCRHorizontalLocking: Longint): HRESULT; stdcall;
  1227.     function get_NumberOfLines(out plNumberOfLines: Longint): HRESULT; stdcall;
  1228.     function put_OutputEnable(lOutputEnable: LongBool): HRESULT; stdcall;
  1229.     function get_OutputEnable(out plOutputEnable: LongBool): HRESULT; stdcall;
  1230.   end;
  1231.  
  1232.   TVideoProcAmpProperty = (
  1233.     VideoProcAmp_Brightness,
  1234.     VideoProcAmp_Contrast,
  1235.     VideoProcAmp_Hue,
  1236.     VideoProcAmp_Saturation,
  1237.     VideoProcAmp_Sharpness,
  1238.     VideoProcAmp_Gamma,
  1239.     VideoProcAmp_ColorEnable,
  1240.     VideoProcAmp_WhiteBalance,
  1241.     VideoProcAmp_BacklightCompensation
  1242.   );
  1243.  
  1244.   TVideoProcAmpFlags = (
  1245.     VideoProcAmp_Flags_Manual,
  1246.     VideoProcAmp_Flags_Auto
  1247.   );
  1248.  
  1249.   IAMVideoProcAmp = interface(IUnknown)
  1250.     ['{C6E13360-30AC-11d0-A18C-00A0C9118956}']
  1251.     function GetRange(Property_: TVideoProcAmpProperty;
  1252.         out pMin, pMax, pSteppingDelta, pDefault, pCapsFlags: TVideoProcAmpFlags): HRESULT; stdcall;
  1253.     function Set_(Property_: TVideoProcAmpProperty; lValue: Longint;
  1254.         Flags: TVideoProcAmpFlags): HRESULT; stdcall;
  1255.     function Get(Property_: TVideoProcAmpProperty; out lValue: Longint;
  1256.         out Flags: TVideoProcAmpFlags): HRESULT; stdcall;
  1257.   end;
  1258.  
  1259.   TCameraControlProperty = (
  1260.     CameraControl_Pan,
  1261.     CameraControl_Tilt,
  1262.     CameraControl_Roll,
  1263.     CameraControl_Zoom,
  1264.     CameraControl_Exposure,
  1265.     CameraControl_Iris,
  1266.     CameraControl_Focus
  1267.   );
  1268.  
  1269.   TCameraControlFlags = (
  1270.     CameraControl_Flags_Manual,
  1271.     CameraControl_Flags_Auto
  1272.   );
  1273.  
  1274.   IAMCameraControl = interface(IUnknown)
  1275.     ['{C6E13370-30AC-11d0-A18C-00A0C9118956}']
  1276.     function GetRange(Property_: TCameraControlProperty;
  1277.         out pMin, pMax, pSteppingDelta, pDefault, pCapsFlags: Longint): HRESULT; stdcall;
  1278.     function Set_(Property_: TCameraControlProperty; lValue: Longint;
  1279.         Flags: TCameraControlFlags): HRESULT; stdcall;
  1280.     function Get(Property_: TCameraControlProperty; out lValue: Longint;
  1281.         out Flags: TCameraControlFlags): HRESULT; stdcall;
  1282.   end;
  1283.  
  1284. const
  1285.   VideoControlFlag_FlipHorizontal     = $1;
  1286.   VideoControlFlag_FlipVertical             = $2;
  1287.   VideoControlFlag_ExternalTriggerEnable = $4;
  1288.   VideoControlFlag_Trigger             = $8;
  1289.  
  1290. type  
  1291.   IAMVideoControl = interface(IUnknown)
  1292.     ['{6a2e0670-28e4-11d0-a18c-00a0c9118956}']
  1293.     function GetCaps(pPin: IPin; out pCapsFlags: Longint): HRESULT; stdcall;
  1294.     function SetMode(pPin: IPin; Mode: Longint): HRESULT; stdcall;
  1295.     function GetMode(pPin: IPin; out Mode: Longint): HRESULT; stdcall;
  1296.     function GetCurrentActualFrameRate(pPin: IPin; out ActualFrameRate: Int64): HRESULT; stdcall;
  1297.     function GetMaxAvailableFrameRate(pPin: IPin; iIndex: Longint; Dimensions: TSize; out MaxAvailableFrameRate: Int64): HRESULT; stdcall;
  1298.     function GetFrameRateList(pPin: IPin; iIndex: Longint; Dimensions: TSize; out ListSize: Longint; out FrameRates: PInt64): HRESULT; stdcall;
  1299.   end;
  1300.  
  1301.   IAMCrossbar = interface(IUnknown)
  1302.     ['{C6E13380-30AC-11d0-A18C-00A0C9118956}']
  1303.     function get_PinCounts(out OutputPinCount, InputPinCount: Longint): HRESULT; stdcall;
  1304.     function CanRoute(OutputPinIndex, InputPinIndex: Longint): HRESULT; stdcall;
  1305.     function Route(OutputPinIndex, InputPinIndex: Longint): HRESULT; stdcall;
  1306.     function get_IsRoutedTo(OutputPinIndex: Longint;
  1307.       out InputPinIndex: Longint): HRESULT; stdcall;
  1308.     function get_CrossbarPinInfo(IsInputPin: BOOL; PinIndex: Longint;
  1309.       out PinIndexRelated : longint; out PhysicalType: TPhysicalConnectorType): HRESULT; stdcall;
  1310.   end;
  1311.  
  1312. const
  1313.   AMTUNER_SUBCHAN_NO_TUNE = -2;
  1314.   AMTUNER_SUBCHAN_DEFAULT = -1;
  1315.  
  1316.   AMTUNER_HASNOSIGNALSTRENGTH = -1;
  1317.   AMTUNER_NOSIGNAL            = 0;
  1318.   AMTUNER_SIGNALPRESENT       = 1;
  1319.  
  1320.   AMTUNER_MODE_DEFAULT    = 0;
  1321.   AMTUNER_MODE_TV         = $1;
  1322.   AMTUNER_MODE_FM_RADIO   = $2;
  1323.   AMTUNER_MODE_AM_RADIO   = $4;
  1324.   AMTUNER_MODE_DSS        = $8;
  1325.  
  1326. type
  1327.   TAMTunerModeType = DWORD;
  1328.  
  1329.   TAMTunerEventType = (
  1330.     AMTUNER_EVENT_CHANGED
  1331.   );
  1332.   //AMTUNER_EVENT_CHANGED   = $1;
  1333.  
  1334.   IAMTunerNotification = interface;
  1335.  
  1336.   IAMTuner = interface(IUnknown)
  1337.     ['{211A8761-03AC-11d1-8D13-00AA00BD8339}']
  1338.     function put_Channel(lChannel, lVideoSubChannel, lAudioSubChannel: Longint): HRESULT; stdcall;
  1339.     function get_Channel(out lChannel, lVideoSubChannel, lAudioSubChannel: Longint): HRESULT; stdcall;
  1340.     function ChannelMinMax(out lChannelMin, lChannelMax: Longint): HRESULT; stdcall;
  1341.     function put_CountryCode(lCountryCode: Longint): HRESULT; stdcall;
  1342.     function get_CountryCode(out lCountryCode: Longint): HRESULT; stdcall;
  1343.     function put_TuningSpace(lTuningSpace: Longint): HRESULT; stdcall;
  1344.     function get_TuningSpace(out lTuningSpace: Longint): HRESULT; stdcall;
  1345.     function Logon(hCurrentUser: THandle): HRESULT; stdcall;
  1346.     function Logout: HRESULT; stdcall;
  1347.     function SignalPresent(out plSignalStrength: Longint): HRESULT; stdcall;
  1348.     function put_Mode(lMode: TAMTunerModeType): HRESULT; stdcall;
  1349.     function get_Mode(out plMode: TAMTunerModeType): HRESULT; stdcall;
  1350.     function GetAvailableModes(out plModes: Longint): HRESULT; stdcall;
  1351.     function RegisterNotificationCallBack(pNotify: IAMTunerNotification;
  1352.         lEvents: Longint): HRESULT; stdcall;
  1353.     function UnRegisterNotificationCallBack(pNotify: IAMTunerNotification): HRESULT; stdcall;
  1354.   end;
  1355.  
  1356.   IAMTunerNotification = interface(IUnknown)
  1357.     ['{211A8760-03AC-11d1-8D13-00AA00BD8339}']
  1358.     function OnEvent(Event: TAMTunerEventType): HRESULT; stdcall;
  1359.   end;
  1360.  
  1361.   IAMTVTuner = interface(IAMTuner)
  1362.     ['{211A8766-03AC-11d1-8D13-00AA00BD8339}']
  1363.     function get_AvailableTVFormats(out lAnalogVideoStandard: Longint): HRESULT; stdcall;
  1364.     function get_TVFormat(out plAnalogVideoStandard: Longint): HRESULT; stdcall;
  1365.     function AutoTune(lChannel: Longint; out plFoundSignal: Longint): HRESULT; stdcall;
  1366.     function StoreAutoTune: HRESULT; stdcall;
  1367.     function get_NumInputConnections(out plNumInputConnections: Longint): HRESULT; stdcall;
  1368.     function put_InputType(lIndex: Longint; InputType: TTunerInputType): HRESULT; stdcall;
  1369.     function get_InputType(lIndex: Longint; out InputType: TTunerInputType): HRESULT; stdcall;
  1370.     function put_ConnectInput(lIndex: Longint): HRESULT; stdcall;
  1371.     function get_ConnectInput(out plIndex: Longint): HRESULT; stdcall;
  1372.     function get_VideoFrequency(out lFreq: Longint): HRESULT; stdcall;
  1373.     function get_AudioFrequency(out lFreq: Longint): HRESULT; stdcall;
  1374.   end;
  1375.  
  1376.   IBPCSatelliteTuner = interface(IAMTuner)
  1377.     ['{211A8765-03AC-11d1-8D13-00AA00BD8339}']
  1378.     function get_DefaultSubChannelTypes(out plDefaultVideoType, plDefaultAudioType: Longint): HRESULT; stdcall;
  1379.     function put_DefaultSubChannelTypes(lDefaultVideoType, lDefaultAudioType: Longint): HRESULT; stdcall;
  1380.     function IsTapingPermitted: HRESULT; stdcall;
  1381.   end;
  1382.  
  1383. const
  1384.   AMTVAUDIO_MODE_MONO   = $1;
  1385.   AMTVAUDIO_MODE_STEREO = $2;
  1386.   AMTVAUDIO_MODE_LANG_A = $10;
  1387.   AMTVAUDIO_MODE_LANG_B = $20;
  1388.   AMTVAUDIO_MODE_LANG_C = $40;
  1389.  
  1390. type
  1391.   TAMTVAudioEventType = (
  1392.     AMTVAUDIO_EVENT_CHANGED
  1393.   );
  1394.  
  1395.   IAMTVAudio = interface(IUnknown)
  1396.     ['{83EC1C30-23D1-11d1-99E6-00A0C9560266}']
  1397.     function GetHardwareSupportedTVAudioModes(out plModes: Longint): HRESULT; stdcall;
  1398.     function GetAvailableTVAudioModes(out plModes: Longint): HRESULT; stdcall;
  1399.     function get_TVAudioMode(out plMode: Longint): HRESULT; stdcall;
  1400.     function put_TVAudioMode(lMode: Longint): HRESULT; stdcall;
  1401.     function RegisterNotificationCallBack(pNotify: IAMTunerNotification;
  1402.         lEvents: Longint): HRESULT; stdcall;
  1403.     function UnRegisterNotificationCallBack(pNotify: IAMTunerNotification): HRESULT; stdcall;
  1404.   end;
  1405.  
  1406.   IAMTVAudioNotification = interface(IUnknown)
  1407.     ['{83EC1C33-23D1-11D1-99E6-00A0C9560266}']
  1408.     function OnEvent(Event: TAMTVAudioEventType): HRESULT; stdcall;
  1409.   end;
  1410.  
  1411.   IAMAnalogVideoEncoder = interface(IUnknown)
  1412.     ['{C6E133B0-30AC-11d0-A18C-00A0C9118956}']
  1413.     function get_AvailableTVFormats(out lAnalogVideoStandard: Longint): HRESULT; stdcall;
  1414.     function put_TVFormat(lAnalogVideoStandard: Longint): HRESULT; stdcall;
  1415.     function get_TVFormat(out plAnalogVideoStandard: Longint): HRESULT; stdcall;
  1416.     function put_CopyProtection(lVideoCopyProtection: Longint): HRESULT; stdcall;
  1417.     function get_CopyProtection(out lVideoCopyProtection: Longint): HRESULT; stdcall;
  1418.     function put_CCEnable(lCCEnable: LongBool): HRESULT; stdcall;
  1419.     function get_CCEnable(out lCCEnable: LongBool): HRESULT; stdcall;
  1420.   end;
  1421.  
  1422.   TAMProperty_Pin = (
  1423.     AMPROPERTY_PIN_CATEGORY,
  1424.     AMPROPERTY_PIN_MEDIUM
  1425.   );
  1426.  
  1427. const
  1428.   KSPROPERTY_SUPPORT_GET = 1;
  1429.   KSPROPERTY_SUPPORT_SET = 2;
  1430.  
  1431. type
  1432.   IKsPropertySet = interface(IUnknown)
  1433.     ['{31EFAC30-515C-11d0-A9AA-00AA0061BE93}']
  1434.     function Set_(const guidPropSet: TGUID; dwPropID: TAMProperty_Pin;
  1435.       pInstanceData: pointer; cbInstanceData: DWORD; pPropData: pointer; cbPropData: DWORD): HRESULT; stdcall;
  1436.     function Get(const guidPropSet: TGUID; dwPropID: TAMProperty_Pin;
  1437.       pInstanceData: pointer; cbInstanceData: DWORD; out pPropData ; cbPropData: DWORD;
  1438.       out pcbReturned: DWORD): HRESULT; stdcall;
  1439.     function QuerySupported(const guidPropSet: TGUID; dwPropID: TAMProperty_Pin;
  1440.       out pTypeSupport: DWORD): HRESULT; stdcall;
  1441.   end;
  1442.  
  1443.   IMediaPropertyBag = interface(IPropertyBag)
  1444.     ['{6025A880-C0D5-11D0-BD4E-00A0C911CE86}']
  1445.     function EnumProperty(iProperty: ULONG; var pvarPropertyName,
  1446.         pvarPropertyValue: OleVariant): HRESULT; stdcall;
  1447.   end;
  1448.  
  1449.   IPersistMediaPropertyBag = interface(IPersist)
  1450.      ['{5738E040-B67F-11d0-BD4D-00A0C911CE86}']
  1451.      function InitNew: HRESULT; stdcall;
  1452.      function Load(pPropBag: IMediaPropertyBag; pErrorLog: IErrorLog): HRESULT; stdcall;
  1453.      function Save(pPropBag: IMediaPropertyBag; fClearDirty, fSaveAllProperties: BOOL): HRESULT; stdcall;
  1454.   end;
  1455.  
  1456.   //Deprecated Interface
  1457.   IAMPhysicalPinInfo = interface(IUnknown)
  1458.     ['{F938C991-3029-11CF-8C44-00AA006B6814}']
  1459.     function GetPhysicalType(out pType: Longint; out ppszType: PWideChar): HRESULT; stdcall;
  1460.   end;
  1461.  
  1462.   IAMExtDevice = interface(IUnknown)
  1463.     ['{B5730A90-1A2C-11CF-8C23-00AA006B6814}']
  1464.     function GetCapability(Capability: Longint; out pValue: Longint; out pdblValue: double): HRESULT; stdcall;
  1465.     function get_ExternalDeviceID(out ppszData: PWideChar): HRESULT; stdcall;
  1466.     function get_ExternalDeviceVersion(out ppszData: PWideChar): HRESULT; stdcall;
  1467.     function put_DevicePower(PowerMode: Longint): HRESULT; stdcall;
  1468.     function get_DevicePower(out pPowerMode: Longint): HRESULT; stdcall;
  1469.     function Calibrate(hEvent: THandle; Mode: Longint; out pStatus: Longint): HRESULT; stdcall;
  1470.     function put_DevicePort(DevicePort: Longint): HRESULT; stdcall;
  1471.     function get_DevicePort(out pDevicePort: Longint): HRESULT; stdcall;
  1472.   end;
  1473.  
  1474.   IAMExtTransport = interface(IUnknown)
  1475.     ['{A03CD5F0-3045-11CF-8C44-00AA006B6814}']
  1476.     function GetCapability(Capability: Longint; out pValue: Longint; out pdblValue: double): HRESULT; stdcall;
  1477.     function put_MediaState(State: Longint): HRESULT; stdcall;
  1478.     function get_MediaState(out pState: Longint): HRESULT; stdcall;
  1479.     function put_LocalControl(State: Longint): HRESULT; stdcall;
  1480.     function get_LocalControl(out pState: Longint): HRESULT; stdcall;
  1481.     function GetStatus(StatusItem: Longint; out pValue: Longint): HRESULT; stdcall;
  1482.     function GetTransportBasicParameters(Param: Longint; var pValue: Longint; ppszData: pointer): HRESULT; stdcall;
  1483.     function SetTransportBasicParameters(Param: Longint; Value: Longint; pszData: PWideChar): HRESULT; stdcall;
  1484.     function GetTransportVideoParameters(Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1485.     function SetTransportVideoParameters(Param: Longint; Value: Longint): HRESULT; stdcall;
  1486.     function GetTransportAudioParameters(Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1487.     function SetTransportAudioParameters(Param: Longint; Value: Longint): HRESULT; stdcall;
  1488.     function put_Mode(Mode: Longint): HRESULT; stdcall;
  1489.     function get_Mode(out pMode: Longint): HRESULT; stdcall;
  1490.     function put_Rate(dblRate: double): HRESULT; stdcall;
  1491.     function get_Rate(out pdblRate: double): HRESULT; stdcall;
  1492.     function GetChase(out pEnabled, pOffset: Longint; var phEvent: THandle): HRESULT; stdcall;
  1493.     function SetChase(Enable, Offset: Longint; hEvent: THandle): HRESULT; stdcall;
  1494.     function GetBump(out pSpeed, pDuration: Longint): HRESULT; stdcall;
  1495.     function SetBump(Speed, Duration: Longint): HRESULT; stdcall;
  1496.     function get_AntiClogControl(out pEnabled: Longint): HRESULT; stdcall;
  1497.     function put_AntiClogControl(Enable: Longint): HRESULT; stdcall;
  1498.     function GetEditPropertySet(EditID: Longint; out pState: Longint): HRESULT; stdcall;
  1499.     function SetEditPropertySet(var pEditID: Longint; State: Longint): HRESULT; stdcall;
  1500.     function GetEditProperty(EditID, Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1501.     function SetEditProperty(EditID, Param, Value: Longint): HRESULT; stdcall;
  1502.     function get_EditStart(out pValue: Longint): HRESULT; stdcall;
  1503.     function put_EditStart(Value: Longint): HRESULT; stdcall;
  1504.   end;
  1505.  
  1506.   TTimeCode = record
  1507.     wFrameRate: Word;
  1508.     wFrameFract: Word;
  1509.     dwFrames: DWORD;
  1510.   end;
  1511.  
  1512.   TTimeCode_Sample = record
  1513.     qwTick: Int64;
  1514.     timecode: TTimeCode;
  1515.     dwUser: DWORD;
  1516.     dwFlags: DWORD;
  1517.   end;
  1518.  
  1519.   IAMTimecodeReader = interface(IUnknown)
  1520.     ['{9B496CE1-811B-11CF-8C77-00AA006B6814}']
  1521.     function GetTCRMode(Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1522.     function SetTCRMode(Param: Longint; Value: Longint): HRESULT; stdcall;
  1523.     function put_VITCLine(Line: Longint): HRESULT; stdcall;
  1524.     function get_VITCLine(out pLine: Longint): HRESULT; stdcall;
  1525.     function GetTimecode(out pTimecodeSample: TTimeCode_Sample): HRESULT; stdcall;
  1526.   end;
  1527.  
  1528.   IAMTimecodeGenerator = interface(IUnknown)
  1529.     ['{9B496CE0-811B-11CF-8C77-00AA006B6814}']
  1530.     function GetTCGMode(Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1531.     function SetTCGMode(Param: Longint; Value: Longint): HRESULT; stdcall;
  1532.     function put_VITCLine(Line: Longint): HRESULT; stdcall;
  1533.     function get_VITCLine(out Line: Longint): HRESULT; stdcall;
  1534.     function SetTimecode(var pTimecodeSample: TTimeCode_Sample): HRESULT; stdcall;
  1535.     function GetTimecode(out pTimecodeSample: TTimeCode_Sample): HRESULT; stdcall;
  1536.   end;
  1537.  
  1538.   IAMTimecodeDisplay = interface(IUnknown)
  1539.     ['{9B496CE2-811B-11CF-8C77-00AA006B6814}']
  1540.     function GetTCDisplayEnable(out pState: Longint): HRESULT; stdcall;
  1541.     function SetTCDisplayEnable(State: Longint): HRESULT; stdcall;
  1542.     function GetTCDisplay(Param: Longint; out pValue: Longint): HRESULT; stdcall;
  1543.     function SetTCDisplay(Param, Value: Longint): HRESULT; stdcall;
  1544.   end;
  1545.  
  1546.   //Deprecated Interface
  1547.   IAMDevMemoryAllocator = interface(IUnknown)
  1548.     ['{C6545BF0-E76B-11D0-BD52-00A0C911CE86}']
  1549.     function GetInfo(out pdwcbTotalFree, pdwcbLargestFree, pdwcbTotalMemory, pdwcbMinimumChunk: DWORD): HRESULT; stdcall;
  1550.     function CheckMemory(pBuffer: Pointer): HRESULT; stdcall;
  1551.     function Alloc(out ppBuffer: Pointer; var pdwcbBuffer: DWORD): HRESULT; stdcall;
  1552.     function Free(pBuffer: Pointer): HRESULT; stdcall;
  1553.     function GetDevMemoryObject(out ppUnkInnner: IUnknown; pUnkOuter: IUnknown): HRESULT; stdcall;
  1554.   end;
  1555.  
  1556.   //Deprecated Interface
  1557.   IAMDevMemoryControl = interface(IUnknown)
  1558.     ['{C6545BF1-E76B-11D0-BD52-00A0C911CE86}']
  1559.     function QueryWriteSync: HRESULT; stdcall;
  1560.     function WriteSync: HRESULT; stdcall;
  1561.     function GetDevId(out pdwDevId: DWORD): HRESULT; stdcall;
  1562.   end;
  1563.  
  1564. const
  1565.   AMSTREAMSELECTINFO_ENABLED     = $1;
  1566.   AMSTREAMSELECTINFO_EXCLUSIVE   = $2;
  1567.  
  1568.   AMSTREAMSELECTENABLE_ENABLE    = $1;
  1569.   AMSTREAMSELECTENABLE_ENABLEALL = $2;
  1570.  
  1571. type
  1572.   IAMStreamSelect = interface(IUnknown)
  1573.     ['{C1960960-17F5-11D1-ABE1-00A0C905F375}']
  1574.     function Count(out pcStreams: DWORD): HRESULT; stdcall;
  1575.     function Info(lIndex: Longint; out ppmt: PAM_Media_Type;
  1576.         out pdwFlags: DWORD; out plcid: LCID; out pdwGroup: DWORD;
  1577.         out ppszName: PWCHAR; out ppObject: IUnknown; out ppUnk : IUnknown): HRESULT; stdcall;
  1578.     function Enable(lIndex: Longint; dwFlags: DWORD): HRESULT; stdcall;
  1579.   end;
  1580.  
  1581.   IAMResourceControl = interface(IUnknown)
  1582.     ['{8389d2d0-77d7-11d1-abe6-00a0c905f375}']
  1583.     function Reserve(dwFlags: DWORD; var pvReserved: pointer): HRESULT; stdcall;
  1584.   end;
  1585.  
  1586.   IAMClockAdjust = interface(IUnknown)
  1587.     ['{4d5466b0-a49c-11d1-abe8-00a0c905f375}']
  1588.     function SetClockDelta(rtDelta: TREFERENCE_TIME): HRESULT; stdcall;
  1589.   end;
  1590.  
  1591. const
  1592.   AM_FILTER_MISC_FLAGS_IS_RENDERER    = $1;
  1593.   AM_FILTER_MISC_FLAGS_IS_SOURCE    = $2;
  1594.  
  1595. type
  1596.   IAMFilterMiscFlags = interface(IUnknown)
  1597.     ['{2dd74950-a890-11d1-abe8-00a0c905f375}']
  1598.     function GetMiscFlags: ULONG; stdcall;
  1599.   end;
  1600.  
  1601.   IDrawVideoImage = interface(IUnknown)
  1602.     ['{48efb120-ab49-11d2-aed2-00a0c995e8d5}']
  1603.     function DrawVideoImageBegin: HRESULT; stdcall;
  1604.     function DrawVideoImageEnd: HRESULT; stdcall;
  1605.     function DrawVideoImageDraw(hdc: HDC; lprcSrc, lprcDst: PRECT): HRESULT; stdcall;
  1606.   end;
  1607.  
  1608.   IDecimateVideoImage = interface(IUnknown)
  1609.     ['{2e5ea3e0-e924-11d2-b6da-00a0c995e8df}']
  1610.     function SetDecimationImageSize(lWidth, lHeight: Longint):HRESULT; stdcall;
  1611.     function ResetDecimationImageSize: HRESULT; stdcall;
  1612.   end;
  1613.  
  1614.   TDECIMATION_USAGE = (
  1615.         DECIMATION_LEGACY,
  1616.     DECIMATION_USE_DECODER_ONLY,
  1617.     DECIMATION_USE_VIDEOPORT_ONLY,
  1618.     DECIMATION_USE_OVERLAY_ONLY,
  1619.     DECIMATION_DEFAULT
  1620.         );
  1621.  
  1622.   IAMVideoDecimationProperties = interface(IUnknown)
  1623.     ['{60d32930-13da-11d3-9ec6-c4fcaef5c7be}']
  1624.     function QueryDecimationUsage(out lpUsage: TDECIMATION_USAGE):HRESULT; stdcall;
  1625.     function SetDecimationUsage(Usage: TDECIMATION_USAGE):HRESULT; stdcall;
  1626.   end;
  1627.  
  1628. const
  1629.      AM_PUSHSOURCECAPS_INTERNAL_RM    = $1;
  1630.      AM_PUSHSOURCECAPS_NOT_LIVE            = $2;
  1631.      AM_PUSHSOURCECAPS_PRIVATE_CLOCK    = $4;
  1632.      AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = $00001;
  1633.  
  1634. type
  1635.   IAMLatency = interface(IUnknown)
  1636.     ['{62EA93BA-EC62-11d2-B770-00C04FB6BD3D}']
  1637.     function GetLatency(var prtLatency: TREFERENCE_TIME): HRESULT; stdcall;
  1638.   end;
  1639.  
  1640.   IAMPushSource = interface(IAMLatency)
  1641.     ['{F185FE76-E64E-11d2-B76E-00C04FB6BD3D}']
  1642.     function GetPushSourceFlags(out pFlags: ULONG): HRESULT; stdcall;
  1643.     function SetPushSourceFlags(Flags: ULONG): HRESULT; stdcall;
  1644.     function SetStreamOffset(rtOffset: TREFERENCE_TIME): HRESULT; stdcall;
  1645.     function GetStreamOffset(out prtOffset: TREFERENCE_TIME): HRESULT; stdcall;
  1646.     function GetMaxStreamOffset(out prtMaxOffset: TREFERENCE_TIME): HRESULT; stdcall;
  1647.     function SetMaxStreamOffset(rtMaxOffset: TREFERENCE_TIME): HRESULT; stdcall;
  1648.   end;
  1649.  
  1650.   IAMDeviceRemoval = interface(IUnknown)
  1651.     ['{f90a6130-b658-11d2-ae49-0000f8754b99}']
  1652.     function DeviceInfo(out pclsidInterfaceClass: TGUID;
  1653.              out pwszSymbolicLink: PWideChar): HRESULT; stdcall;
  1654.     function Reassociate: HRESULT; stdcall;
  1655.     function Disassociate: HRESULT; stdcall;
  1656.   end;
  1657.  
  1658. type
  1659.   TDVInfo = record
  1660.     //for 1st 5/6 DIF seq.
  1661.     dwDVAAuxSrc: DWORD;
  1662.     dwDVAAuxCtl: DWORD;
  1663.     //for 2nd  5/6 DIF seq.
  1664.     dwDVAAuxSrc1: DWORD;
  1665.     dwDVAAuxCtl1: DWORD;
  1666.     //for video information
  1667.     dwDVVAuxSrc: DWORD;
  1668.     dwDVVAuxCtl: DWORD;
  1669.     dwDVReserved: array[0..1] of DWORD;
  1670.   end;
  1671.  
  1672. const
  1673. //DVENCODERRESOLUTION
  1674.         DVENCODERRESOLUTION_720x480    = 2012;
  1675.     DVENCODERRESOLUTION_360x240    = 2013;
  1676.     DVENCODERRESOLUTION_180x120    = 2014;
  1677.     DVENCODERRESOLUTION_88x60    = 2015;
  1678.  
  1679. //DVENCODERVIDEOFORMAT
  1680.         DVENCODERVIDEOFORMAT_NTSC    = 2000;
  1681.     DVENCODERVIDEOFORMAT_PAL    = 2001;
  1682.  
  1683. //DVENCODERFORMAT
  1684.         DVENCODERFORMAT_DVSD            = 2007;
  1685.     DVENCODERFORMAT_DVHD            = 2008;
  1686.     DVENCODERFORMAT_DVSL            = 2009;
  1687.  
  1688. type
  1689.   IDVEnc = interface(IUnknown)
  1690.     ['{d18e17a0-aacb-11d0-afb0-00aa00b67a42}']
  1691.     function get_IFormatResolution(out VideoFormat, DVFormat, Resolution: integer;
  1692.              fDVInfo: ByteBool; out sDVInfo: TDVINFO): HRESULT; stdcall;
  1693.     function put_IFormatResolution(VideoFormat, DVFormat, Resolution: integer;
  1694.              fDVInfo: ByteBool; var sDVInfo: TDVINFO): HRESULT; stdcall;
  1695.   end;
  1696.  
  1697. const
  1698. //DVDECODERRESOLUTION
  1699.         DVDECODERRESOLUTION_720x480    = 1000;
  1700.     DVDECODERRESOLUTION_360x240    = 1001;
  1701.     DVDECODERRESOLUTION_180x120    = 1002;
  1702.     DVDECODERRESOLUTION_88x60    = 1003;
  1703.  
  1704. //DVRESOLUTION
  1705.         DVRESOLUTION_FULL            = 1000;
  1706.     DVRESOLUTION_HALF            = 1001;
  1707.     DVRESOLUTION_QUARTER            = 1002;
  1708.     DVRESOLUTION_DC                    = 1003;
  1709.  
  1710. type
  1711.   IIPDVDec = interface(IUnknown)
  1712.     ['{b8e8bd60-0bfe-11d0-af91-00aa00b67a42}']
  1713.     function get_IPDisplay(out displayPix : integer): HRESULT; stdcall;
  1714.     function put_IPDisplay(displayPix: integer): HRESULT; stdcall;
  1715.   end;
  1716.  
  1717.   IDVSplitter = interface(IUnknown)
  1718.     ['{92a3a302-da7c-4a1f-ba7e-1802bb5d2d02}']
  1719.     function DiscardAlternateVideoFrames(nDiscard: integer): HRESULT; stdcall;
  1720.   end;
  1721.  
  1722. //_AM_AUDIO_RENDERER_STAT_PARAM
  1723. const
  1724.         AM_AUDREND_STAT_PARAM_BREAK_COUNT            = 1;
  1725.     AM_AUDREND_STAT_PARAM_SLAVE_MODE            = AM_AUDREND_STAT_PARAM_BREAK_COUNT + 1;
  1726.     AM_AUDREND_STAT_PARAM_SILENCE_DUR            = AM_AUDREND_STAT_PARAM_SLAVE_MODE + 1;
  1727.     AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR            = AM_AUDREND_STAT_PARAM_SILENCE_DUR + 1;
  1728.     AM_AUDREND_STAT_PARAM_DISCONTINUITIES            = AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR + 1;
  1729.     AM_AUDREND_STAT_PARAM_SLAVE_RATE             = AM_AUDREND_STAT_PARAM_DISCONTINUITIES + 1;
  1730.     AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR    = AM_AUDREND_STAT_PARAM_SLAVE_RATE + 1;
  1731.     AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR    = AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR + 1;
  1732.     AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR    = AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR + 1;
  1733.     AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR            = AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR + 1;
  1734.     AM_AUDREND_STAT_PARAM_BUFFERFULLNESS            = AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR + 1;
  1735.     AM_AUDREND_STAT_PARAM_JITTER                    = AM_AUDREND_STAT_PARAM_BUFFERFULLNESS + 1;
  1736.  
  1737. type
  1738.   IAMAudioRendererStats = interface(IUnknown)
  1739.     ['{22320CB2-D41A-11d2-BF7C-D7CB9DF0BF93}']
  1740.     function GetStatParam(dwParam: DWORD; out pdwParam1, pdwParam2: DWORD): HRESULT; stdcall;
  1741.   end;
  1742.  
  1743. //AM_INTF_SEARCH_FLAGS
  1744. const
  1745.         AM_INTF_SEARCH_INPUT_PIN    = $1;
  1746.     AM_INTF_SEARCH_OUTPUT_PIN    = $2;
  1747.     AM_INTF_SEARCH_FILTER            = $4;
  1748.  
  1749. type
  1750.   IAMGraphStreams = interface(IUnknown)
  1751.     ['{632105FA-072E-11d3-8AF9-00C04FB6BD3D}']
  1752.     function FindUpstreamInterface(pPin: IPin; const riid: TGUID; out ppvInterface;
  1753.              dwFlags: DWORD): HRESULT; stdcall;
  1754.     function SyncUsingStreamOffset(bUseStreamOffset: BOOL): HRESULT; stdcall;
  1755.     function SetMaxGraphLatency(rtMaxGraphLatency: TREFERENCE_TIME): HRESULT; stdcall;
  1756.   end;
  1757.  
  1758. //AMOVERLAYFX
  1759. const
  1760.         AMOVERFX_NOFX              = 0;
  1761.     AMOVERFX_MIRRORLEFTRIGHT  = $2;
  1762.     AMOVERFX_MIRRORUPDOWN      = $4;
  1763.     AMOVERFX_DEINTERLACE      = $8;
  1764.  
  1765. type
  1766.   IAMOverlayFX = interface(IUnknown)
  1767.     ['{62fae250-7e65-4460-bfc9-6398b322073c}']
  1768.     function QueryOverlayFXCaps(out lpdwOverlayFXCaps: DWORD): HRESULT; stdcall;
  1769.     function SetOverlayFX(dwOverlayFX: DWORD): HRESULT; stdcall;
  1770.     function GetOverlayFX(out lpdwOverlayFX: DWORD): HRESULT; stdcall;
  1771.   end;
  1772.  
  1773.   IAMOpenProgress = interface(IUnknown)
  1774.     ['{8E1C39A1-DE53-11cf-AA63-0080C744528D}']
  1775.     function QueryProgress(out pllTotal, pllCurrent: int64): HRESULT; stdcall;
  1776.     function AbortOperation: HRESULT; stdcall;
  1777.   end;
  1778.  
  1779.   IMpeg2Demultiplexer = interface(IUnknown)
  1780.     ['{436eee9c-264f-4242-90e1-4e330c107512}']
  1781.     function CreateOutputPin(var pMediaType: TAM_MEDIA_TYPE; pszPinName: PWideChar;
  1782.              out ppIPin: IPin): HRESULT; stdcall;
  1783.     function SetOutputPinMediaType(pszPinName: PWideChar; var pMediaType: TAM_MEDIA_TYPE): HRESULT; stdcall;
  1784.     function DeleteOutputPin(pszPinName: PWideChar): HRESULT; stdcall;
  1785.   end;
  1786.  
  1787. const
  1788.      MPEG2_PROGRAM_STREAM_MAP           =      $00000000;
  1789.      MPEG2_PROGRAM_ELEMENTARY_STREAM    =      $00000001;
  1790.      MPEG2_PROGRAM_DIRECTORY_PES_PACKET =      $00000002;
  1791.      MPEG2_PROGRAM_PACK_HEADER          =      $00000003;
  1792.      MPEG2_PROGRAM_PES_STREAM           =      $00000004;
  1793.      MPEG2_PROGRAM_SYSTEM_HEADER        =      $00000005;
  1794.      SUBSTREAM_FILTER_VAL_NONE          =      $10000000;
  1795.  
  1796. type
  1797.   PSTREAM_ID_MAP = ^TSTREAM_ID_MAP;
  1798.   TSTREAM_ID_MAP = record
  1799.     stream_id             : ULONG;
  1800.     dwMediaSampleContent  : DWORD;
  1801.     ulSubstreamFilterValue: ULONG;
  1802.     iDataOffset           : integer;
  1803.     end;
  1804.  
  1805.   IEnumStreamIdMap = interface(IUnknown)
  1806.     ['{945C1566-6202-46fc-96C7-D87F289C6534}']
  1807.     function Next(cRequest: ULONG; var pStreamIdMap: PSTREAM_ID_MAP;
  1808.              out pcReceived: ULONG): HRESULT; stdcall;
  1809.     function Skip(cRecords: ULONG): HRESULT; stdcall;
  1810.     function Reset: HRESULT; stdcall;
  1811.     function Clone(out ppIEnumStreamIdMap: IEnumStreamIdMap): HRESULT; stdcall;
  1812.   end;
  1813.  
  1814.   IMPEG2StreamIdMap = interface(IUnknown)
  1815.     ['{D0E04C47-25B8-4369-925A-362A01D95444}']
  1816.     function MapStreamId(ulStreamId: ULONG; MediaSampleContent: DWORD;
  1817.              ulSubstreamFilterValue: ULONG; iDataOffset: integer): HRESULT; stdcall;
  1818.     function UnmapStreamId(culStreamId: ULONG; var pulStreamId: ULONG): HRESULT; stdcall;
  1819.     function EnumStreamIdMap(out ppIEnumStreamIdMap: IEnumStreamIdMap): HRESULT; stdcall;
  1820.   end;
  1821.  
  1822. type
  1823.   IAMovie = interface(IFilterGraph)
  1824.     ['{359ACE10-7688-11CF-8B23-00805F6CEF60}']
  1825.     function Connect(ppinOut, ppinIn: IPin): HRESULT; stdcall;
  1826.     function Render(ppinOut: IPin): HRESULT; stdcall;
  1827.     function Run: HRESULT; stdcall;
  1828.     function Pause: HRESULT; stdcall;
  1829.     function Stop: HRESULT; stdcall;
  1830.     function GetState(msTimeout: DWORD; out pfs: TFilter_State): HRESULT; stdcall;
  1831.     function RenderFile(strFilename: PWideChar): HRESULT; stdcall;
  1832.     function AddSourceFilter(strFilename: PWideChar; out ppUnk: IBaseFilter): HRESULT; stdcall;
  1833.     function GetEventHandle(out hEvent: THandle): HRESULT; stdcall;
  1834.     function GetEvent(out lEventCode, lParam1, lParam2: Longint; msTimeout: DWORD): HRESULT; stdcall;
  1835.     function WaitForCompletion(msTimeout: DWORD; out pEvCode: Longint): HRESULT; stdcall;
  1836.     function CancelDefaultHandling(lEvCode: Longint): HRESULT; stdcall;
  1837.     function RestoreDefaultHandling(lEvCode: Longint): HRESULT; stdcall;
  1838.     function get_Duration(out plength: TRefTime): HRESULT; stdcall;
  1839.     function put_CurrentPosition(llTime: TRefTime): HRESULT; stdcall;
  1840.     function get_CurrentPosition(out pllTime: TRefTime): HRESULT; stdcall;
  1841.     function get_StopTime(out pllTime: TRefTime): HRESULT; stdcall;
  1842.     function put_StopTime(llTime: TRefTime): HRESULT; stdcall;
  1843.     function get_PrerollTime(out pllTime: TRefTime): HRESULT; stdcall;
  1844.     function put_PrerollTime(llTime: TRefTime): HRESULT; stdcall;
  1845.     function put_Rate(dRate: double): HRESULT; stdcall;
  1846.     function get_Rate(out pdRate: double): HRESULT; stdcall;
  1847.     function RemoveAllFilters: HRESULT; stdcall;
  1848.     function Play: HRESULT; stdcall;
  1849.     function PlayFile(strFilename: PWideChar): HRESULT; stdcall;
  1850.     function EnumFiltersByInterface(const riid: TGUID;
  1851.         out ppEnum: IEnumFilters): HRESULT; stdcall;
  1852.     function EnumPins(out ppEnum: IEnumPins): HRESULT; stdcall;
  1853.     function EnumPinsIn(out ppEnum: IEnumPins): HRESULT; stdcall;
  1854.     function EnumPinsOut(out ppEnum: IEnumPins): HRESULT; stdcall;
  1855.     function RenderAll: HRESULT; stdcall;
  1856.     function RenderNewFile(strFilename: PWideChar): HRESULT; stdcall;
  1857.     function FreeEventParams(lEvCode, lParam1, lParam2: Longint): HRESULT; stdcall;
  1858.   end;
  1859.  
  1860. const
  1861.   CDEF_CLASS_DEFAULT        = $1000;
  1862.   CDEF_BYPASS_CLASS_MANAGER = $2000;
  1863.  
  1864. type
  1865.   ICreateDevEnum = interface(IUnknown)
  1866.     ['{29840822-5B84-11D0-BD3B-00A0C911CE86}']
  1867.     function CreateClassEnumerator(const clsidDeviceClass: TGUID;
  1868.         out ppEnumMoniker: IEnumMoniker; dwFlags: DWORD): HRESULT; stdcall;
  1869.   end;
  1870.  
  1871.   IFilterMapper3 = interface(IFilterMapper2)
  1872.     ['{b79bb0b1-33c1-11d1-abe1-00a0c905f375}']
  1873.     function GetICreateDevEnum(out ppEnum: ICreateDevEnum): HRESULT; stdcall;
  1874.   end;
  1875.  
  1876. //replacement for DVD_TextStringType in GetDVDTextStringAsNative, GetDVDTextStringAsUnicode
  1877. type
  1878.   TDVD_TextStringType = TOleEnum;
  1879. const
  1880.   DVD_Struct_Volume = $00000001;
  1881.   DVD_Struct_Title = $00000002;
  1882.   DVD_Struct_ParentalID = $00000003;
  1883.   DVD_Struct_PartOfTitle = $00000004;
  1884.   DVD_Struct_Cell = $00000005;
  1885.   DVD_Stream_Audio = $00000010;
  1886.   DVD_Stream_Subpicture = $00000011;
  1887.   DVD_Stream_Angle = $00000012;
  1888.   DVD_Channel_Audio = $00000020;
  1889.   DVD_General_Name = $00000030;
  1890.   DVD_General_Comments = $00000031;
  1891.   DVD_Title_Series = $00000038;
  1892.   DVD_Title_Movie = $00000039;
  1893.   DVD_Title_Video = $0000003A;
  1894.   DVD_Title_Album = $0000003B;
  1895.   DVD_Title_Song = $0000003C;
  1896.   DVD_Title_Other = $0000003F;
  1897.   DVD_Title_Sub_Series = $00000040;
  1898.   DVD_Title_Sub_Movie = $00000041;
  1899.   DVD_Title_Sub_Video = $00000042;
  1900.   DVD_Title_Sub_Album = $00000043;
  1901.   DVD_Title_Sub_Song = $00000044;
  1902.   DVD_Title_Sub_Other = $00000047;
  1903.   DVD_Title_Orig_Series = $00000048;
  1904.   DVD_Title_Orig_Movie = $00000049;
  1905.   DVD_Title_Orig_Video = $0000004A;
  1906.   DVD_Title_Orig_Album = $0000004B;
  1907.   DVD_Title_Orig_Song = $0000004C;
  1908.   DVD_Title_Orig_Other = $0000004F;
  1909.   DVD_Other_Scene = $00000050;
  1910.   DVD_Other_Cut = $00000051;
  1911.   DVD_Other_Take = $00000052;
  1912.  
  1913. type  
  1914. TDVD_OPTION_FLAG = (
  1915.   DVD_Option_Invalid,//type compatibility
  1916.   DVD_ResetOnStop,
  1917.   DVD_NotifyParentalLevelChange,
  1918.   DVD_HMSF_TimeCodeEvents
  1919. );
  1920.  
  1921. type
  1922.   TDVD_Domain = (
  1923.     DVD_DOMAIN_FirstPlay,
  1924.     DVD_DOMAIN_VideoManagerMenu,
  1925.     DVD_DOMAIN_VideoTitleSetMenu,
  1926.     DVD_DOMAIN_Title,
  1927.     DVD_DOMAIN_Stop
  1928.   );
  1929.  
  1930.   TDVD_Menu_ID = (
  1931.     DVD_MENU_INVALID_0,
  1932.     DVD_MENU_INVALID_1,
  1933.     DVD_MENU_Title,
  1934.     DVD_MENU_Root,
  1935.     DVD_MENU_Subpicture,
  1936.     DVD_MENU_Audio,
  1937.     DVD_MENU_Angle,
  1938.     DVD_MENU_Chapter
  1939.   );
  1940.  
  1941.   TDVD_Disc_Side = (
  1942.     DVD_SIDE_INVALID_0,
  1943.     DVD_SIDE_A,
  1944.     DVD_SIDE_B
  1945.   );
  1946.  
  1947.   TDVD_PREFERRED_Display_Mode = (
  1948.     DISPLAY_CONTENT_DEFAULT,
  1949.     DISPLAY_16x9,
  1950.     DISPLAY_4x3_PANSCAN_PREFERRED,
  1951.     DISPLAY_4x3_LETTERBOX_PREFERRED
  1952.   );
  1953.  
  1954.   TDVD_VIDEO_COMPRESSION = (
  1955.     DVD_VideoCompression_Other,
  1956.     DVD_VideoCompression_MPEG1,
  1957.     DVD_VideoCompression_MPEG22
  1958.   );
  1959.  
  1960.   TDVD_AUDIO_APPMODE = (
  1961.     DVD_AudioMode_None,
  1962.     DVD_AudioMode_Karaoke,
  1963.     DVD_AudioMode_Surround,
  1964.     DVD_AudioMode_Other
  1965.     );
  1966.  
  1967.   TDVD_AUDIO_FORMAT = (
  1968.     DVD_AudioFormat_AC3,
  1969.     DVD_AudioFormat_MPEG1,
  1970.     DVD_AudioFormat_MPEG1_DRC,
  1971.     DVD_AudioFormat_MPEG2,
  1972.     DVD_AudioFormat_MPEG2_DRC,
  1973.     DVD_AudioFormat_LPCM,
  1974.     DVD_AudioFormat_DTS,
  1975.     DVD_AudioFormat_SDDS,
  1976.     DVD_AudioFormat_Other
  1977.     );
  1978. // DVD_KARAOKE_DOWNMIX
  1979. const
  1980.     DVD_Mix_0to0    = $1   ;
  1981.     DVD_Mix_1to0    = $2   ;
  1982.     DVD_Mix_2to0    = $4   ;
  1983.     DVD_Mix_3to0    = $8   ;
  1984.     DVD_Mix_4to0    = $10  ;
  1985.     DVD_Mix_Lto0    = $20  ;
  1986.     DVD_Mix_Rto0    = $40  ;
  1987.     DVD_Mix_0to1    = $100 ;
  1988.     DVD_Mix_1to1    = $200 ;
  1989.     DVD_Mix_2to1    = $400 ;
  1990.     DVD_Mix_3to1    = $800 ;
  1991.     DVD_Mix_4to1    = $1000;
  1992.     DVD_Mix_Lto1    = $2000;
  1993.     DVD_Mix_Rto1    = $4000;
  1994.  
  1995. type        
  1996.   TDVD_AUDIO_LANG_EXT = (
  1997. //...modified by henri (before DVD_AUD_EXT_NotSpecified0 oups)
  1998.     DVD_AUD_EXT_NotSpecified,
  1999. //...
  2000.     DVD_AUD_EXT_Captions,
  2001.     DVD_AUD_EXT_VisuallyImpaired,
  2002.     DVD_AUD_EXT_DirectorComments1,
  2003.     DVD_AUD_EXT_DirectorComments2
  2004.     );
  2005.  
  2006.   TDVD_SUBPICTURE_TYPE = (
  2007.     DVD_SPType_NotSpecified,
  2008.     DVD_SPType_Language,
  2009.     DVD_SPType_Other
  2010.     );
  2011.  
  2012.   TDVD_SUBPICTURE_CODING = (
  2013.     DVD_SPCoding_RunLength,
  2014.     DVD_SPCoding_Extended,
  2015.     DVD_SPCoding_Other
  2016.     );
  2017.  
  2018.   TDVD_SUBPICTURE_LANG_EXT = (
  2019.     DVD_SP_EXT_NotSpecified,
  2020.     DVD_SP_EXT_Caption_Normal,
  2021.     DVD_SP_EXT_Caption_Big,
  2022.     DVD_SP_EXT_Caption_Children,
  2023.     DVD_SP_EXT_CC_Normal,
  2024.     DVD_SP_EXT_CC_Big,
  2025.     DVD_SP_EXT_CC_Children,
  2026.     DVD_SP_EXT_Forced,
  2027.     DVD_SP_EXT_DirectorComments_Normal,
  2028.     DVD_SP_EXT_DirectorComments_Big,
  2029.     DVD_SP_EXT_DirectorComments_Children
  2030.     );
  2031.  
  2032.   TDVD_KARAOKE_ASSIGNMENT = (
  2033.     DVD_Assignment_reserved0,
  2034.     DVD_Assignment_reserved1,
  2035.     DVD_Assignment_LR,
  2036.     DVD_Assignment_LRM,
  2037.     DVD_Assignment_LR1,
  2038.     DVD_Assignment_LRM1,
  2039.     DVD_Assignment_LR12,
  2040.     DVD_Assignment_LRM12
  2041.   );
  2042.  
  2043.   TDVD_RELATIVE_BUTTON = (
  2044.     DVD_Relative_Invalid,
  2045.     DVD_Relative_Upper,
  2046.     DVD_Relative_Lower,
  2047.     DVD_Relative_Left,
  2048.     DVD_Relative_Right
  2049.   );
  2050.  
  2051.  
  2052.   TDVD_REGISTER = Word;
  2053.  
  2054.   TGPRMArray = array[0..15] of TDVD_REGISTER;
  2055.   TSPRMArray = array[0..23] of TDVD_REGISTER;
  2056.  
  2057.   TDVD_ATR = record
  2058.     ulCAT: ULONG;
  2059.     pbATRI: array[0..767] of Byte;
  2060.   end;
  2061.  
  2062.   TDVD_VideoATR = array[0..1] of Byte;
  2063.   TDVD_AudioATR = array[0..7] of Byte;
  2064.   TDVD_SubpictureATR = array[0..5] of Byte;
  2065.  
  2066.   TDVD_FrameRate = (
  2067.     DVD_FPS_INVALID_0,
  2068.     DVD_FPS_25,
  2069.     DVD_FPS_INVALID_2,
  2070.     DVD_FPS_30NonDrop
  2071.   );
  2072.  
  2073.   TDVD_TimeCode = record
  2074.     Hours1: ULONG;        // Hours
  2075.     Hours10: ULONG;       // Tens of Hours
  2076.     Minutes1: ULONG;      // Minutes
  2077.     Minutes10: ULONG;     // Tens of Minutes
  2078.     Seconds1: ULONG;      // Seconds
  2079.     Seconds10: ULONG;     // Tens of Seconds
  2080.     Frames1: ULONG;       // Frames
  2081.     Frames10: ULONG;      // Tens of Frames
  2082.     FrameRateCode: ULONG; // use DVD_FRAMERATE to indicate frames/sec and drop/non-drop
  2083.   end;
  2084.  
  2085. //DVD_TIMECODE_FLAGS
  2086. const
  2087.         DVD_TC_FLAG_25fps            = $1;
  2088.     DVD_TC_FLAG_30fps            = $2;
  2089.     DVD_TC_FLAG_DropFrame            = $4;
  2090.         DVD_TC_FLAG_Interpolated    = $8;
  2091. type
  2092.   TDVD_HMSF_TIMECODE = record
  2093.     bHours: BYTE;
  2094.     bMinutes: BYTE;
  2095.     bSeconds: BYTE;
  2096.     bFrames: BYTE;
  2097.   end;
  2098.   PDVD_HMSF_TIMECODE = ^TDVD_HMSF_TIMECODE;
  2099.  
  2100.   TDVD_Playback_Location2 = record
  2101.     TitleNum: ULONG;
  2102.     ChapterNum: ULONG;
  2103.     TimeCode: TDVD_HMSF_TIMECODE;
  2104.     TimeCodeFlags: ULONG;
  2105.   end;
  2106.  
  2107.   TDVD_Playback_Location = record
  2108.     TitleNum: ULONG;
  2109.     ChapterNum: ULONG;
  2110.     TimeCode: ULONG;
  2111.   end;
  2112.  
  2113.   TVALID_UOP_SOMTHING_OR_OTHER = DWORD;
  2114.  
  2115. // VALID_UOP_FLAG;
  2116. const
  2117.     UOP_FLAG_Play_Title_Or_AtTime                    = $1      ;
  2118.     UOP_FLAG_Play_Chapter                            = $2      ;
  2119.     UOP_FLAG_Play_Title                                    = $4      ;
  2120.     UOP_FLAG_Stop                                    = $8      ;
  2121.     UOP_FLAG_ReturnFromSubMenu                            = $10     ;
  2122.     UOP_FLAG_Play_Chapter_Or_AtTime                    = $20     ;
  2123.     UOP_FLAG_PlayPrev_Or_Replay_Chapter                    = $40     ;
  2124.     UOP_FLAG_PlayNext_Chapter                            = $80     ;
  2125.     UOP_FLAG_Play_Forwards                            = $100    ;
  2126.     UOP_FLAG_Play_Backwards                            = $200    ;
  2127.     UOP_FLAG_ShowMenu_Title                            = $400    ;
  2128.     UOP_FLAG_ShowMenu_Root                            = $800    ;
  2129.     UOP_FLAG_ShowMenu_SubPic                            = $1000   ;
  2130.     UOP_FLAG_ShowMenu_Audio                            = $2000   ;
  2131.     UOP_FLAG_ShowMenu_Angle                            = $4000   ;
  2132.     UOP_FLAG_ShowMenu_Chapter                            = $8000   ;
  2133.     UOP_FLAG_Resume                                    = $10000  ;
  2134.     UOP_FLAG_Select_Or_Activate_Button                    = $20000  ;
  2135.     UOP_FLAG_Still_Off                                    = $40000  ;
  2136.     UOP_FLAG_Pause_On                                    = $80000  ;
  2137.     UOP_FLAG_Select_Audio_Stream                    = $100000 ;
  2138.     UOP_FLAG_Select_SubPic_Stream                    = $200000 ;
  2139.     UOP_FLAG_Select_Angle                            = $400000 ;
  2140.     UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode    = $800000 ;
  2141.     UOP_FLAG_Select_Video_Mode_Preference            = $1000000;
  2142.  
  2143. type
  2144.   TDVD_TextCharSet = (
  2145.     DVD_CharSet_Unicode,
  2146.     DVD_CharSet_ISO646,
  2147.     DVD_CharSet_JIS_Roman_Kanji,
  2148.     DVD_CharSet_ISO8859_1,
  2149.     DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana
  2150.   );
  2151.  
  2152. const
  2153. DVD_TITLE_MENU         = $000;
  2154. DVD_STREAM_DATA_CURRENT  = $008;
  2155. DVD_STREAM_DATA_VMGM     = $004;
  2156. DVD_STREAM_DATA_VTSM     = $104;
  2157. DVD_DEFAULT_AUDIO_STREAM = $f0 ;
  2158.  
  2159. type
  2160.   TDVD_DECODER_CAPS = record
  2161.     dwSize: DWORD;
  2162.     dwAudioCaps: DWORD;
  2163.     dFwdMaxRateVideo: double;
  2164.     dFwdMaxRateAudio: double;
  2165.     dFwdMaxRateSP: double;
  2166.     dBwdMaxRateVideo: double;
  2167.     dBwdMaxRateAudio: double;
  2168.     dBwdMaxRateSP: double;
  2169.     dwRes1: DWORD;
  2170.     dwRes2: DWORD;
  2171.     dwRes3: DWORD;
  2172.     dwRes4: DWORD;
  2173.   end;
  2174.  
  2175. const
  2176. DVD_AUDIO_CAPS_AC3   =        $00000001;
  2177. DVD_AUDIO_CAPS_MPEG2 =            $00000002;
  2178. DVD_AUDIO_CAPS_LPCM  =        $00000004;
  2179. DVD_AUDIO_CAPS_DTS   =        $00000008;
  2180. DVD_AUDIO_CAPS_SDDS  =        $00000010;
  2181.  
  2182. type
  2183.   TDVD_VideoAttributes = record
  2184.     fPanscanPermitted: BOOL;
  2185.     fLetterboxPermitted: BOOL;
  2186.     ulAspectX: ULONG;
  2187.     ulAspectY: ULONG;
  2188.     ulFrameRate: ULONG;
  2189.     ulFrameHeight: ULONG;
  2190.     Compression: TDVD_VIDEO_COMPRESSION;
  2191.     fLine21Field1InGOP: BOOL;
  2192.     fLine21Field2InGOP: BOOL;
  2193.     ulSourceResolutionX: ULONG;
  2194.     ulSourceResolutionY: ULONG;
  2195.     fIsSourceLetterboxed: BOOL;
  2196.     fIsFilmMode: BOOL;
  2197.   end;
  2198.  
  2199.   TDVD_SubpictureAttributes = record
  2200.     _Type: TDVD_SUBPICTURE_TYPE ;
  2201.     CodingMode: TDVD_SUBPICTURE_CODING ;
  2202.     Language: LCID ;
  2203.     LanguageExtension: TDVD_SUBPICTURE_LANG_EXT ;
  2204.   end;
  2205.  
  2206.   TDVD_TITLE_APPMODE = (
  2207.     DVD_AppMode_Not_Specified,
  2208.     DVD_AppMode_Karaoke,
  2209.     DVD_AppMode_Other
  2210.     );
  2211.  
  2212.   TDVD_MUA_MixingInfo = record
  2213.     fMixTo0: BOOL;
  2214.     fMixTo1: BOOL;
  2215.     fMix0InPhase: BOOL;
  2216.     fMix1InPhase: BOOL;
  2217.     dwSpeakerPosition: DWORD;
  2218.   end;
  2219.  
  2220.   TDVD_MUA_Coeff = record
  2221.     log2_alpha: Double;
  2222.     log2_beta: Double;
  2223.   end;
  2224.  
  2225.   TDVD_MultichannelAudioAttributes = record
  2226.     Info: array[0..7] of TDVD_MUA_MixingInfo;
  2227.     Coeff: array[0..7] of TDVD_MUA_Coeff;
  2228.   end;
  2229.  
  2230. // DVD_KARAOKE_CONTENTS
  2231. const
  2232.         DVD_Karaoke_GuideVocal1            = $1 ;
  2233.     DVD_Karaoke_GuideVocal2            = $2 ;
  2234.     DVD_Karaoke_GuideMelody1    = $4 ;
  2235.     DVD_Karaoke_GuideMelody2    = $8 ;
  2236.     DVD_Karaoke_GuideMelodyA    = $10;
  2237.     DVD_Karaoke_GuideMelodyB    = $20;
  2238.     DVD_Karaoke_SoundEffectA    = $40;
  2239.     DVD_Karaoke_SoundEffectB    = $80;
  2240.  
  2241. type
  2242.   TDVD_AudioAttributes = record
  2243.     AppMode: TDVD_AUDIO_APPMODE;
  2244.     AppModeData: BYTE;
  2245.     AudioFormat: TDVD_AUDIO_FORMAT;
  2246.     Language: LCID;
  2247.     LanguageExtension: TDVD_AUDIO_LANG_EXT;
  2248.     fHasMultichannelInfo: BOOL;
  2249.     dwFrequency: DWORD;
  2250.     bQuantization: BYTE;
  2251.     bNumberOfChannels: BYTE;
  2252.     dwReserved: array[0..1] of DWORD;
  2253.   end;
  2254.  
  2255.   TDVD_TitleAttributes = record
  2256.     AppMode: TDVD_TITLE_APPMODE ;
  2257.     VideoAttributes: TDVD_VideoAttributes ;
  2258.     ulNumberOfAudioStreams: ULONG ;
  2259.     AudioAttributes: array[0..7] of TDVD_AudioAttributes;
  2260.     MultichannelAudioAttributes: array[0..7] of TDVD_MultichannelAudioAttributes;
  2261.     ulNumberOfSubpictureStreams: ULONG ;
  2262.     SubpictureAttributes: array[0..31] of TDVD_SubpictureAttributes;
  2263.   end;
  2264.  
  2265.   TDVD_MenuAttributes = record
  2266.     fCompatibleRegion: array[0..7] of BOOL;
  2267.     VideoAttributes: TDVD_VideoAttributes;
  2268.     fAudioPresent: BOOL;
  2269.     AudioAttributes: TDVD_AudioAttributes;
  2270.     fSubpicturePresent: BOOL;
  2271.     SubpictureAttributes: TDVD_SubpictureAttributes;
  2272.   end;
  2273.  
  2274.   TDVD_KaraokeAttributes = record
  2275.     bVersion: BYTE;
  2276.     fMasterOfCeremoniesInGuideVocal1: BOOL;
  2277.     fDuet: BOOL;
  2278.     ChannelAssignment: TDVD_KARAOKE_ASSIGNMENT;
  2279.     wChannelContents: array[0..7] of WORD;
  2280.   end;
  2281.  
  2282.  
  2283.  
  2284. const
  2285.   DVD_PARENTAL_LEVEL_8    = $8000;
  2286.   DVD_PARENTAL_LEVEL_7    = $4000;
  2287.   DVD_PARENTAL_LEVEL_6    = $2000;
  2288.   DVD_PARENTAL_LEVEL_5    = $1000;
  2289.   DVD_PARENTAL_LEVEL_4    = $0800;
  2290.   DVD_PARENTAL_LEVEL_3    = $0400;
  2291.   DVD_PARENTAL_LEVEL_2    = $0200;
  2292.   DVD_PARENTAL_LEVEL_1    = $0100;
  2293.  
  2294. type
  2295.   TDVD_CMD_FLAGS = DWORD;
  2296.  
  2297. const
  2298.   DVD_CMD_FLAG_None          = $00000000;
  2299.   DVD_CMD_FLAG_Flush         = $10000000;
  2300.   DVD_CMD_FLAG_SendEvents    = $20000000;
  2301.   DVD_CMD_FLAG_Block         = $40000000;
  2302.  
  2303. type
  2304.   TCountryCode = array[0..1] of BYTE;
  2305.  
  2306. type
  2307.   IDvdState = interface(IUnknown)
  2308.       ['{86303d6d-1c4a-4087-ab42-f711167048ef}']
  2309.       function GetDiscID(out pullUniqueID: Double): HResult; stdcall;
  2310.       function GetParentalLevel(out pulParentalLevel: ULONG): HResult; stdcall;
  2311.   end;
  2312.  
  2313.   IDvdCmd = interface(IUnknown)
  2314.       ['{5A4A97E4-94EE-4A55-9751-74B5643AA27D}']
  2315.       function WaitForStart: HResult; stdcall;
  2316.       function WaitForEnd: HResult; stdcall;
  2317.   end;
  2318.  
  2319.   //Deprecated Interface
  2320.   IDvdControl = interface(IUnknown)
  2321.     ['{A70EFE61-E2A3-11D0-A9BE-00AA0061BE93}']
  2322.     function TitlePlay(uiTitle: ULONG): HRESULT; stdcall;
  2323.     function ChapterPlay(uiTitle: ULONG; uiChapter: ULONG): HRESULT; stdcall;
  2324.     function TimePlay(uiTitle: ULONG; bcdTime: ULONG): HRESULT; stdcall;
  2325.     function StopForResume: HRESULT; stdcall;
  2326.     function GoUp: HRESULT; stdcall;
  2327.     function TimeSearch(bcdTime: ULONG): HRESULT; stdcall;
  2328.     function ChapterSearch(Chapter: ULONG): HRESULT; stdcall;
  2329.     function PrevPGSearch: HRESULT; stdcall;
  2330.     function TopPGSearch: HRESULT; stdcall;
  2331.     function NextPGSearch: HRESULT; stdcall;
  2332.     function ForwardScan(dwSpeed: double): HRESULT; stdcall;
  2333.     function BackwardScan(dwSpeed: double): HRESULT; stdcall;
  2334.     function MenuCall(MenuID: TDVD_Menu_ID): HRESULT; stdcall;
  2335.     function Resume: HRESULT; stdcall;
  2336.     function UpperButtonSelect: HRESULT; stdcall;
  2337.     function LowerButtonSelect: HRESULT; stdcall;
  2338.     function LeftButtonSelect: HRESULT; stdcall;
  2339.     function RightButtonSelect: HRESULT; stdcall;
  2340.     function ButtonActivate: HRESULT; stdcall;
  2341.     function ButtonSelectAndActivate(uiButton: ULONG): HRESULT; stdcall;
  2342.     function StillOff: HRESULT; stdcall;
  2343.     function PauseOn: HRESULT; stdcall;
  2344.     function PauseOff: HRESULT; stdcall;
  2345.     function MenuLanguageSelect(Language: LCID): HRESULT; stdcall;
  2346.     function AudioStreamChange(nAudio: ULONG): HRESULT; stdcall;
  2347.     function SubpictureStreamChange(nSubPicture: ULONG; bDisplay: BOOL): HRESULT; stdcall;
  2348.     function AngleChange(ulAngle: ULONG): HRESULT; stdcall;
  2349.     function ParentalLevelSelect(ulParentalLevel: ULONG): HRESULT; stdcall;
  2350.     function ParentalCountrySelect(wCountry: Word): HRESULT; stdcall;
  2351.     function KaraokeAudioPresentationModeChange(ulMode: ULONG): HRESULT; stdcall;
  2352.     function VideoModePreferrence(ulPreferredDisplayMode: ULONG): HRESULT; stdcall;
  2353.     function SetRoot(pszPath: LPCWSTR): HRESULT; stdcall;
  2354.     function MouseActivate(point: TPoint): HRESULT; stdcall;
  2355.     function MouseSelect(point: TPoint): HRESULT; stdcall;
  2356.     function ChapterPlayAutoStop(ulTitle, ulChapter, ulChaptersToPlay: ULONG): HRESULT; stdcall;
  2357.   end;
  2358.  
  2359.  
  2360.   IDvdControl2 = interface(IUnknown)
  2361.     ['{33BC7430-EEC0-11D2-8201-00A0C9D74842}']
  2362.     function PlayTitle(ulTitle, dwFlags: ULONG; var ppCmd: IDvdCmd): HResult; stdcall;
  2363.     function PlayChapterInTitle(ulTitle, ulChapter: ULONG; dwFlags: DWORD; var ppCmd: IDvdCmd): HResult; stdcall;
  2364.     function PlayAtTimeInTitle(ulTitle: ULONG; var pStartTime: TDVD_HMSF_TIMECODE; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2365.     function Stop: HResult; stdcall;
  2366.     function ReturnFromSubmenu(dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2367.     function PlayAtTime(var pTime: TDVD_HMSF_TIMECODE; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2368.     function PlayChapter(ulChapter: ULONG; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2369.     function PlayPrevChapter(dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2370.     function ReplayChapter(dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2371.     function PlayNextChapter(dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2372.     function PlayForwards(dSpeed: double; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2373.     function PlayBackwards(dSpeed: double; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2374.     function ShowMenu(MenuID: TDVD_MENU_ID; dwFlags: TDVD_CMD_FLAGS;out ppCmd: IDvdCmd): HResult; stdcall;
  2375.     function Resume(dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2376.     function SelectRelativeButton(buttonDir: TDVD_RELATIVE_BUTTON): HResult; stdcall;
  2377.     function ActivateButton: HResult; stdcall;
  2378.     function SelectButton(ulButton: ULONG): HResult; stdcall;
  2379.     function SelectAndActivateButton(ulButton: ULONG): HResult; stdcall;
  2380.     function StillOff: HResult; stdcall;
  2381.     function Pause(bState: BOOL): HResult; stdcall;
  2382.     function SelectAudioStream(ulAudio: ULONG; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2383.     function SelectSubpictureStream(ulSubPicture: ULONG; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2384.     function SetSubpictureState(bState: BOOL; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2385.     function SelectAngle(ulAngle: ULONG; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2386.     function SelectParentalLevel(ulParentalLevel: ULONG): HResult; stdcall;
  2387.     function SelectParentalCountry(bCountry: TCountryCode): HResult; stdcall;
  2388.     function SelectKaraokeAudioPresentationMode(ulMode: ULONG): HResult; stdcall;
  2389.     function SelectVideoModePreference(ulPreferredDisplayMode: ULONG): HResult; stdcall;
  2390.     function SetDVDDirectory(pszwPath: LPCWSTR): HResult; stdcall;
  2391.     function ActivateAtPosition(point: TPoint): HResult; stdcall;
  2392.     function SelectAtPosition(point : TPoint): HResult; stdcall;
  2393.     function PlayChaptersAutoStop(ulTitle, ulChapter, ulChaptersToPlay: ULONG; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2394.     function AcceptParentalLevelChange(bAccept: BOOL): HResult; stdcall;
  2395.     function SetOption(flag: TDVD_OPTION_FLAG; fState: BOOL): HResult; stdcall;
  2396.     function SetState(pState: IDvdState; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2397.     function PlayPeriodInTitleAutoStop(ulTitle: ULONG; var pStartTime, pEndTime: TDVD_HMSF_TIMECODE; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2398.     function SetGPRM(ulIndex: ULONG; wValue: WORD; dwFlags: DWORD; out ppCmd: IDvdCmd): HResult; stdcall;
  2399.     function SelectDefaultMenuLanguage(Language: LCID): HResult; stdcall;
  2400.     function SelectDefaultAudioLanguage(Language: LCID; audioExtension: TDVD_AUDIO_LANG_EXT): HResult; stdcall;
  2401.     function SelectDefaultSubpictureLanguage(Language: LCID; subpictureExtension: TDVD_SUBPICTURE_LANG_EXT): HResult; stdcall;
  2402.   end;
  2403.  
  2404.   //Deprecated Interface
  2405.   IDvdInfo = interface(IUnknown)
  2406.     ['{A70EFE60-E2A3-11D0-A9BE-00AA0061BE93}']
  2407.     function GetCurrentDomain(out pDomain: TDVD_Domain): HRESULT; stdcall;
  2408.     function GetCurrentLocation(out pLocation: TDVD_Playback_Location): HRESULT; stdcall;
  2409.     function GetTotalTitleTime(out pTotalTime: ULONG): HRESULT; stdcall;
  2410.     function GetCurrentButton(out pnButtonsAvailable, pnCurrentButton: ULONG): HRESULT; stdcall;
  2411.     function GetCurrentAngle(out pnAnglesAvailable, pnCurrentAngle: ULONG): HRESULT; stdcall;
  2412.     function GetCurrentAudio(out pnStreamsAvailable, pnCurrentStream: ULONG): HRESULT; stdcall;
  2413.     function GetCurrentSubpicture(out pnStreamsAvailable, pnCurrentStream: ULONG;
  2414.              out pIsDisabled: BOOL): HRESULT; stdcall;
  2415.     function GetCurrentUOPS(out pUOP: TVALID_UOP_SOMTHING_OR_OTHER): HRESULT; stdcall;
  2416.     function GetAllSPRMs(var pRegisterArray: TSPRMArray): HRESULT; stdcall;
  2417.     function GetAllGPRMs(var pRegisterArray: TGPRMArray): HRESULT; stdcall;
  2418.     function GetAudioLanguage(nStream: ULONG; out pLanguage: LCID): HRESULT; stdcall;
  2419.     function GetSubpictureLanguage(nStream: ULONG; out pLanguage: LCID): HRESULT; stdcall;
  2420.     function GetTitleAttributes(nTitle: ULONG; out pATR: TDVD_ATR): HRESULT; stdcall;
  2421.     function GetVMGAttributes(out pATR: TDVD_ATR): HRESULT; stdcall;
  2422.     function GetCurrentVideoAttributes(out pATR: TDVD_VideoATR): HRESULT; stdcall;
  2423.     function GetCurrentAudioAttributes(out pATR: TDVD_AudioATR): HRESULT; stdcall;
  2424.     function GetCurrentSubpictureAttributes(out pATR: TDVD_SubpictureATR): HRESULT; stdcall;
  2425.     function GetCurrentVolumeInfo(out pNumOfVol, pThisVolNum: ULONG;
  2426.         out pSide: TDVD_Disc_Side; out pNumOfTitles: ULONG): HRESULT; stdcall;
  2427.     function GetDVDTextInfo(out pTextManager: Byte; cbBufSize: ULONG;
  2428.              out pcbActualSize: ULONG): HRESULT; stdcall;
  2429.     function GetPlayerParentalLevel(out pParentalLevel, pCountryCode: ULONG): HRESULT; stdcall;
  2430.     function GetNumberOfChapters(ulTitle: ULONG; out pNumberOfChapters: ULONG): HRESULT; stdcall;
  2431.     function GetTitleParentalLevels(ulTitle: ULONG; out pParentalLevels: ULONG): HRESULT; stdcall;
  2432.     function GetRoot(pRoot: PChar; cbBufSize: ULONG; out pcbActualSize: ULONG): HRESULT; stdcall;
  2433.   end;
  2434.  
  2435.   IDvdInfo2 = interface(IUnknown)
  2436.     ['{34151510-EEC0-11D2-8201-00A0C9D74842}']
  2437.     function GetCurrentDomain(out pDomain: TDVD_Domain): HResult; stdcall;
  2438.     function GetCurrentLocation(out pLocation: TDVD_Playback_Location2): HResult; stdcall;
  2439.     function GetTotalTitleTime(out pTotalTime: TDVD_HMSF_TIMECODE; out ulTimeCodeFlags: ULONG): HResult; stdcall;
  2440.     function GetCurrentButton(out pulButtonsAvailable, pulCurrentButton: ULONG): HResult; stdcall;
  2441.     function GetCurrentAngle(out pulAnglesAvailable, pulCurrentAngle: ULONG): HResult; stdcall;
  2442.     function GetCurrentAudio(out pulStreamsAvailable, pulCurrentStream: ULONG): HResult; stdcall;
  2443.     function GetCurrentSubpicture(out pulStreamsAvailable, pulCurrentStream: ULONG; out pbIsDisabled: BOOL): HResult; stdcall;
  2444.     function GetCurrentUOPS(out pulUOPs: ULONG): HResult; stdcall;
  2445.     function GetAllSPRMs(out pRegisterArray: TSPRMArray): HResult; stdcall;
  2446.     function GetAllGPRMs(out pRegisterArray: TGPRMArray): HResult; stdcall;
  2447.     function GetAudioLanguage(ulStream: ULONG; out pLanguage: LCID): HResult; stdcall;
  2448.     function GetSubpictureLanguage(ulStream: ULONG; out pLanguage: LCID): HResult; stdcall;
  2449.     function GetTitleAttributes(ulTitle: ULONG; out pMenu: TDVD_MenuAttributes; out pTitle: TDVD_TitleAttributes): HResult; stdcall;
  2450.     function GetVMGAttributes(out pATR: TDVD_MenuAttributes): HResult; stdcall;
  2451.     function GetCurrentVideoAttributes(out pATR: TDVD_VideoAttributes): HResult; stdcall;
  2452.     function GetAudioAttributes(ulStream: ULONG; out pATR: TDVD_AudioAttributes): HResult; stdcall;
  2453.     function GetKaraokeAttributes(ulStream: ULONG; out pAttributes: TDVD_KaraokeAttributes): HResult; stdcall;
  2454.     function GetSubpictureAttributes(ulStream :ULONG; out pATR: TDVD_SubpictureAttributes): HResult; stdcall;
  2455.     function GetDVDVolumeInfo(out pulNumOfVolumes, pulVolume: ULONG; out pSide: TDVD_DISC_SIDE; out pulNumOfTitles: ULONG): HResult; stdcall;
  2456.     function GetDVDTextNumberOfLanguages(out pulNumOfLangs: ULONG): HResult; stdcall;
  2457.     function GetDVDTextLanguageInfo(ulLangIndex: ULONG; out pulNumOfStrings: ULONG; out pLangCode: LCID; out pbCharacterSet: TDVD_TextCharSet): HResult; stdcall;
  2458.     function GetDVDTextStringAsNative(ulLangIndex, ulStringIndex: ULONG; out pbBuffer; ulMaxBufferSize: ULONG; out pulActualSize: ULONG; out pType: TDVD_TextStringType): HResult; stdcall;
  2459.     function GetDVDTextStringAsUnicode(ulLangIndex, ulStringIndex: ULONG; out pchwBuffer; ulMaxBufferSize: ULONG; out pulActualSize: ULONG; out pType: TDVD_TextStringType): HResult; stdcall;
  2460.     function GetPlayerParentalLevel(out pulParentalLevel: ULONG; out pbCountryCode: TCountryCode): HResult; stdcall;
  2461.     function GetNumberOfChapters(ulTitle: ULONG; out pulNumOfChapters: ULONG): HResult; stdcall;
  2462.     function GetTitleParentalLevels(ulTitle: ULONG; out pulParentalLevels: ULONG): HResult; stdcall;
  2463.     function GetDVDDirectory(var pszwPath: LPWSTR; ulMaxSize: ULONG; out pulActualSize: ULONG): HResult; stdcall;
  2464.     function IsAudioStreamEnabled(ulStreamNum: ULONG; out pbEnabled: BOOL): HResult; stdcall;
  2465.     function GetDiscID(pszwPath: LPCWSTR; out pullDiscID: double): HResult; stdcall;
  2466.     function GetState(out pStateData: IDvdState): HResult; stdcall;
  2467.     function GetMenuLanguages(out pLanguages: LCID; ulMaxLanguages: ULONG; out pulActualLanguages: ULONG): HResult; stdcall;
  2468.     function GetButtonAtPosition(point: Tpoint;out pulButtonIndex: ULONG): HResult; stdcall;
  2469.     function GetCmdFromEvent(lParam1: integer; out pCmdObj: IDvdCmd): HResult; stdcall;
  2470.     function GetDefaultMenuLanguage(out pLanguage: LCID): HResult; stdcall;
  2471.     function GetDefaultAudioLanguage(out pLanguage: LCID; out pAudioExtension: TDVD_AUDIO_LANG_EXT): HResult; stdcall;
  2472.     function GetDefaultSubpictureLanguage(out pLanguage: LCID; out pSubpictureExtension: TDVD_SUBPICTURE_LANG_EXT): HResult; stdcall;
  2473.     function GetDecoderCaps(out pCaps: TDVD_DECODER_CAPS): HResult; stdcall;
  2474.     function GetButtonRect(ulButton: ULONG; out pRect: TRect): HResult; stdcall;
  2475.     function IsSubpictureStreamEnabled(ulStreamNum: ULONG; out pbEnabled: BOOL): HResult; stdcall;
  2476.   end;
  2477.  
  2478.   IVideoFrameStep = interface(IUnknown)
  2479.     ['{e46a9787-2b71-444d-a4b5-1fab7b708d6a}']
  2480.     function Step(dwFrames: DWORD; pStepObject: IUnKnown): HResult; stdcall;
  2481.     function CanStep(bMultiple: longint; pStepObject: IUnknown): HResult; stdcall;
  2482.     function CancelStep: HResult; stdcall;
  2483.   end;
  2484.  
  2485.  
  2486.  
  2487. const
  2488.   AM_DVD_HWDEC_PREFER     = $1;
  2489.   AM_DVD_HWDEC_ONLY       = $2;
  2490.   AM_DVD_SWDEC_PREFER     = $4;
  2491.   AM_DVD_SWDEC_ONLY       = $8;
  2492.   AM_DVD_NOVPE            = $100;
  2493.  
  2494.   AM_DVD_STREAM_VIDEO    = $1;
  2495.   AM_DVD_STREAM_AUDIO    = $2;
  2496.   AM_DVD_STREAM_SUBPIC   = $4;
  2497.  
  2498. type
  2499.   TAM_DVD_RenderStatus = record
  2500.     hrVPEStatus: HRESULT;
  2501.     bDvdVolInvalid: BOOL;
  2502.     bDvdVolUnknown: BOOL;
  2503.     bNoLine21In: BOOL;
  2504.     bNoLine21Out: BOOL;
  2505.     iNumStreams: Integer;
  2506.     iNumStreamsFailed: Integer;
  2507.     dwFailedStreamsFlag: DWORD;
  2508.   end;
  2509.  
  2510.   IDvdGraphBuilder = interface(IUnknown)
  2511.     ['{FCC152B6-F372-11d0-8E00-00C04FD7C08B}']
  2512.     function GetFiltergraph(out ppGB: IGraphBuilder): HRESULT; stdcall;
  2513.     function GetDvdInterface(const riid: TGUID; out ppvIF): HRESULT; stdcall;
  2514.     function RenderDvdVideoVolume(lpcwszPathName: PWideChar; dwFlags: DWORD;
  2515.              out pStatus: TAM_DVD_RenderStatus): HRESULT; stdcall;
  2516.   end;
  2517.  
  2518. //_AM_OVERLAY_NOTIFY_FLAGS
  2519. const
  2520.         AM_OVERLAY_NOTIFY_VISIBLE_CHANGE  = $1;
  2521.     AM_OVERLAY_NOTIFY_SOURCE_CHANGE      = $2;
  2522.     AM_OVERLAY_NOTIFY_DEST_CHANGE      = $4;
  2523.  
  2524. type
  2525.   IDDrawExclModeVideoCallback = interface(IUnknown)
  2526.     ['{913c24a0-20ab-11d2-9038-00a0c9697298}']
  2527.     function OnUpdateOverlay(bBefore: BOOL; dwFlags: DWORD; bOldVisible: BOOL;
  2528.              var prcOldSrc, prcOldDest: TRECT; bNewVisible: BOOL; var prcNewSrc, prcNewDest: TRECT): HRESULT; stdcall;
  2529.     function OnUpdateColorKey(var pKey: TCOLORKEY; dwColor: DWORD): HRESULT; stdcall;
  2530.     function OnUpdateSize(dwWidth, dwHeight, dwARWidth, dwARHeight: DWORD): HRESULT; stdcall;
  2531.   end;
  2532.  
  2533.   IDDrawExclModeVideo = interface(IUnknown)
  2534.     ['{153ACC21-D83B-11d1-82BF-00A0C9696C8F}']
  2535.     function SetDDrawObject(pDDrawObject: IDirectDraw): HRESULT; stdcall;
  2536.     function GetDDrawObject(out ppDDrawObject: IDirectDraw; out pbUsingExternal: BOOL): HRESULT; stdcall;
  2537.     function SetDDrawSurface(pDDrawSurface: IDirectDrawSurface): HRESULT; stdcall;
  2538.     function GetDDrawSurface(out ppDDrawSurface: IDirectDrawSurface; out pbUsingExternal: BOOL): HRESULT; stdcall;
  2539.     function SetDrawParameters(prcSource, prcTarget: PRECT): HRESULT; stdcall;
  2540.     function GetNativeVideoProps(out pdwVideoWidth, pdwVideoHeight, pdwPictAspectRatioX,pdwPictAspectRatioY: DWORD): HRESULT; stdcall;
  2541.     function SetCallbackInterface(pCallback: IDDrawExclModeVideoCallback; dwFlags: DWORD): HRESULT; stdcall;
  2542.   end;
  2543. //lookat
  2544.   IPinConnection = interface(IUnknown)
  2545.     ['{4a9a62d3-27d4-403d-91e9-89f540e55534}']
  2546.     function DynamicQueryAccept(var pmt: TAM_MEDIA_TYPE): HRESULT; stdcall;
  2547.     function NotifyEndOfStream(hNotifyEvent: PHANDLE): HRESULT; stdcall;
  2548.     function IsEndPin: HRESULT; stdcall;
  2549.     function DynamicDisconnect: HRESULT; stdcall;
  2550.   end;
  2551. //lookat
  2552.   IPinFlowControl = interface(IUnknown)
  2553.     ['{c56e9858-dbf3-4f6b-8119-384af2060deb}']
  2554.     function Block(dwBlockFlags: DWORD; hEvent: THANDLE): HRESULT; stdcall;
  2555.   end;
  2556.  
  2557.   IGraphConfigCallback = interface(IUnknown)
  2558.     ['{ade0fd60-d19d-11d2-abf6-00a0c905f375}']
  2559.     function Reconfigure(var pvContext; dwFlags: DWORD): HRESULT; stdcall;
  2560.   end;
  2561.  
  2562. const
  2563. //_AM_PIN_FLOW_CONTROL_BLOCK_FLAGS
  2564.         AM_PIN_FLOW_CONTROL_BLOCK    = $1;
  2565.  
  2566.  
  2567. //_AM_GRAPH_CONFIG_RECONNECT_FLAGS
  2568.         AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT              = $1;
  2569.     AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS      = $2;
  2570.     AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = $4;
  2571.  
  2572. //_AM_FILTER_FLAGS
  2573.         AM_FILTER_FLAGS_REMOVABLE    = $1;
  2574.  
  2575. //_REM_FILTER_FLAGS
  2576.         REMFILTERF_LEAVECONNECTED    = $1;
  2577.  
  2578. type
  2579. //lookat
  2580.   IGraphConfig = interface(IUnknown)
  2581.     ['{03A1EB8E-32BF-4245-8502-114D08A9CB88}']
  2582.     function Reconnect(pOutputPin, pInputPin: IPin; pmtFirstConnection: PAM_MEDIA_TYPE;
  2583.              pUsingFilter: IBaseFilter; hAbortEvent: PHANDLE; dwFlags: DWORD): HRESULT; stdcall;
  2584.     function Reconfigure(pCallback: IGraphConfigCallback; var pvContext;
  2585.              dwFlags: DWORD; hAbortEvent: PHANDLE): HRESULT; stdcall;
  2586.     function AddFilterToCache(pFilter: IBaseFilter): HRESULT; stdcall;
  2587.     function EnumCacheFilter(out pEnum: IEnumFilters): HRESULT; stdcall;
  2588.     function RemoveFilterFromCache(pFilter: IBaseFilter): HRESULT; stdcall;
  2589.     function GetStartTime(out prtStart: TREFERENCE_TIME): HRESULT; stdcall;
  2590.     function PushThroughData(pOutputPin: IPin; pConnection: IPinConnection; hEventAbort: PHANDLE): HRESULT; stdcall;
  2591.     function SetFilterFlags(pFilter: IBaseFilter; dwFlags: DWORD): HRESULT; stdcall;
  2592.     function GetFilterFlags(pFilter: IBaseFilter; out pdwFlags: DWORD): HRESULT; stdcall;
  2593.     function RemoveFilterEx(pFilter: IBaseFilter; Flags: DWORD): HRESULT; stdcall;
  2594.   end;
  2595.  
  2596.   IFilterChain = interface(IUnknown)
  2597.     ['{DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29}']
  2598.     function StartChain(pStartFilter, pEndFilter: IBaseFilter): HRESULT; stdcall;
  2599.     function PauseChain(pStartFilter, pEndFilter: IBaseFilter): HRESULT; stdcall;
  2600.     function StopChain(pStartFilter, pEndFilter: IBaseFilter): HRESULT; stdcall;
  2601.     function RemoveChain(pStartFilter, pEndFilter: IBaseFilter): HRESULT; stdcall;
  2602.   end;
  2603.  
  2604. (*==========================================================================;
  2605.  *
  2606.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2607.  *
  2608.  *  File:       mmstream.h
  2609.  *
  2610.  ***************************************************************************)
  2611.  
  2612. const
  2613.   IID_IMultiMediaStream: TGUID = '{B502D1BC-9A57-11d0-8FDE-00C04FD9189D}';
  2614.   IID_IMediaStream: TGUID = '{B502D1BD-9A57-11d0-8FDE-00C04FD9189D}';
  2615.   IID_IStreamSample: TGUID = '{B502D1BE-9A57-11d0-8FDE-00C04FD9189D}';
  2616.  
  2617. const
  2618.   MS_S_PENDING                = $80040401;
  2619.   MS_S_NOUPDATE               = $80040402;
  2620.   MS_S_ENDOFSTREAM            = $80040403;
  2621.   MS_E_SAMPLEALLOC            = $00040001;
  2622.   MS_E_PURPOSEID              = $00040002;
  2623.   MS_E_NOSTREAM               = $00040003;
  2624.   MS_E_NOSEEKING              = $00040004;
  2625.   MS_E_INCOMPATIBLE           = $00040005;
  2626.   MS_E_BUSY                   = $00040006;
  2627.   MS_E_NOTINIT                = $00040007;
  2628.   MS_E_SOURCEALREADYDEFINED   = $00040008;
  2629.   MS_E_INVALIDSTREAMTYPE      = $00040009;
  2630.   MS_E_NOTRUNNING             = $0004000A;
  2631.  
  2632.   MSPID_PrimaryVideo: TGUID = (D1:$A35FF56A;D2:$9FDA;D3:$11D0;D4:($8F,$DF,$00,$C0,$4F,$D9,$18,$9D));
  2633.   MSPID_PrimaryAudio: TGUID = (D1:$A35FF56B;D2:$9FDA;D3:$11D0;D4:($8F,$DF,$00,$C0,$4F,$D9,$18,$9D));
  2634.  
  2635. type
  2636.   PAPCFUNC = procedure(dwParam: DWORD); stdcall;
  2637.  
  2638.   TStream_Time = int64;
  2639.  
  2640.   PStream_Type = ^TStream_Type;
  2641.   TStream_Type = (
  2642.     STREAMTYPE_READ,
  2643.     STREAMTYPE_WRITE,
  2644.     STREAMTYPE_TRANSFORM
  2645.   );
  2646.  
  2647.   TStream_State = (
  2648.     STREAMSTATE_STOP,
  2649.     STREAMSTATE_RUN
  2650.   );
  2651.  
  2652.   TCompletion_Status_Flags = (
  2653.     COMPSTAT_INVALID_0,
  2654.     COMPSTAT_NOUPDATEOK,
  2655.     COMPSTAT_WAIT,
  2656.     COMPSTAT_INVALID_3,
  2657.     COMPSTAT_ABORT
  2658.   );
  2659.  
  2660. const
  2661.   MMSSF_HASCLOCK        = $1;
  2662.   MMSSF_SUPPORTSEEK     = $2;
  2663.   MMSSF_ASYNCHRONOUS    = $4;
  2664.  
  2665.   SSUPDATE_ASYNC = $1;
  2666.   SSUPDATE_CONTINUOUS = $2;
  2667.  
  2668. type
  2669.   IMediaStream = interface;
  2670.   IStreamSample = interface;
  2671. //lookat
  2672.   IMultiMediaStream = interface(IUnknown)
  2673.     ['{B502D1BC-9A57-11d0-8FDE-00C04FD9189D}']
  2674.     function GetInformation(out pdwFlags: PDWORD; out pStreamType: TStream_Type):
  2675.         HRESULT; stdcall;
  2676.     function GetMediaStream(const idPurpose: TGUID;
  2677.         out ppMediaStream: IMediaStream): HRESULT; stdcall;
  2678.     function EnumMediaStreams(Index: Longint; out ppMediaStream: IMediaStream):
  2679.         HRESULT; stdcall;
  2680.     function GetState(out pCurrentState: TStream_State): HRESULT; stdcall;
  2681.     function SetState(NewState: TStream_State): HRESULT; stdcall;
  2682.     function GetTime(out pCurrentTime: TStream_Time): HRESULT; stdcall;
  2683.     function GetDuration(out pDuration: TStream_Time): HRESULT; stdcall;
  2684.     function Seek(SeekTime: TStream_Time): HRESULT; stdcall;
  2685.     function GetEndOfStreamEventHandle(out phEOS: PHandle): HRESULT; stdcall;
  2686.   end;
  2687.  
  2688. //lookat  
  2689.   IMediaStream = interface(IUnknown)
  2690.     ['{B502D1BD-9A57-11d0-8FDE-00C04FD9189D}']
  2691.     function GetMultiMediaStream(out ppMultiMediaStream: IMultiMediaStream):
  2692.         HRESULT; stdcall;
  2693.     function GetInformation(out pPurposeId: PGUID; out pType: PStream_Type):
  2694.         HRESULT; stdcall;
  2695.     function SetSameFormat(pStreamThatHasDesiredFormat: IMediaStream;
  2696.         dwFlags: DWORD): HRESULT; stdcall;
  2697.     function AllocateSample(dwFlags: DWORD; out ppSample: IStreamSample): HRESULT; stdcall;
  2698.     function CreateSharedSample(pExistingSample: IStreamSample; dwFlags: DWORD;
  2699.         out ppNewSample: IStreamSample): HRESULT; stdcall;
  2700.     function SendEndOfStream(dwFlags: DWORD): HRESULT; stdcall;
  2701.   end;
  2702. //lookat
  2703.   IStreamSample = interface(IUnknown)
  2704.     ['{B502D1BE-9A57-11d0-8FDE-00C04FD9189D}']
  2705.     function GetMediaStream(ppMediaStream: IMediaStream): HRESULT; stdcall;
  2706.     function GetSampleTimes(out pStartTime, pEndTime,
  2707.         pCurrentTime: TStream_Time): HRESULT; stdcall;
  2708.     function SetSampleTimes(const pStartTime, pEndTime: TStream_Time): HRESULT; stdcall;
  2709.     function Update(dwFlags: DWORD; hEvent: PHandle; pfnAPC: PAPCFUNC;
  2710.         dwAPCData: DWORD): HRESULT; stdcall;
  2711.     function CompletionStatus(dwFlags: DWORD; dwMilliseconds: DWORD): HRESULT; stdcall;
  2712.   end;
  2713.  
  2714. (*==========================================================================;
  2715.  *
  2716.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2717.  *
  2718.  *  File:       amstream.h
  2719.  *
  2720.  ***************************************************************************)
  2721.  
  2722. const
  2723.   IID_IDirectShowStream: TGUID = '{7DB01C96-C0C3-11D0-8FF1-00C04FD9189D}';
  2724.   IID_IAMMultiMediaStream: TGUID = '{BEBE595C-9A6F-11D0-8FDE-00C04FD9189D}';
  2725.   IID_IAMMediaStream: TGUID = '{BEBE595D-9A6F-11D0-8FDE-00C04FD9189D}';
  2726.   IID_IMediaStreamFilter: TGUID = '{BEBE595E-9A6F-11D0-8FDE-00C04FD9189D}';
  2727.   IID_IDirectDrawMediaSampleAllocator: TGUID = '{AB6B4AFC-F6E4-11D0-900D-00C04FD9189D}';
  2728.   IID_IDirectDrawMediaSample: TGUID = '{AB6B4AFE-F6E4-11D0-900D-00C04FD9189D}';
  2729.   IID_IAMMediaTypeStream: TGUID = '{AB6B4AFA-F6E4-11D0-900D-00C04FD9189D}';
  2730.   IID_IAMMediaTypeSample: TGUID = '{AB6B4AFB-F6E4-11D0-900D-00C04FD9189D}';
  2731.  
  2732. const
  2733.   AMMSF_NOGRAPHTHREAD = $1;
  2734.  
  2735.   AMMSF_ADDDEFAULTRENDERER = $1;
  2736.   AMMSF_CREATEPEER         = $2;
  2737.   AMMSF_STOPIFNOSAMPLES       = $4;
  2738.   AMMSF_NOSTALL               = $8;
  2739.  
  2740.   AMMSF_RENDERTYPEMASK  = $3;
  2741.   AMMSF_RENDERTOEXISTING        = 0;
  2742.   AMMSF_RENDERALLSTREAMS        = $1;
  2743.   AMMSF_NORENDER        = $2;
  2744.   AMMSF_NOCLOCK = $4;
  2745.   AMMSF_RUN     = $8;
  2746.  
  2747. type
  2748.   TOutput_State = (
  2749.     Disabled,
  2750.     ReadData,
  2751.     RenderData
  2752.   );
  2753.  
  2754.   IDirectShowStream = interface(IDispatch)
  2755.     ['{7DB01C96-C0C3-11D0-8FF1-00C04FD9189D}']
  2756.     function get_FileName(out pVal: WideString): HResult; stdcall;
  2757.     function put_FileName(newVal: WideString): HResult; stdcall;
  2758.     function get_Video(out pVal: TOutput_State): HResult; stdcall;
  2759.     function put_Video(newVal: TOutput_State): HResult; stdcall;
  2760.     function get_Audio(out pVal: TOutput_State): HResult; stdcall;
  2761.     function put_Audio(newVal: TOutput_State): HResult; stdcall;
  2762.   end;
  2763.  
  2764.   IMediaStreamFilter = interface;
  2765.  
  2766.   IAMMultiMediaStream = interface(IMultiMediaStream)
  2767.     ['{BEBE595C-9A6F-11D0-8FDE-00C04FD9189D}']
  2768.     function Initialize(StreamType: TStream_Type; dwFlags: DWORD;
  2769.         pFilterGraph: IGraphBuilder): HRESULT; stdcall;
  2770.     function GetFilterGraph(out ppGraphBuilder: IGraphBuilder): HRESULT; stdcall;
  2771.     function GetFilter(out ppFilter: IMediaStreamFilter): HRESULT; stdcall;
  2772.     function AddMediaStream(pStreamObject: IUnknown; const PurposeId: TGUID;
  2773.         dwFlags: DWORD; out ppNewStream: IMediaStream): HRESULT; stdcall;
  2774.     function OpenFile(pszFileName: PWideChar; dwFlags: DWORD): HRESULT; stdcall;
  2775.     function OpenMoniker(pCtx: IBindCtx; pMoniker: IMoniker; dwFlags: DWORD): HRESULT; stdcall;
  2776.     function Render(dwFlags: DWORD): HRESULT; stdcall;
  2777.   end;
  2778.  
  2779.   IAMMediaStream = interface(IMediaStream)
  2780.     ['{BEBE595D-9A6F-11D0-8FDE-00C04FD9189D}']
  2781.     function Initialize(pSourceObject: IUnknown; dwFlags: DWORD;
  2782.         const PurposeId: TGUID; StreamType: TStream_Type): HRESULT; stdcall;
  2783.     function SetState(State: TFilter_State): HRESULT; stdcall;
  2784.     function JoinAMMultiMediaStream(pAMMultiMediaStream: IAMMultiMediaStream): HRESULT; stdcall;
  2785.     function JoinFilter(pMediaStreamFilter: IMediaStreamFilter): HRESULT; stdcall;
  2786.     function JoinFilterGraph(pFilterGraph: IFilterGraph): HRESULT; stdcall;
  2787.   end;
  2788.  
  2789.   IMediaStreamFilter = interface(IBaseFilter)
  2790.     ['{BEBE595E-9A6F-11D0-8FDE-00C04FD9189D}']
  2791.     function AddMediaStream(pAMMediaStream: IAMMediaStream): HRESULT; stdcall;
  2792.     function GetMediaStream( const idPurpose: TGUID;
  2793.         out ppMediaStream: IMediaStream): HRESULT; stdcall;
  2794.     function EnumMediaStreams(Index: Longint; out ppMediaStream: IMediaStream): HRESULT; stdcall;
  2795.     function SupportSeeking(bRenderer: BOOL): HRESULT; stdcall;
  2796.     function ReferenceTimeToStreamTime( var pTime: TReference_Time): HRESULT; stdcall;
  2797.     function GetCurrentStreamTime(out pCurrentStreamTime: TReference_Time): HRESULT; stdcall;
  2798.     function WaitUntil(WaitStreamTime: TReference_Time): HRESULT; stdcall;
  2799.     function Flush(bCancelEOS: BOOL): HRESULT; stdcall;
  2800.     function EndOfStream: HRESULT; stdcall;
  2801.   end;
  2802.  
  2803.   IDirectDrawMediaSampleAllocator = interface(IUnknown)
  2804.     ['{AB6B4AFC-F6E4-11D0-900D-00C04FD9189D}']
  2805.     function GetDirectDraw(out ppDirectDraw: IDirectDraw): HRESULT; stdcall;
  2806.   end;
  2807.  
  2808.   IDirectDrawMediaSample = interface(IUnknown)
  2809.     ['{AB6B4AFE-F6E4-11D0-900D-00C04FD9189D}']
  2810.     function GetSurfaceAndReleaseLock(out ppDirectDrawSurface: IDirectDrawSurface;
  2811.         out pRect: TRect): HRESULT; stdcall;
  2812.     function LockMediaSamplePointer: HRESULT; stdcall;
  2813.   end;
  2814.  
  2815.   IAMMediaTypeSample = interface;
  2816.  
  2817.   IAMMediaTypeStream = interface(IMediaStream)
  2818.     ['{AB6B4AFA-F6E4-11D0-900D-00C04FD9189D}']
  2819.     function GetFormat(out pMediaType: TAM_Media_Type; dwFlags: DWORD): HRESULT; stdcall;
  2820.     function SetFormat(const pMediaType: TAM_Media_Type; dwFlags: DWORD): HRESULT; stdcall;
  2821.     function CreateSample(lSampleSize: Longint; pbBuffer: Pointer;
  2822.         dwFlags: DWORD; pUnkOuter: IUnknown; out ppAMMediaTypeSample: IAMMediaTypeSample): HRESULT; stdcall;
  2823.     function GetStreamAllocatorRequirements(var pProps: TAllocator_Properties): HRESULT; stdcall;
  2824.     function SetStreamAllocatorRequirements(const pProps: TAllocator_Properties): HRESULT; stdcall;
  2825.   end;
  2826.  
  2827.   IAMMediaTypeSample = interface(IStreamSample)
  2828.     ['{AB6B4AFB-F6E4-11D0-900D-00C04FD9189D}']
  2829.     function SetPointer(pBuffer: Pointer; lSize: Longint): HRESULT; stdcall;
  2830.     function GetPointer(out ppBuffer: Pointer): HRESULT; stdcall;
  2831.     function GetSize: Longint; stdcall;
  2832.     function GetTime(out pTimeStart, pTimeEnd: TReference_Time): HRESULT; stdcall;
  2833.     function SetTime(const pTimeStart, pTimeEnd: TReference_Time): HRESULT; stdcall;
  2834.     function IsSyncPoint: HRESULT; stdcall;
  2835.     function SetSyncPoint(bIsSyncPoint: BOOL): HRESULT; stdcall;
  2836.     function IsPreroll: HRESULT; stdcall;
  2837.     function SetPreroll(bIsPreroll: BOOL): HRESULT; stdcall;
  2838.     function GetActualDataLength: Longint; stdcall;
  2839.     function SetActualDataLength(l: Longint): HRESULT; stdcall;
  2840.     function GetMediaType(var ppMediaType: PAM_Media_Type): HRESULT; stdcall;
  2841.     function SetMediaType(var pMediaType: TAM_Media_Type): HRESULT; stdcall;
  2842.     function IsDiscontinuity: HRESULT; stdcall;
  2843.     function SetDiscontinuity(bDiscontinuity: BOOL): HRESULT; stdcall;
  2844.     function GetMediaTime(out pTimeStart, pTimeEnd: int64): HRESULT; stdcall;
  2845.     function SetMediaTime(var pTimeStart, pTimeEnd: int64): HRESULT; stdcall;
  2846.   end;
  2847.  
  2848. const
  2849. {
  2850. EXTERN_C const IID LIBID_DirectShowStreamLib;
  2851.  
  2852. EXTERN_C const CLSID CLSID_AMMultiMediaStream;
  2853. }
  2854.   CLSID_AMMultiMediaStream: TGUID = '{49C47CE5-9BA4-11D0-8212-00C04FC32C45}';
  2855.  
  2856.   CLSID_AMDirectDrawStream: TGUID = (D1:$49C47CE4;D2:$9BA4;D3:$11D0;D4:($82,$12,$00,$C0,$4F,$C3,$2C,$45));
  2857.   CLSID_AMAudioStream: TGUID = (D1:$8496E040;D2:$AF4C;D3:$11D0;D4:($82,$12,$00,$C0,$4F,$C3,$2C,$45));
  2858.   CLSID_AMAudioData: TGUID = (D1:$F2468580;D2:$AF8A;D3:$11D0;D4:($82,$12,$00,$C0,$4F,$C3,$2C,$45));
  2859.   CLSID_AMMediaTypeStream: TGUID = (D1:$CF0F2F7C;D2:$F7BF;D3:$11D0;D4:($90,$0D,$00,$C0,$4F,$D9,$18,$9D));
  2860.  
  2861. (*==========================================================================;
  2862.  *
  2863.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2864.  *
  2865.  *  File:       ddstream.h
  2866.  *
  2867.  ***************************************************************************)
  2868.  
  2869. const
  2870.   DDSFF_PROGRESSIVERENDER = $1;
  2871.  
  2872.   IID_IDirectDrawMediaStream: TGUID = '{F4104FCE-9A70-11d0-8FDE-00C04FD9189D}';
  2873.   IID_IDirectDrawStreamSample: TGUID = '{F4104FCF-9A70-11d0-8FDE-00C04FD9189D}';
  2874.  
  2875. type
  2876.   IDirectDrawStreamSample = interface;
  2877.  
  2878.   IDirectDrawMediaStream = interface(IMediaStream)
  2879.     ['{F4104FCE-9A70-11d0-8FDE-00C04FD9189D}']
  2880.     function GetFormat(out pDDSDCurrent: TDDSurfaceDesc;
  2881.         out ppDirectDrawPalette: IDirectDrawPalette;
  2882.         out pDDSDDesired: TDDSurfaceDesc; out pdwFlags: DWORD): HRESULT; stdcall;
  2883.     function SetFormat(const pTDDSurfaceDesc: TDDSurfaceDesc;
  2884.         pDirectDrawPalette: IDirectDrawPalette): HRESULT; stdcall;
  2885.     function GetDirectDraw(out ppDirectDraw: IDirectDraw): HRESULT; stdcall;
  2886.     function SetDirectDraw(pDirectDraw: IDirectDraw): HRESULT; stdcall;
  2887.     function CreateSample(pSurface: IDirectDrawSurface; const pRect: TRect;
  2888.         dwFlags: DWORD; out ppSample: IDirectDrawStreamSample): HRESULT;
  2889.         stdcall;
  2890.     function GetTimePerFrame(var pFrameTime: TStream_Time): HRESULT; stdcall;
  2891.   end;
  2892.  
  2893.   IDirectDrawStreamSample = interface(IStreamSample)
  2894.     ['{F4104FCF-9A70-11d0-8FDE-00C04FD9189D}']
  2895.     function GetSurface(out ppDirectDrawSurface: IDirectDrawSurface;
  2896.         out pRect: TRect): HRESULT; stdcall;
  2897.     function SetRect(const pRect: TRect): HRESULT; stdcall;
  2898.   end;
  2899.  
  2900. { DirectShow Multi Media Stream }
  2901.  
  2902.   CoAMMultiMediaStream = class
  2903.     class function Create: IDirectShowStream;
  2904.     class function CreateRemote(const MachineName: string): IDirectShowStream;
  2905.   end;
  2906.  
  2907. (*==========================================================================;
  2908.  *
  2909.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2910.  *
  2911.  *  File:       austream.h
  2912.  *
  2913.  ***************************************************************************)
  2914.  
  2915. const
  2916.   IID_IAudioMediaStream: TGUID = '{F7537560-A3BE-11D0-8212-00C04FC32C45}';
  2917.   IID_IAudioStreamSample: TGUID = '{345FEE00-ABA5-11D0-8212-00C04FC32C45}';
  2918.   IID_IMemoryData: TGUID = '{327FC560-AF60-11D0-8212-00C04FC32C45}';
  2919.   IID_IAudioData: TGUID = '{54C719C0-AF60-11D0-8212-00C04FC32C45}';
  2920.  
  2921. type
  2922.   IAudioStreamSample = interface;
  2923.   IAudioData = interface;
  2924.  
  2925.   IAudioMediaStream = interface(IMediaStream)
  2926.     ['{F7537560-A3BE-11D0-8212-00C04FC32C45}']
  2927.     function GetFormat(out pWaveFormatCurrent: TWaveFormatEx): HRESULT; stdcall;
  2928.     function SetFormat(const lpWaveFormat: TWaveFormatEx): HRESULT; stdcall;
  2929.     function CreateSample(pAudioData: IAudioData; dwFlags: DWORD;
  2930.         out ppSample: IAudioStreamSample): HRESULT; stdcall;
  2931.   end;
  2932.  
  2933.   IAudioStreamSample = interface(IStreamSample)
  2934.     ['{345FEE00-ABA5-11D0-8212-00C04FC32C45}']
  2935.     function GetAudioData(out ppAudio: IAudioData): HRESULT; stdcall;
  2936.   end;
  2937. //lookat
  2938.   IMemoryData = interface(IUnknown)
  2939.     ['{327FC560-AF60-11D0-8212-00C04FC32C45}']
  2940.     function SetBuffer(cbSize: DWORD; pbData: pointer; dwFlags: DWORD): HRESULT;
  2941.         stdcall;
  2942.     function GetInfo(out pdwLength: DWORD; out ppbData: pointer;
  2943.         out pcbActualData: DWORD): HRESULT; stdcall;
  2944.     function SetActual(cbDataValid: DWORD): HRESULT; stdcall;
  2945.   end;
  2946.  
  2947.   IAudioData = interface(IMemoryData)
  2948.     ['{54C719C0-AF60-11D0-8212-00C04FC32C45}']
  2949.     function GetFormat(out pWaveFormatCurrent: TWaveFormatEx): HRESULT; stdcall;
  2950.     function SetFormat(const lpWaveFormat: TWaveFormatEx): HRESULT; stdcall;
  2951.   end;
  2952.  
  2953. (*==========================================================================;
  2954.  *
  2955.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2956.  *
  2957.  *  File:       mpconfig.h
  2958.  *
  2959.  ***************************************************************************)
  2960.  
  2961. const
  2962.   IID_IMixerPinConfig : TGUID = (D1:$593CDDE1;D2:$0759;D3:$11D1;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  2963.   IID_IMixerPinConfig2: TGUID = (D1:$ebf47182;D2:$8764;D3:$11d1;D4:($9e,$69,$00,$c0,$4f,$d7,$c1,$5b));
  2964.  
  2965. type
  2966.   TAM_Aspect_Ratio_Mode = (
  2967.     AM_ARMODE_STRETCHED,        // don't do any aspect ratio correction
  2968.     AM_ARMODE_LETTER_BOX,       // letter box the video, paint background color in the excess region
  2969.     AM_ARMODE_CROP,             // crop the video to the right aspect ratio
  2970.     AM_ARMODE_STRETCHED_AS_PRIMARY
  2971.   );
  2972.  
  2973.   IMixerPinConfig = interface(IUnknown)
  2974.     ['{593CDDE1-0759-11D1-9E69-00C04FD7C15B}']
  2975.     function SetRelativePosition(dwLeft, dwTop, dwRight, dwBottom: DWORD): HRESULT; stdcall;
  2976.     function GetRelativePosition(out dwLeft, dwTop, dwRight, dwBottom: DWORD): HRESULT; stdcall;
  2977.     function SetZOrder(dwZOrder: DWORD): HRESULT; stdcall;
  2978.     function GetZOrder(out dwZOrder: DWORD): HRESULT; stdcall;
  2979.     function SetColorKey(var pColorKey: TColorKey): HRESULT; stdcall;
  2980.     function GetColorKey(out pColorKey: TColorKey; out pColor: DWORD): HRESULT; stdcall;
  2981.     function SetBlendingParameter(dwBlendingParameter: DWORD): HRESULT; stdcall;
  2982.     function GetBlendingParameter(out dwBlendingParameter: DWORD): HRESULT; stdcall;
  2983.     function SetAspectRatioMode(amAspectRatioMode: TAM_Aspect_Ratio_Mode): HRESULT; stdcall;
  2984.     function GetAspectRatioMode(out amAspectRatioMode: TAM_Aspect_Ratio_Mode): HRESULT; stdcall;
  2985.     function SetStreamTransparent(bStreamTransparent: BOOL): HRESULT; stdcall;
  2986.     function GetStreamTransparent(out bStreamTransparent: BOOL): HRESULT; stdcall;
  2987.   end;
  2988.  
  2989.   IMixerPinConfig2 = interface(IMixerPinConfig)
  2990.     ['{EBF47182-8764-11d1-9E69-00C04FD7C15B}']
  2991.     function SetOverlaySurfaceColorControls(pColorControl: PDDColorControl): HRESULT; stdcall;
  2992.     function GetOverlaySurfaceColorControls(out pColorControl: PDDColorControl): HRESULT; stdcall;
  2993.   end;
  2994.  
  2995. (*==========================================================================;
  2996.  *
  2997.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  2998.  *
  2999.  *  File:       control.h
  3000.  *
  3001.  ***************************************************************************)
  3002.  
  3003. const
  3004.   LIBID_QuartzTypeLib: TGUID = (D1:$56A868B0;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3005.  
  3006.   IID_IAMCollection: TGUID = (D1:$56A868B9;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3007.   IID_IMediaControl: TGUID = (D1:$56A868B1;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3008.   IID_IMediaEvent: TGUID = (D1:$56A868B6;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3009.   IID_IMediaEventEx: TGUID = (D1:$56A868C0;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3010.   IID_IMediaPosition: TGUID = (D1:$56A868B2;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3011.   IID_IBasicAudio: TGUID = (D1:$56A868B3;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3012.   IID_IVideoWindow: TGUID = (D1:$56A868B4;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3013.   IID_IBasicVideo: TGUID = (D1:$56A868B5;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3014.   IID_IBasicVideo2: TGUID = (D1:$329bb360;D2:$f6ea;D3:$11d1;D4:($90,$38,$00,$a0,$c9,$69,$72,$98));
  3015.   IID_IDeferredCommand: TGUID = (D1:$56A868B8;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3016.   IID_IQueueCommand: TGUID = (D1:$56A868B7;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3017.  
  3018.   CLSID_FilgraphManager: TGUID = (D1:$E436EBB3;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  3019.  
  3020.   IID_IFilterInfo: TGUID = (D1:$56A868BA;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3021.   IID_IRegFilterInfo: TGUID = (D1:$56A868BB;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3022.   IID_IMediaTypeInfo: TGUID = (D1:$56A868BC;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3023.   IID_IPinInfo: TGUID = (D1:$56A868BD;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3024.   IID_IAMStats: TGUID = (D1:$bc9bcf80;D2:$dcd2;D3:$11d2;D4:($ab,$f6,$00,$a0,$c9,$05,$f3,$75));
  3025. type
  3026.   OAEVENT = Longint;
  3027.   OAHWND = Longint;
  3028.   OAFilterState = Longint;
  3029.  
  3030. (* Definition of interface: IAMCollection *)
  3031.   IAMCollection = interface(IDispatch)
  3032.     ['{56A868B9-0AD4-11CE-B03A-0020AF0BA770}']
  3033.     (* IAMCollection methods *)
  3034.     function get_Count(out plCount: Longint): HResult; stdcall;
  3035.     function Item(lItem: Longint; out ppUnk: IUnknown): HResult; stdcall;
  3036.     function get__NewEnum(out ppUnk: IUnknown): HResult; stdcall;
  3037.  
  3038.   end;
  3039.  
  3040. (* Definition of interface: IMediaControl *)
  3041.   IMediaControl = interface(IDispatch)
  3042.     ['{56A868B1-0AD4-11CE-B03A-0020AF0BA770}']
  3043.     (* IMediaControl methods *)
  3044.     function Run: HResult; stdcall;
  3045.     function Pause: HResult; stdcall;
  3046.     function Stop: HResult; stdcall;
  3047.     function GetState(msTimeout: DWORD; out pfs: TFilter_State): HResult; stdcall;
  3048.     function RenderFile(strFilename: WideString): HResult; stdcall;
  3049.     function AddSourceFilter(strFilename: WideString; out ppUnk: IDispatch): HResult; stdcall;
  3050.     function get_FilterCollection(out ppUnk: IDispatch): HResult; stdcall;
  3051.     function get_RegFilterCollection(out ppUnk: IDispatch): HResult; stdcall;
  3052.     function StopWhenReady: HResult; stdcall;
  3053.   end;
  3054.  
  3055. (* Definition of interface: IMediaEvent *)
  3056.   IMediaEvent = interface(IDispatch)
  3057.     ['{56A868B6-0AD4-11CE-B03A-0020AF0BA770}']
  3058.     (* IMediaEvent methods *)
  3059.     function GetEventHandle(out hEvent: OAEVENT): HRESULT; stdcall;
  3060.     function GetEvent(out lEventCode: Longint; out lParam1, lParam2: Longint;
  3061.         msTimeout: DWORD): HRESULT; stdcall;
  3062.     function WaitForCompletion(msTimeout: DWORD; out pEvCode: Longint):
  3063.         HRESULT; stdcall;
  3064.     function CancelDefaultHandling(lEvCode: Longint): HRESULT; stdcall;
  3065.     function RestoreDefaultHandling(lEvCode: Longint): HRESULT; stdcall;
  3066.     function FreeEventParams(lEvCode: Longint; lParam1, lParam2: Longint):
  3067.         HRESULT; stdcall;
  3068.   end;
  3069.  
  3070. (* Definition of interface: IMediaEventEx *)
  3071.   IMediaEventEx = interface(IMediaEvent)
  3072.     ['{56A868C0-0AD4-11CE-B03A-0020AF0BA770}']
  3073.     (* IMediaEventEx methods *)
  3074.     function SetNotifyWindow(hwnd: OAHWND; lMsg: Longint;
  3075.         lInstanceData: Longint): HRESULT; stdcall;
  3076.     function SetNotifyFlags(lNoNotifyFlags: Longint): HRESULT; stdcall;
  3077.     function GetNotifyFlags(out lplNoNotifyFlags): HRESULT; stdcall; //longint
  3078.   end;
  3079.  
  3080. (* Definition of interface: IMediaPosition *)
  3081.   IMediaPosition = interface(IDispatch)
  3082.     ['{56A868B2-0AD4-11CE-B03A-0020AF0BA770}']
  3083.     (* IMediaPosition methods *)
  3084.     function get_Duration(out plength: TRefTime): HResult; stdcall;
  3085.     function put_CurrentPosition(llTime: TRefTime): HResult; stdcall;
  3086.     function get_CurrentPosition(out pllTime: TRefTime): HResult; stdcall;
  3087.     function get_StopTime(out pllTime: TRefTime): HResult; stdcall;
  3088.     function put_StopTime(llTime: TRefTime): HResult; stdcall;
  3089.     function get_PrerollTime(out pllTime: TRefTime): HResult; stdcall;
  3090.     function put_PrerollTime(llTime: TRefTime): HResult; stdcall;
  3091.     function put_Rate(dRate: double): HResult; stdcall;
  3092.     function get_Rate(out pdRate: double): HResult; stdcall;
  3093.     function CanSeekForward(out pCanSeekForward: Longint): HResult; stdcall;
  3094.     function CanSeekBackward(out pCanSeekBackward: Longint): HResult; stdcall;
  3095.   end;
  3096.  
  3097. (* Definition of interface: IBasicAudio *)
  3098.   IBasicAudio = interface(IDispatch)
  3099.     ['{56A868B3-0AD4-11CE-B03A-0020AF0BA770}']
  3100.     (* IBasicAudio methods *)
  3101.     function put_Volume(lVolume: Longint): HResult; stdcall;
  3102.     function get_Volume(out plVolume: Longint): HResult; stdcall;
  3103.     function put_Balance(lBalance: Longint): HResult; stdcall;
  3104.     function get_Balance(out plBalance: Longint): HResult; stdcall;
  3105.   end;
  3106.  
  3107. (* Definition of interface: IVideoWindow *)
  3108.   IVideoWindow = interface(IDispatch)
  3109.     ['{56A868B4-0AD4-11CE-B03A-0020AF0BA770}']
  3110.     (* IVideoWindow methods *)
  3111.     function put_Caption(strCaption: WideString): HResult; stdcall;
  3112.     function get_Caption(out strCaption: WideString): HResult; stdcall;
  3113.     function put_WindowStyle(WindowStyle: Longint): HResult; stdcall;
  3114.     function get_WindowStyle(out WindowStyle: Longint): HResult; stdcall;
  3115.     function put_WindowStyleEx(WindowStyleEx: Longint): HResult; stdcall;
  3116.     function get_WindowStyleEx(out WindowStyleEx: Longint): HResult; stdcall;
  3117.     function put_AutoShow(AutoShow: LongBool): HResult; stdcall;
  3118.     function get_AutoShow(out AutoShow: LongBool): HResult; stdcall;
  3119.     function put_WindowState(WindowState: Longint): HResult; stdcall;
  3120.     function get_WindowState(out WindowState: Longint): HResult; stdcall;
  3121.     function put_BackgroundPalette(BackgroundPalette: Longint): HResult; stdcall;
  3122.     function get_BackgroundPalette(out pBackgroundPalette: Longint): HResult; stdcall;
  3123.     function put_Visible(Visible: LongBool): HResult; stdcall;
  3124.     function get_Visible(out pVisible: LongBool): HResult; stdcall;
  3125.     function put_Left(Left: Longint): HResult; stdcall;
  3126.     function get_Left(out pLeft: Longint): HResult; stdcall;
  3127.     function put_Width(Width: Longint): HResult; stdcall;
  3128.     function get_Width(out pWidth: Longint): HResult; stdcall;
  3129.     function put_Top(Top: Longint): HResult; stdcall;
  3130.     function get_Top(out pTop: Longint): HResult; stdcall;
  3131.     function put_Height(Height: Longint): HResult; stdcall;
  3132.     function get_Height(out pHeight: Longint): HResult; stdcall;
  3133.     function put_Owner(Owner: OAHWND): HResult; stdcall;
  3134.     function get_Owner(out Owner: OAHWND): HResult; stdcall;
  3135.     function put_MessageDrain(Drain: OAHWND): HResult; stdcall;
  3136.     function get_MessageDrain(out Drain: OAHWND): HResult; stdcall;
  3137.     function get_BorderColor(out Color: Longint): HResult; stdcall;
  3138.     function put_BorderColor(Color: Longint): HResult; stdcall;
  3139.     function get_FullScreenMode(out FullScreenMode: LongBool): HResult; stdcall;
  3140.     function put_FullScreenMode(FullScreenMode: LongBool): HResult; stdcall;
  3141.     function SetWindowForeground(Focus: Longint): HResult; stdcall;
  3142.     function NotifyOwnerMessage(hwnd: Longint; uMsg, wParam, lParam: Longint): HResult; stdcall;
  3143.     function SetWindowPosition(Left, Top, Width, Height: Longint): HResult; stdcall;
  3144.     function GetWindowPosition(out pLeft, pTop, pWidth, pHeight: Longint): HResult; stdcall;
  3145.     function GetMinIdealImageSize(out pWidth, pHeight: Longint): HResult; stdcall;
  3146.     function GetMaxIdealImageSize(out pWidth, pHeight: Longint): HResult; stdcall;
  3147.     function GetRestorePosition(out pLeft, pTop, pWidth, pHeight: Longint): HResult; stdcall;
  3148.     function HideCursor(HideCursor: LongBool): HResult; stdcall;
  3149.     function IsCursorHidden(out CursorHidden: LongBool): HResult; stdcall;
  3150.   end;
  3151.  
  3152. (* Definition of interface: IBasicVideo *)
  3153.   IBasicVideo = interface(IDispatch)
  3154.     ['{56A868B5-0AD4-11CE-B03A-0020AF0BA770}']
  3155.     (* IBasicVideo methods *)
  3156.     function get_AvgTimePerFrame(out pAvgTimePerFrame: TRefTime): HResult; stdcall;
  3157.     function get_BitRate(out pBitRate: Longint): HResult; stdcall;
  3158.     function get_BitErrorRate(out pBitErrorRate: Longint): HResult; stdcall;
  3159.     function get_VideoWidth(out pVideoWidth: Longint): HResult; stdcall;
  3160.     function get_VideoHeight(out pVideoHeight: Longint): HResult; stdcall;
  3161.     function put_SourceLeft(SourceLeft: Longint): HResult; stdcall;
  3162.     function get_SourceLeft(out pSourceLeft: Longint): HResult; stdcall;
  3163.     function put_SourceWidth(SourceWidth: Longint): HResult; stdcall;
  3164.     function get_SourceWidth(out pSourceWidth: Longint): HResult; stdcall;
  3165.     function put_SourceTop(SourceTop: Longint): HResult; stdcall;
  3166.     function get_SourceTop(out pSourceTop: Longint): HResult; stdcall;
  3167.     function put_SourceHeight(SourceHeight: Longint): HResult; stdcall;
  3168.     function get_SourceHeight(out pSourceHeight: Longint): HResult; stdcall;
  3169.     function put_DestinationLeft(DestinationLeft: Longint): HResult; stdcall;
  3170.     function get_DestinationLeft(out pDestinationLeft: Longint): HResult; stdcall;
  3171.     function put_DestinationWidth(DestinationWidth: Longint): HResult; stdcall;
  3172.     function get_DestinationWidth(out pDestinationWidth: Longint): HResult; stdcall;
  3173.     function put_DestinationTop(DestinationTop: Longint): HResult; stdcall;
  3174.     function get_DestinationTop(out pDestinationTop: Longint): HResult; stdcall;
  3175.     function put_DestinationHeight(DestinationHeight: Longint): HResult; stdcall;
  3176.     function get_DestinationHeight(out pDestinationHeight: Longint): HResult; stdcall;
  3177.     function SetSourcePosition(Left, Top, Width, Height: Longint): HResult; stdcall;
  3178.     function GetSourcePosition(out pLeft, pTop, pWidth, pHeight: Longint): HResult; stdcall;
  3179.     function SetDefaultSourcePosition: HResult; stdcall;
  3180.     function SetDestinationPosition(Left, Top, Width, Height: Longint): HResult; stdcall;
  3181.     function GetDestinationPosition(out pLeft, pTop, pWidth, pHeight: Longint): HResult; stdcall;
  3182.     function SetDefaultDestinationPosition: HResult; stdcall;
  3183.     function GetVideoSize(out pWidth, Height: Longint): HResult; stdcall;
  3184.     function GetVideoPaletteEntries(StartIndex, Entries: Longint;
  3185.         out pRetrieved: Longint; out pPalette): HResult; stdcall;
  3186.     function GetCurrentImage(var BufferSize: Longint; var pDIBImage): HResult; stdcall;
  3187.     function IsUsingDefaultSource: HResult; stdcall;
  3188.     function IsUsingDefaultDestination: HResult; stdcall;
  3189.   end;
  3190.  
  3191. (* Definition of interface: IBasicVideo2 *)
  3192.   IBasicVideo2 = interface(IBasicVideo)
  3193.     ['{329bb360-f6ea-11d1-9038-00a0c9697298}']
  3194.     (* IBasicVideo2 methods *)
  3195.     function GetPreferredAspectRatio(out plAspectX, plAspectY: Longint): HRESULT; stdcall;
  3196.  
  3197.   end;
  3198.  
  3199. (* Definition of interface: IDeferredCommand *)
  3200.   IDeferredCommand = interface(IDispatch)
  3201.     ['{56A868B8-0AD4-11CE-B03A-0020AF0BA770}']
  3202.     (* IDeferredCommand methods *)
  3203.     function Cancel: HRESULT; stdcall;
  3204.     function Confidence(out pConfidence: Longint): HRESULT; stdcall;
  3205.     function Postpone(newtime: TRefTime): HRESULT; stdcall;
  3206.     function GetHResult(out phrResult: HRESULT): HRESULT; stdcall;
  3207.   end;
  3208.  
  3209. (* Definition of interface: IQueueCommand *)
  3210.   IQueueCommand = interface(IUnknown)
  3211.     ['{56A868B7-0AD4-11CE-B03A-0020AF0BA770}']
  3212.     (* IQueueCommand methods *)
  3213.     function InvokeAtStreamTime(out pCmd: IDeferredCommand; time: TRefTime;
  3214.         const iid: TGUID; dispidMethod: Longint; wFlags: SmallInt;
  3215.         cArgs: Longint; const pDispParams: OleVariant; var pvarResult: OleVariant;
  3216.         out puArgErr: SmallInt):  HRESULT; stdcall;
  3217.     function InvokeAtPresentationTime(out pCmd: IDeferredCommand;
  3218.         time: TRefTime; const iid: TGUID; dispidMethod: Longint;
  3219.         wFlags: SmallInt; cArgs: Longint; const pDispParams: OleVariant;
  3220.         var pvarResult: OleVariant; out puArgErr: SmallInt): HRESULT; stdcall;
  3221.   end;
  3222.  
  3223. (* Definition of interface: IFilterInfo *)
  3224.   IFilterInfo = interface(IDispatch)
  3225.     ['{56A868BA-0AD4-11CE-B03A-0020AF0BA770}']
  3226.     (* IFilterInfo methods *)
  3227.     function FindPin(strPinID: WideString; out ppUnk: IDispatch): HResult; stdcall;
  3228.     function get_Name(out strName: WideString): HResult; stdcall;
  3229.     function get_VendorInfo(out strVendorInfo: WideString): HResult; stdcall;
  3230.     function get_Filter(out ppUnk: IUnknown): HResult; stdcall;
  3231.     function get_Pins(out ppUnk: IDispatch): HResult; stdcall;
  3232.     function get_IsFileSource(out pbIsSource: LongBool): HResult; stdcall;
  3233.     function get_Filename(out pstrFilename: WideString): HResult; stdcall;
  3234.     function put_Filename(strFilename: WideString): HResult; stdcall;
  3235.   end;
  3236.  
  3237. (* Definition of interface: IRegFilterInfo *)
  3238.   IRegFilterInfo = interface(IDispatch)
  3239.     ['{56A868BB-0AD4-11CE-B03A-0020AF0BA770}']
  3240.     (* IRegFilterInfo methods *)
  3241.     function get_Name(out strName: WideString): HResult; stdcall;
  3242.     function Filter(out ppUnk: IDispatch): HResult; stdcall;
  3243.   end;
  3244.  
  3245. (* Definition of interface: IMediaTypeInfo *)
  3246.   IMediaTypeInfo = interface(IDispatch)
  3247.     ['{56A868BC-0AD4-11CE-B03A-0020AF0BA770}']
  3248.     (* IMediaTypeInfo methods *)
  3249.     function Get_Type(out strType: WideString): HResult; stdcall;
  3250.     function Get_Subtype(out strType: WideString): HResult; stdcall;
  3251.   end;
  3252.  
  3253. (* Definition of interface: IPinInfo *)
  3254.   IPinInfo = interface(IDispatch)
  3255.     ['{56A868BD-0AD4-11CE-B03A-0020AF0BA770}']
  3256.     (* IPinInfo methods *)
  3257.     function get_Pin(out ppUnk: IUnknown): HResult; stdcall;
  3258.     function get_ConnectedTo(out ppUnk: IDispatch): HResult; stdcall;
  3259.     function get_ConnectionMediaType(out ppUnk: IDispatch): HResult; stdcall;
  3260.     function get_FilterInfo(out ppUnk: IDispatch): HResult; stdcall;
  3261.     function get_Name(out ppUnk: WideString): HResult; stdcall;
  3262.     function get_Direction(out ppDirection: Longint): HResult; stdcall;
  3263.     function get_PinID(out strPinID: WideString): HResult; stdcall;
  3264.     function get_MediaTypes(out ppUnk: IDispatch): HResult; stdcall;
  3265.     function Connect(pPin: IUnknown): HResult; stdcall;
  3266.     function ConnectDirect(pPin: IUnknown): HResult; stdcall;
  3267.     function ConnectWithType(pPin: IUnknown; pMediaType: IDispatch): HResult; stdcall;
  3268.     function Disconnect: HResult; stdcall;
  3269.     function Render: HResult; stdcall;
  3270.   end;
  3271.  
  3272. (* Definition of interface: IAMStats *)
  3273.   IAMStats = interface(IDispatch)
  3274.     ['{bc9bcf80-dcd2-11d2-abf6-00a0c905f375}']
  3275.     (* IAMStats methods *)
  3276.     function Reset: HResult; stdcall;
  3277.     function get_Count(out plCount: Longint): HResult; stdcall;
  3278.     function GetValueByIndex(lIndex: longint; out szName: WideString; out lCount: longint;
  3279.              out dLast, dAverage, dStdDev, dMin, dMax: double): HResult; stdcall;
  3280.     function GetValueByName(szName: WideString; out lIndex, lCount: Longint;
  3281.              out dLast, dAverage, dStdDev, dMin, dMax: double): HResult; stdcall;
  3282.     function GetIndex(szName: WideString; lCreate: longint; out plIndex: longint): HResult; stdcall;
  3283.     function AddValue(lIndex: longint; dValue: double): HResult; stdcall;
  3284.   end;
  3285.  
  3286. { Filgraph type info }
  3287.  
  3288.   CoFilgraphManager = class
  3289.     class function Create: IMediaControl;
  3290.     class function CreateRemote(const MachineName: string): IMediaControl;
  3291.   end;
  3292.  
  3293. (*==========================================================================;
  3294.  *
  3295.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3296.  *
  3297.  *  File:       qnetwork.h
  3298.  *
  3299.  ***************************************************************************)
  3300.  
  3301. const
  3302.   LIBID_QuartzNetTypeLib: TGUID = (D1:$56A868B1;D2:$0AD4;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  3303.  
  3304.   IID_IAMNetShowConfig: TGUID = (D1:$FA2AA8F1;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3305.   IID_IAMChannelInfo: TGUID = (D1:$FA2AA8F2;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3306.   IID_IAMNetworkStatus: TGUID = (D1:$FA2AA8F3;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3307.   IID_IAMExtendedSeeking: TGUID = (D1:$FA2AA8F9;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3308.   IID_IAMNetShowExProps: TGUID = (D1:$FA2AA8F5;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3309.   IID_IAMExtendedErrorInfo: TGUID = (D1:$FA2AA8F6;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3310.   IID_IAMMediaContent: TGUID = (D1:$FA2AA8EF;D2:$8B62;D3:$11D0;D4:($A5,$20,$00,$00,$00,$00,$00,$00));
  3311.   IID_IAMMediaContent2 : TGUID = (D1:$CE8F78C1;D2:$74D9;D3:$11D2;D4:($B0,$9D,$00,$A0,$C9,$A8,$11,$17));
  3312.   IID_IAMNetShowPreroll: TGUID = (D1:$AAE7E4E2;D2:$6388;D3:$11D1;D4:($8D,$93,$00,$60,$97,$C9,$A2,$B2));
  3313.   IID_IDShowPlugin     : TGUID = (D1:$4746B7C8;D2:$700E;D3:$11D1;D4:($BE,$CC,$00,$C0,$4F,$B6,$E9,$37));
  3314.  
  3315. //AMExtendedSeekingCapabilities
  3316. const
  3317.     AM_EXSEEK_CANSEEK               = 1;
  3318.     AM_EXSEEK_CANSCAN               = 2;
  3319.     AM_EXSEEK_MARKERSEEK            = 4;
  3320.     AM_EXSEEK_SCANWITHOUTCLOCK      = 8;
  3321.     AM_EXSEEK_NOSTANDARDREPAINT     = 16;
  3322.     AM_EXSEEK_BUFFERING             = 32;
  3323.     AM_EXSEEK_SENDS_VIDEOFRAMEREADY = 64;
  3324.  
  3325. type
  3326.   TDate = record
  3327.     da_year: Integer;   // Year - 1980
  3328.     da_day: Byte;       // Day of the month
  3329.     da_mon: Byte;       // Month (1 = Jan)
  3330.   end;
  3331.  
  3332. (* Definition of interface: IAMNetShowConfig *)
  3333.   IAMNetShowConfig = interface(IDispatch)
  3334.     ['{FA2AA8F1-8B62-11D0-A520-000000000000}']
  3335.     (* IAMNetShowConfig methods *)
  3336.     function get_BufferingTime(var pBufferingTime: double): HRESULT; stdcall;
  3337.     function put_BufferingTime(BufferingTime: double): HRESULT; stdcall;
  3338.     function get_UseFixedUDPPort(var pUseFixedUDPPort: WordBool): HRESULT; stdcall;
  3339.     function put_UseFixedUDPPort(UseFixedUDPPort: WordBool): HRESULT; stdcall;
  3340.     function get_FixedUDPPort(var pFixedUDPPort: Longint): HRESULT; stdcall;
  3341.     function put_FixedUDPPort(FixedUDPPort: Longint): HRESULT; stdcall;
  3342.     function get_UseHTTPProxy(var pUseHTTPProxy: WordBool): HRESULT; stdcall;
  3343.     function put_UseHTTPProxy(UseHTTPProxy: WordBool): HRESULT; stdcall;
  3344.     function get_EnableAutoProxy(var pEnableAutoProxy: WordBool): HRESULT; stdcall;
  3345.     function put_EnableAutoProxy(EnableAutoProxy: WordBool): HRESULT; stdcall;
  3346.     function get_HTTPProxyHost(var pbstrHTTPProxyHost: TBSTR): HRESULT; stdcall;
  3347.     function put_HTTPProxyHost(bstrHTTPProxyHost: TBSTR): HRESULT; stdcall;
  3348.     function get_HTTPProxyPort(var pHTTPProxyPort: Longint): HRESULT; stdcall;
  3349.     function put_HTTPProxyPort(HTTPProxyPort: Longint): HRESULT; stdcall;
  3350.     function get_EnableMulticast(var pEnableMulticast: WordBool): HRESULT; stdcall;
  3351.     function put_EnableMulticast(EnableMulticast: WordBool): HRESULT; stdcall;
  3352.     function get_EnableUDP(var pEnableUDP: WordBool): HRESULT; stdcall;
  3353.     function put_EnableUDP(EnableUDP: WordBool): HRESULT; stdcall;
  3354.     function get_EnableTCP(var pEnableTCP: WordBool): HRESULT; stdcall;
  3355.     function put_EnableTCP(EnableTCP: WordBool): HRESULT; stdcall;
  3356.     function get_EnableHTTP(var pEnableHTTP: WordBool): HRESULT; stdcall;
  3357.     function put_EnableHTTP(EnableHTTP: WordBool): HRESULT; stdcall;
  3358.   end;
  3359.  
  3360. (* Definition of interface: IAMChannelInfo *)
  3361.   IAMChannelInfo = interface(IDispatch)
  3362.     ['{FA2AA8F2-8B62-11D0-A520-000000000000}']
  3363.     (* IAMChannelInfo methods *)
  3364.     function get_ChannelName(var pbstrChannelName: TBSTR): HRESULT; stdcall;
  3365.     function get_ChannelDescription(var pbstrChannelDescription: TBSTR): HRESULT; stdcall;
  3366.     function get_ChannelURL(var pbstrChannelURL: TBSTR): HRESULT; stdcall;
  3367.     function get_ContactAddress(var pbstrContactAddress: TBSTR): HRESULT; stdcall;
  3368.     function get_ContactPhone(var pbstrContactPhone: TBSTR): HRESULT; stdcall;
  3369.     function get_ContactEmail(var pbstrContactEmail: TBSTR): HRESULT; stdcall;
  3370.   end;
  3371.  
  3372. (* Definition of interface: IAMNetworkStatus *)
  3373.   IAMNetworkStatus = interface(IDispatch)
  3374.     ['{FA2AA8F3-8B62-11D0-A520-000000000000}']
  3375.     (* IAMNetworkStatus methods *)
  3376.     function get_ReceivedPackets(var pReceivedPackets: Longint): HRESULT; stdcall;
  3377.     function get_RecoveredPackets(var pRecoveredPackets: Longint): HRESULT; stdcall;
  3378.     function get_LostPackets(var pLostPackets: Longint): HRESULT; stdcall;
  3379.     function get_ReceptionQuality(var pReceptionQuality: Longint): HRESULT; stdcall;
  3380.     function get_BufferingCount(var pBufferingCount: Longint): HRESULT; stdcall;
  3381.     function get_IsBroadcast(var pIsBroadcast: WordBool): HRESULT; stdcall;
  3382.     function get_BufferingProgress(var pBufferingProgress: Longint): HRESULT; stdcall;
  3383.   end;
  3384.  
  3385. (* Definition of interface: IAMExtendedSeeking *)
  3386.   IAMExtendedSeeking = interface(IDispatch)
  3387.     ['{FA2AA8F9-8B62-11D0-A520-000000000000}']
  3388.     (* IAMExtendedSeeking methods *)
  3389.     function get_ExSeekCapabilities(var pExCapabilities: Longint): HRESULT; stdcall;
  3390.     function get_MarkerCount(var pMarkerCount: Longint): HRESULT; stdcall;
  3391.     function get_CurrentMarker(var pCurrentMarker: Longint): HRESULT; stdcall;
  3392.     function GetMarkerTime(MarkerNum: Longint; var pMarkerTime: double): HRESULT; stdcall;
  3393.     function GetMarkerName(MarkerNum: Longint; var pbstrMarkerName: TBSTR): HRESULT; stdcall;
  3394.     function put_PlaybackSpeed(Speed: double): HRESULT; stdcall;
  3395.     function get_PlaybackSpeed(var pSpeed: double): HRESULT; stdcall;
  3396.   end;
  3397.  
  3398. (* Definition of interface: IAMNetShowExProps *)
  3399.   IAMNetShowExProps = interface(IDispatch)
  3400.     ['{FA2AA8F5-8B62-11D0-A520-000000000000}']
  3401.     (* IAMNetShowExProps methods *)
  3402.     function get_SourceProtocol(var pSourceProtocol: Longint): HRESULT; stdcall;
  3403.     function get_Bandwidth(var pBandwidth: Longint): HRESULT; stdcall;
  3404.     function get_ErrorCorrection(var pbstrErrorCorrection: TBSTR): HRESULT; stdcall;
  3405.     function get_CodecCount(var pCodecCount: Longint): HRESULT; stdcall;
  3406.     function GetCodecInstalled(CodecNum: Longint; var pCodecInstalled: WordBool): HRESULT; stdcall;
  3407.     function GetCodecDescription(CodecNum: Longint; var pbstrCodecDescription: TBSTR): HRESULT; stdcall;
  3408.     function GetCodecURL(CodecNum: Longint; var pbstrCodecURL: TBSTR): HRESULT; stdcall;
  3409.     function get_CreationDate(var pCreationDate: TDate): HRESULT; stdcall;
  3410.     function get_SourceLink(var pbstrSourceLink: TBSTR): HRESULT; stdcall;
  3411.   end;
  3412.  
  3413. (* Definition of interface: IAMExtendedErrorInfo *)
  3414.   IAMExtendedErrorInfo = interface(IDispatch)
  3415.     ['{FA2AA8F6-8B62-11D0-A520-000000000000}']
  3416.     (* IAMExtendedErrorInfo methods *)
  3417.     function get_HasError(var pHasError: WordBool): HRESULT; stdcall;
  3418.     function get_ErrorDescription(var pbstrErrorDescription: TBSTR): HRESULT; stdcall;
  3419.     function get_ErrorCode(var pErrorCode: Longint): HRESULT; stdcall;
  3420.   end;
  3421.  
  3422. (* Definition of interface: IAMMediaContent *)
  3423.   IAMMediaContent = interface(IDispatch)
  3424.     ['{FA2AA8EF-8B62-11D0-A520-000000000000}']
  3425.     (* IAMMediaContent methods *)
  3426.     function get_AuthorName(var pbstrAuthorName: TBSTR): HRESULT; stdcall;
  3427.     function get_Title(var pbstrTitle: TBSTR): HRESULT; stdcall;
  3428.     function get_Rating(var pbstrRating: TBSTR): HRESULT; stdcall;
  3429.     function get_Description(var pbstrDescription: TBSTR): HRESULT; stdcall;
  3430.     function get_Copyright(var pbstrCopyright: TBSTR): HRESULT; stdcall;
  3431.     function get_BaseURL(var pbstrBaseURL: TBSTR): HRESULT; stdcall;
  3432.     function get_LogoURL(var pbstrLogoURL: TBSTR): HRESULT; stdcall;
  3433.     function get_LogoIconURL(var pbstrLogoURL: TBSTR): HRESULT; stdcall;
  3434.     function get_WatermarkURL(var pbstrWatermarkURL: TBSTR): HRESULT; stdcall;
  3435.     function get_MoreInfoURL(var pbstrMoreInfoURL: TBSTR): HRESULT; stdcall;
  3436.   end;
  3437.  
  3438. (* Definition of interface: IAMMediaContent2 *)
  3439.   IAMMediaContent2 = interface(IDispatch)
  3440.     ['{CE8F78C1-74D9-11D2-B09D-00A0C9A81117}']
  3441.     (* IAMMediaContent2 methods *)
  3442.     function get_MediaParameter(var EntryNum: longint; var bstrName, pbstrValue: TBSTR): HRESULT; stdcall;
  3443.     function get_MediaParameterName(var EntryNum, Index: longint; var pbstrName: TBSTR): HRESULT; stdcall;
  3444.     function get_PlaylistCount(var pNumberEntries: longint): HRESULT; stdcall;
  3445.   end;
  3446.  
  3447. (* Definition of interface: IAMNetShowPreroll *)
  3448.   IAMNetShowPreroll = interface(IDispatch)
  3449.     ['{AAE7E4E2-6388-11D1-8D93-006097C9A2B2}']
  3450.     {* IAMNetShowPreroll methods *}
  3451.     function put_Preroll(var fPreroll : WordBool): HRESULT; stdcall;
  3452.     function get_Preroll(var pfPreroll: WordBool): HRESULT; stdcall;
  3453.   end;
  3454.  
  3455. (* Definition of interface: IDShowPlugin *)
  3456.   IDShowPlugin = interface(IUnknown)
  3457.     ['{4746B7C8-700E-11D1-BECC-00C04FB6E937}']
  3458.     {* IDShowPlugin methods *}
  3459.     function get_URL(var pURL: TBSTR): HRESULT; stdcall;
  3460.     function get_UserAgent(var pUserAgent: TBSTR): HRESULT; stdcall;
  3461.   end;
  3462.  
  3463. (*==========================================================================;
  3464.  *
  3465.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3466.  *
  3467.  *  File:       playlist.h
  3468.  *
  3469.  ***************************************************************************)
  3470.  
  3471. const
  3472.   IID_IAMPlayListItem: TGUID = (D1:$56A868FF;D2:$0AD4;D3:$11CE;D4:($B0,$A3,$00,$20,$AF,$0B,$A7,$70));
  3473.   IID_IAMPlayList: TGUID = (D1:$56A868FE;D2:$0AD4;D3:$11CE;D4:($B0,$A3,$00,$20,$AF,$0B,$A7,$70));
  3474.   IID_ISpecifyParticularPages : TGUID = '{4C437B91-6E9E-11d1-A704-006097C4E476}';
  3475.   IID_IAMRebuild: TGUID = '{02EF04DD-7580-11d1-BECE-00C04FB6E937}';
  3476.   SPECIFYPAGES_STATISTICS: TGUID = (D1:$4c437b92;D2:$6e9e;D3:$11d1;D4:($a7,$4,$0,$60,$97,$c4,$e4,$76));
  3477.  
  3478.  
  3479. type
  3480.   TAMPlayListItemFlags = (
  3481.     AMPLAYLISTITEMFLAGS_INVALID_0,
  3482.     AMPLAYLISTITEM_CANSKIP,
  3483.     AMPLAYLISTITEM_CANBIND
  3484.   );
  3485.  
  3486.   IAMPlayListItem = interface(IUnknown)
  3487.     ['{56A868FF-0AD4-11CE-B0A3-0020AF0BA770}']
  3488.     function GetFlags(out pdwFlags: DWORD): HResult; stdcall;
  3489.     function GetSourceCount(out pdwSources: DWORD): HResult; stdcall;
  3490.     function GetSourceURL(dwSourceIndex: DWORD; out pbstrURL: WideChar): HResult; stdcall;
  3491.     function GetSourceStart(dwSourceIndex: DWORD; out prtStart: TReference_Time): HResult; stdcall;
  3492.     function GetSourceDuration(dwSourceIndex: DWORD;
  3493.         out prtDuration: TReference_Time): HResult; stdcall;
  3494.     function GetSourceStartMarker(dwSourceIndex: DWORD;
  3495.         out pdwMarker: DWORD): HResult; stdcall;
  3496.     function GetSourceEndMarker(dwSourceIndex: DWORD;
  3497.         out pdwMarker: DWORD): HResult; stdcall;
  3498.     function GetSourceStartMarkerName(dwSourceIndex: DWORD;
  3499.         out pbstrStartMarker: WideChar): HResult; stdcall;
  3500.     function GetSourceEndMarkerName(dwSourceIndex: DWORD;
  3501.         out pbstrEndMarker: WideChar): HResult; stdcall;
  3502.     function GetLinkURL(out pbstrURL: WideChar): HResult; stdcall;
  3503.     function GetScanDuration(dwSourceIndex: DWORD;
  3504.         out prtScanDuration: TREFERENCE_TIME): HResult; stdcall;
  3505.   end;
  3506.  
  3507.   TAMPlayListFlags = (
  3508.     AMPLAYLIST_INVALID,
  3509.     AMPLAYLIST_STARTINSCANMODE,
  3510.     AMPLAYLIST_FORCEBANNER
  3511.   );
  3512.  
  3513.   TAMPlayListEventFlags = TOleEnum;
  3514. const
  3515.     AMPLAYLISTEVENT_RESUME      = $0;
  3516.     AMPLAYLISTEVENT_BREAK    = $1;
  3517.     AMPLAYLISTEVENT_NEXT    = $2;
  3518.     AMPLAYLISTEVENT_MASK    = $f;
  3519.     AMPLAYLISTEVENT_REFRESH    = $10;
  3520.  
  3521. type
  3522.   IAMPlayList = interface(IUnknown)
  3523.     ['{56A868FE-0AD4-11CE-B0A3-0020AF0BA770}']
  3524.     function GetFlags(out pdwFlags: DWORD): HResult; stdcall;
  3525.     function GetItemCount(out pdwItems: DWORD): HResult; stdcall;
  3526.     function GetItem(dwItemIndex: DWORD; out ppItem: IAMPlayListItem): HResult; stdcall;
  3527.     function GetNamedEvent(var pwszEventName: WideChar; dwItemIndex: DWORD;
  3528.         out ppItem: IAMPlayListItem; out pdwFlags: DWORD): HResult; stdcall;
  3529.     function GetRepeatInfo(out pdwRepeatCount, pdwRepeatStart,
  3530.         pdwRepeatEnd: DWORD): HResult; stdcall;
  3531.   end;
  3532.  
  3533.   ISpecifyParticularPages = interface(IUnknown)
  3534.     ['{4C437B91-6E9E-11d1-A704-006097C4E476}']
  3535.     function GetPages(const guidWhatPages: TGUID; out pPages: PGUID): HResult; stdcall;
  3536.   end;
  3537.  
  3538.   IAMRebuild = interface(IUnknown)
  3539.     ['{02EF04DD-7580-11d1-BECE-00C04FB6E937}']
  3540.     function RebuildNow: HResult; stdcall;
  3541.   end;
  3542.  
  3543. (*==========================================================================;
  3544.  *
  3545.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3546.  *
  3547.  *  File:       amvideo.h
  3548.  *
  3549.  ***************************************************************************)
  3550.  
  3551. const
  3552.   IID_IDirectDrawVideo: TGUID = (D1:$36D39EB0;D2:$DD75;D3:$11CE;D4:($BF,$0E,$00,$AA,$00,$55,$59,$5A));
  3553.   IID_IQualProp: TGUID = (D1:$1BD0ECB0;D2:$F8E2;D3:$11CE;D4:($AA,$C6,$00,$20,$AF,$0B,$99,$A3));
  3554.   IID_IFullScreenVideo: TGUID = (D1:$DD1D7110;D2:$7836;D3:$11CF;D4:($BF,$47,$00,$AA,$00,$55,$59,$5A));
  3555.   IID_IFullScreenVideoEx: TGUID = (D1:$53479470;D2:$F1DD;D3:$11CF;D4:($BC,$42,$00,$AA,$00,$AC,$74,$F6));
  3556.   IID_IBaseVideoMixer: TGUID = (D1:$61DED640;D2:$E912;D3:$11CE;D4:($A0,$99,$00,$AA,$00,$47,$9A,$58));
  3557.  
  3558. const
  3559.   AMDDS_NONE    = $00;        // No use for DCI/DirectDraw
  3560.   AMDDS_DCIPS   = $01;        // Use DCI primary surface
  3561.   AMDDS_PS      = $02;        // Use DirectDraw primary
  3562.   AMDDS_RGBOVR  = $04;        // RGB overlay surfaces
  3563.   AMDDS_YUVOVR  = $08;        // YUV overlay surfaces
  3564.   AMDDS_RGBOFF  = $10;        // RGB offscreen surfaces
  3565.   AMDDS_YUVOFF  = $20;        // YUV offscreen surfaces
  3566.   AMDDS_RGBFLP  = $40;        // RGB flipping surfaces
  3567.   AMDDS_YUVFLP  = $80;        // YUV flipping surfaces
  3568.   AMDDS_ALL     = $FF;        // ALL the previous flags
  3569.   AMDDS_DEFAULT = AMDDS_ALL;   // Use all available surfaces
  3570.  
  3571.   AMDDS_YUV = AMDDS_YUVOFF or AMDDS_YUVOVR or AMDDS_YUVFLP;
  3572.   AMDDS_RGB = AMDDS_RGBOFF or AMDDS_RGBOVR or AMDDS_RGBFLP;
  3573.   AMDDS_PRIMARY = AMDDS_DCIPS or AMDDS_PS;
  3574.  
  3575. type
  3576.   IDirectDrawVideo = interface(IUnknown)
  3577.     ['{36D39EB0-DD75-11CE-BF0E-00AA0055595A}']
  3578.     // IDirectDrawVideo methods
  3579.     function GetSwitches(out pSwitches: DWORD): HRESULT; stdcall;
  3580.     function SetSwitches(pSwitches: DWORD): HRESULT; stdcall;
  3581.     function GetCaps(out pCaps: TDDCaps): HRESULT; stdcall;
  3582.     function GetEmulatedCaps(out pCaps: TDDCaps): HRESULT; stdcall;
  3583.     function GetSurfaceDesc(out pSurfaceDesc: TDDSurfaceDesc): HRESULT; stdcall;
  3584.     function GetFourCCCodes(out pCount, pCodes: DWORD): HRESULT; stdcall;
  3585.     function SetDirectDraw(pDirectDraw: IDirectDraw): HRESULT; stdcall;
  3586.     function GetDirectDraw(out ppDirectDraw: IDirectDraw): HRESULT; stdcall;
  3587.     function GetSurfaceType(out pSurfaceType: DWORD): HRESULT; stdcall;
  3588.     function SetDefault: HRESULT; stdcall;
  3589.     function UseScanLine(UseScanLine: LongBool): HRESULT; stdcall;
  3590.     function CanUseScanLine(var UseScanLine: LongBool): HRESULT; stdcall;
  3591.     function UseOverlayStretch(UseOverlayStretch: LongBool): HRESULT; stdcall;
  3592.     function CanUseOverlayStretch(var UseOverlayStretch: LongBool): HRESULT;
  3593.         stdcall;
  3594.     function UseWhenFullScreen(UseWhenFullScreen: LongBool): HRESULT; stdcall;
  3595.     function WillUseFullScreen(var UseWhenFullScreen: LongBool): HRESULT;
  3596.         stdcall;
  3597.   end;
  3598.  
  3599.   IQualProp = interface(IUnknown)
  3600.     ['{1BD0ECB0-F8E2-11CE-AAC6-0020AF0B99A3}']
  3601.     // Compare these with the functions in class CGargle in gargle.h
  3602.     function get_FramesDroppedInRenderer(var pcFrames: Integer): HRESULT;
  3603.         stdcall;
  3604.     function get_FramesDrawn(out pcFrames: Integer): HRESULT; stdcall;
  3605.     function get_AvgFrameRate(out piAvgFrameRate: Integer): HRESULT; stdcall;
  3606.     function get_Jitter(out iJitter: Integer): HRESULT; stdcall;
  3607.     function get_AvgSyncOffset(out piAvg: Integer): HRESULT; stdcall;
  3608.     function get_DevSyncOffset(out piDev: Integer): HRESULT; stdcall;
  3609.   end;
  3610.  
  3611.   IFullScreenVideo = interface(IUnknown)
  3612.     ['{DD1D7110-7836-11CF-BF47-00AA0055595A}']
  3613.     // IFullScreenVideo methods
  3614.     function CountModes(out pModes: Longint): HRESULT; stdcall;
  3615.     function GetModeInfo(Mode: Longint; out pWidth, pHeight, pDepth: Longint):
  3616.         HRESULT; stdcall;
  3617.     function GetCurrentMode(out pMode: Longint): HRESULT; stdcall;
  3618.     function IsModeAvailable(Mode: Longint): HRESULT; stdcall;
  3619.     function IsModeEnabled(Mode: Longint): HRESULT; stdcall;
  3620.     function SetEnabled(Mode: Longint; bEnabled: Longint): HRESULT; stdcall;
  3621.     function GetClipFactor(out pClipFactor: Longint): HRESULT; stdcall;
  3622.     function SetClipFactor(ClipFactor: Longint): HRESULT; stdcall;
  3623.     function SetMessageDrain(hwnd: HWND): HRESULT; stdcall;
  3624.     function GetMessageDrain(out hwnd: HWND): HRESULT; stdcall;
  3625.     function SetMonitor(Monitor: Longint): HRESULT; stdcall;
  3626.     function GetMonitor(out Monitor: Longint): HRESULT; stdcall;
  3627.     function HideOnDeactivate(Hide: LongBool): HRESULT; stdcall;
  3628.     function IsHideOnDeactivate: HRESULT; stdcall;
  3629.     function SetCaption(strCaption: TBStr): HRESULT; stdcall;
  3630.     function GetCaption(out pstrCaption: TBStr): HRESULT; stdcall;
  3631.     function SetDefault: HRESULT; stdcall;
  3632.   end;
  3633.  
  3634.   IFullScreenVideoEx = interface(IFullScreenVideo)
  3635.     ['{53479470-F1DD-11CF-BC42-00AA00AC74F6}']
  3636.     // IFullScreenVideoEx
  3637.     function SetAcceleratorTable(hwnd: HWND; hAccel: HACCEL): HRESULT; stdcall;
  3638.     function GetAcceleratorTable(var hwnd: HWND; var hAccel: HACCEL): HRESULT;
  3639.         stdcall;
  3640.     function KeepPixelAspectRatio(KeepAspect: LongBool): HRESULT; stdcall;
  3641.     function IsKeepPixelAspectRatio(var pKeepAspect: LongBool): HRESULT; stdcall;
  3642.   end;
  3643.  
  3644.   IBaseVideoMixer = interface(IUnknown)
  3645.     ['{61DED640-E912-11CE-A099-00AA00479A58}']
  3646.     function SetLeadPin(iPin: Integer): HRESULT; stdcall;
  3647.     function GetLeadPin(out iPin: Integer): HRESULT; stdcall;
  3648.     function GetInputPinCount(out piPinCount: Integer): HRESULT; stdcall;
  3649.     function IsUsingClock(out pbValue: Integer): HRESULT; stdcall;
  3650.     function SetUsingClock(bValue: Integer): HRESULT; stdcall;
  3651.     function GetClockPeriod(out pbValue: Integer): HRESULT; stdcall;
  3652.     function SetClockPeriod(bValue: Integer): HRESULT; stdcall;
  3653.   end;
  3654.  
  3655. const
  3656.   iPALETTE_COLORS = 256;     // Maximum colours in palette
  3657.   iEGA_COLORS     = 16;      // Number colours in EGA palette
  3658.   iMASK_COLORS    = 3;       // Maximum three components
  3659.   iTRUECOLOR      = 16;      // Minimum true colour device
  3660.   iRED            = 0;       // Index position for RED mask
  3661.   iGREEN          = 1;       // Index position for GREEN mask
  3662.   iBLUE           = 2;       // Index position for BLUE mask
  3663.   iPALETTE        = 8;       // Maximum colour depth using a palette
  3664.   iMAXBITS        = 8;       // Maximum bits per colour component
  3665.  
  3666. // Used for true colour images that also have a palette
  3667. type
  3668.   TTrueColorInfo = record
  3669.     dwBitMasks: array[0..iMASK_COLORS-1] of DWORD;
  3670.     bmiColors: array[0..iPALETTE_COLORS-1] of TRGBQuad;
  3671.   end;
  3672.  
  3673.   TVideoInfoHeader = record
  3674.     rcSource: TRect;                   // The bit we really want to use
  3675.     rcTarget: TRect;                   // Where the video should go
  3676.     dwBitRate: DWORD;                  // Approximate bit data rate
  3677.     dwBitErrorRate: DWORD;             // Bit error rate for this stream
  3678.     AvgTimePerFrame: TReference_Time;  // Average time per frame (100ns units)
  3679.  
  3680.     bmiHeader: TBitmapInfoHeader;
  3681.   end;
  3682.  
  3683. // make sure the pbmi is initialized before using these macros
  3684. {function TRUECOLOR(pbmi: PBitmapInfo): Pointer;
  3685. function COLORS(pbmi: PBitmapInfo): Pointer;
  3686. function BITMASKS(pbmi: PBitmapInfo): Pointer;
  3687. {
  3688. #define TRUECOLOR(pbmi)  ((TRUECOLORINFO *)(((LPBYTE)&((pbmi)->bmiHeader)) \
  3689.                                         + (pbmi)->bmiHeader.biSize))
  3690. #define COLORS(pbmi)    ((RGBQUAD *)(((LPBYTE)&((pbmi)->bmiHeader))     \
  3691.                                         + (pbmi)->bmiHeader.biSize))
  3692. #define BITMASKS(pbmi)  ((DWORD *)(((LPBYTE)&((pbmi)->bmiHeader))       \
  3693.                                         + (pbmi)->bmiHeader.biSize))
  3694.  }
  3695. // All the image based filters use this to communicate their media types. It's
  3696. // centred principally around the BITMAPINFO. This structure always contains a
  3697. // BITMAPINFOHEADER followed by a number of other fields depending on what the
  3698. // BITMAPINFOHEADER contains. If it contains details of a palettised format it
  3699. // will be followed by one or more RGBQUADs defining the palette. If it holds
  3700. // details of a true colour format then it may be followed by a set of three
  3701. // DWORD bit masks that specify where the RGB data can be found in the image
  3702. // (For more information regarding BITMAPINFOs see the Win32 documentation)
  3703.  
  3704. // The rcSource and rcTarget fields are not for use by filters supplying the
  3705. // data. The destination (target) rectangle should be set to all zeroes. The
  3706. // source may also be zero filled or set with the dimensions of the video. So
  3707. // if the video is 352x288 pixels then set it to (0,0,352,288). These fields
  3708. // are mainly used by downstream filters that want to ask the source filter
  3709. // to place the image in a different position in an output buffer. So when
  3710. // using for example the primary surface the video renderer may ask a filter
  3711. // to place the video images in a destination position of (100,100,452,388)
  3712. // on the display since that's where the window is positioned on the display
  3713.  
  3714. // !!! WARNING !!!
  3715. // DO NOT use this structure unless you are sure that the BITMAPINFOHEADER
  3716. // has a normal biSize == sizeof(BITMAPINFOHEADER) !
  3717. // !!! WARNING !!!
  3718.  
  3719. type
  3720.   TVideoInfo = record
  3721.     rcSource: TRect;                   // The bit we really want to use
  3722.     rcTarget: TRect;                   // Where the video should go
  3723.     dwBitRate: DWORD;                  // Approximate bit data rate
  3724.     dwBitErrorRate: DWORD;             // Bit error rate for this stream
  3725.     AvgTimePerFrame: TReference_Time;  // Average time per frame (100ns units)
  3726.  
  3727.     bmiHeader: TBitmapInfoHeader;
  3728.  
  3729.     case Integer of
  3730.     0: (
  3731.       bmiColors: array[0..iPALETTE_COLORS-1] of TRGBQuad // Colour palette
  3732.       );
  3733.     1: (
  3734.       dwBitMasks: array[0..iMASK_COLORS-1] of DWORD      // True colour masks
  3735.       );
  3736.     2: (
  3737.       TrueColorInfo: TTrueColorInfo                      // Both of the above
  3738.       );
  3739.   end;
  3740.  
  3741. // These macros define some standard bitmap format sizes
  3742.  
  3743. const
  3744.   SIZE_EGA_PALETTE = iEGA_COLORS * SizeOf(TRGBQuad);
  3745.   SIZE_PALETTE = iPALETTE_COLORS * SizeOf(TRGBQuad);
  3746.   SIZE_MASKS = iMASK_COLORS * SizeOf(DWORD);
  3747.  
  3748.   SIZE_PREHEADER = 48; // offset TVideoInfoHeader.bmiHeader
  3749.   SIZE_VIDEOHEADER = SizeOf(TVideoInfoHeader);
  3750.  
  3751. // !!! for abnormal biSizes
  3752. // #define SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + SIZE_PREHEADER)
  3753.  
  3754. // DIBSIZE calculates the number of bytes required by an image
  3755. {
  3756. function WIDTHBYTES(bits: Integer): DWORD;
  3757. function DIBWIDTHBYTES(const bhi: TBitmapInfoHeader): DWORD;
  3758. function _DIBSIZE(const bmi: TBitmapInfoHeader): DWORD;
  3759. function DIBSIZE(const bmi: TBitmapInfoHeader): DWORD;
  3760. {
  3761. #define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
  3762. #define DIBWIDTHBYTES(bi) (DWORD)WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
  3763. #define _DIBSIZE(bi) (DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
  3764. #define DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(_DIBSIZE(bi)) : _DIBSIZE(bi))
  3765. }
  3766. // This compares the bit masks between two VIDEOINFOHEADERs
  3767. {
  3768. function BIT_MASKS_MATCH(const bmi1, bmi2: TBitmapInfo): Boolean;
  3769. {
  3770. #define BIT_MASKS_MATCH(pbmi1,pbmi2)                                \
  3771.     (((pbmi1)->dwBitMasks[iRED] == (pbmi2)->dwBitMasks[iRED]) &&        \
  3772.      ((pbmi1)->dwBitMasks[iGREEN] == (pbmi2)->dwBitMasks[iGREEN]) &&    \
  3773.      ((pbmi1)->dwBitMasks[iBLUE] == (pbmi2)->dwBitMasks[iBLUE]))
  3774. }
  3775. // These zero fill different parts of the VIDEOINFOHEADER structure
  3776.  
  3777. // Only use these macros for pbmi's with a normal BITMAPINFOHEADER biSize
  3778. {procedure RESET_MASKS(var bmi: TBitmapInfo);
  3779. procedure RESET_HEADER(var bmi: TBitmapInfo);
  3780. procedure RESET_PALETTE(var bmi: TBitmapInfo);
  3781. {
  3782. #define RESET_MASKS(pbmi) (ZeroMemory((PVOID)(pbmi)->dwBitFields,SIZE_MASKS))
  3783. #define RESET_HEADER(pbmi) (ZeroMemory((PVOID)(pbmi),SIZE_VIDEOHEADER))
  3784. #define RESET_PALETTE(pbmi) (ZeroMemory((PVOID)(pbmi)->bmiColors,SIZE_PALETTE));
  3785. }
  3786. {
  3787. // !!! This is the right way to do it, but may break existing code
  3788. #define RESET_MASKS(pbmi) (ZeroMemory((PVOID)(((LPBYTE)(pbmi)->bmiHeader) + \
  3789.                         (pbmi)->bmiHeader.biSize,SIZE_MASKS)))
  3790. #define RESET_HEADER(pbmi) (ZeroMemory((PVOID)(pbmi), SIZE_PREHEADER +      \
  3791.                         sizeof(BITMAPINFOHEADER)))
  3792. #define RESET_PALETTE(pbmi) (ZeroMemory((PVOID)(((LPBYTE)(pbmi)->bmiHeader) + \
  3793.                         (pbmi)->bmiHeader.biSize,SIZE_PALETTE))
  3794. }
  3795.  
  3796. // Other (hopefully) useful bits and bobs
  3797. {
  3798. #define PALETTISED(pbmi) ((pbmi)->bmiHeader.biBitCount <= iPALETTE)
  3799. #define PALETTE_ENTRIES(pbmi) ((DWORD) 1 << (pbmi)->bmiHeader.biBitCount)
  3800.  
  3801. // Returns the address of the BITMAPINFOHEADER from the VIDEOINFOHEADER
  3802. #define HEADER(pVideoInfo) (&(((VIDEOINFOHEADER *) (pVideoInfo))->bmiHeader))
  3803.  }
  3804.  
  3805. // MPEG variant - includes a DWORD length followed by the
  3806. // video sequence header after the video header.
  3807. //
  3808. // The sequence header includes the sequence header start code and the
  3809. // quantization matrices associated with the first sequence header in the
  3810. // stream so is a maximum of 140 bytes long.
  3811. type
  3812.   TMPEG1VideInfo = record
  3813.     hdr: TVideoInfoHeader;                  // Compatible with VIDEOINFO
  3814.     dwStartTimeCode: DWORD;                 // 25-bit Group of pictures time code
  3815.                                             // at start of data
  3816.     cbSequenceHeader: DWORD;                // Length in bytes of bSequenceHeader
  3817.     bSequenceHeader: array[0..0] of Byte;   // Sequence header including
  3818.                                             // quantization matrices if any
  3819.   end;
  3820.  
  3821. const
  3822.   MAX_SIZE_MPEG1_SEQUENCE_INFO = 140;
  3823. {
  3824. #define SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  3825. #define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  3826. }
  3827.  
  3828. // Analog video variant - Use this when the format is FORMAT_AnalogVideo
  3829. //
  3830. // rcSource defines the portion of the active video signal to use
  3831. // rcTarget defines the destination rectangle
  3832. //    both of the above are relative to the dwActiveWidth and dwActiveHeight fields
  3833. // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
  3834. // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM  (but could change for HDTV)
  3835. type
  3836.   TAnalogVideoInfo = record
  3837.     rcSource: TRect;                   // Width max is 720, height varies w/ TransmissionS
  3838.     rcTarget: TRect;                   // Where the video should go
  3839.     dwBitRate: DWORD;                  // Always 720 (CCIR-601 active samples per line)
  3840.     dwBitErrorRate: DWORD;             // 483 for NTSC, 575 for PAL/SECAM
  3841.     AvgTimePerFrame: TReference_Time;  // Normal ActiveMovie units (100 nS)
  3842.   end;
  3843.  
  3844. //
  3845. // AM_KSPROPSETID_FrameStep property set definitions
  3846. //
  3847.  
  3848. TAM_PROPERTY_FRAMESTEP = (
  3849.         AM_PROPERTY_FRAMESTEP_INVALID,
  3850.         //  Step
  3851.     AM_PROPERTY_FRAMESTEP_STEP,
  3852.     AM_PROPERTY_FRAMESTEP_CANCEL,
  3853.         //  S_OK for these 2 means we can - S_FALSE if we can't
  3854.         AM_PROPERTY_FRAMESTEP_CANSTEP,
  3855.         AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE
  3856.         );
  3857.  
  3858. TAM_FRAMESTEP_STEP = record
  3859.     //  1 means step 1 frame forward
  3860.     //  0 is invalid
  3861.     //  n (n > 1) means skip n - 1 frames and show the nth
  3862.      dwFramesToStep: DWORD;
  3863.      end;
  3864.      
  3865. (*==========================================================================;
  3866.  *
  3867.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3868.  *
  3869.  *  File:       amaudio.h
  3870.  *
  3871.  ***************************************************************************)
  3872.  
  3873. const
  3874.   IID_IAMDirectSound: TGUID = (D1:$546F4260;D2:$D53E;D3:$11CF;D4:($B3,$F0,$00,$AA,$00,$37,$61,$C5));
  3875.  
  3876. // This is the interface the audio renderer supports to give the application
  3877. // access to the direct sound object and buffers it is using, to allow the
  3878. // application to use things like the 3D features of Direct Sound for the
  3879. // soundtrack of a movie being played with Active Movie
  3880.  
  3881. // be nice to our friends in C
  3882. type
  3883.   IAMDirectSound = interface(IUnknown)
  3884.     ['{546F4260-D53E-11CF-B3F0-00AA003761C5}']
  3885.     (* IAMDirectSound methods *)
  3886.     function GetDirectSoundInterface(out lplpds: IDirectSound): HRESULT;
  3887.         stdcall;
  3888.     function GetPrimaryBufferInterface(out lplpdsb: IDirectSoundBuffer):
  3889.         HRESULT; stdcall;
  3890.     function GetSecondaryBufferInterface(out lplpdsb: IDirectSoundBuffer):
  3891.         HRESULT; stdcall;
  3892.     function ReleaseDirectSoundInterface(lpds: IDirectSound): HRESULT; stdcall;
  3893.     function ReleasePrimaryBufferInterface(lpdsb: IDirectSoundBuffer): HRESULT;
  3894.         stdcall;
  3895.     function ReleaseSecondaryBufferInterface(lpdsb: IDirectSoundBuffer):
  3896.         HRESULT; stdcall;
  3897.     function SetFocusWindow(hwnd: HWND; b: BOOL): HRESULT; stdcall;
  3898.     function GetFocusWindow(var hwnd: HWND; var b: BOOL): HRESULT; stdcall;
  3899.   end;
  3900.  
  3901. (*==========================================================================;
  3902.  *
  3903.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3904.  *
  3905.  *  File:       vptype.h
  3906.  *
  3907.  ***************************************************************************)
  3908.  
  3909. type
  3910.   // enum to specify the criterion, which the vpmixer is supposed to use
  3911.   // in order to select the video format
  3912.   TAMVP_Select_Format_By = (
  3913.     AMVP_DO_NOT_CARE,
  3914.     AMVP_BEST_BANDWIDTH,
  3915.     AMVP_INPUT_SAME_AS_OUTPUT
  3916.   );
  3917.  
  3918.   // enum to specify the various mode
  3919.   TAMVP_Mode = (
  3920.     AMVP_MODE_WEAVE,
  3921.     AMVP_MODE_BOBINTERLEAVED,
  3922.     AMVP_MODE_BOBNONINTERLEAVED,
  3923.     AMVP_MODE_SKIPEVEN,
  3924.     AMVP_MODE_SKIPODD
  3925.   );
  3926.  
  3927.   // struct to specify the width and height. The context could be anything
  3928.   // such as scaling cropping etc.
  3929.   PAMVPSize = ^TAMVPSize;
  3930.   TAMVPSize = record
  3931.     dwWidth  : DWORD;                    // the width
  3932.     dwHeight : DWORD;                   // the height
  3933.   end;
  3934.  
  3935.   // struct to specify the dimensional characteristics of the input stream
  3936.   TAMVPIMInfo = record
  3937.     dwFieldWidth: DWORD;               // Field height of the data
  3938.     dwFieldHeight: DWORD;              // Field width of the data
  3939.     dwVBIWidth: DWORD;                 // Width of the VBI data
  3940.     dwVBIHeight: DWORD;                // Height of the VBI data
  3941.     rcValidRegion: TRect;              // The vaild rectangle, used for cropping
  3942.   end;
  3943.  
  3944.  
  3945.   // struct to specify the various data specific characteristics of the input stream
  3946.   PAMVPDataInfo = ^TAMVPDataInfo;
  3947.   TAMVPDataInfo = record
  3948.      dwSize: DWORD;                    // Size of the struct
  3949.      dwMicrosecondsPerField: DWORD;    // Time taken by each field
  3950.      amvpDimInfo: TAMVPIMInfo;         // Dimensional Information
  3951.      dwPictAspectRatioX: DWORD;        // X dimension of Picture Aspect Ratio
  3952.      dwPictAspectRatioY: DWORD;        // Y dimension of Picture Aspect Ratio
  3953.      bEnableDoubleClock: BOOL;         // Videoport should enable double clocking
  3954.      bEnableVACT: BOOL;                // Videoport should use an external VACT signal
  3955.      bDataIsInterlaced: BOOL;          // Indicates that the signal is interlaced
  3956.      lHalfLinesOdd: Longint;           // number of halflines in the odd field
  3957.      bFieldPolarityInverted: BOOL;     // Device inverts the polarity by default
  3958.      dwNumLinesInVREF: DWORD;          // Number of lines of data in VREF
  3959.      lHalfLinesEven: Longint;          // number of halflines in the even field
  3960.      dwReserved1: DWORD;               // Reserved for future use
  3961.   end;
  3962.  
  3963. (*==========================================================================;
  3964.  *
  3965.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  3966.  *
  3967.  *  File:       vpconfig.h
  3968.  *
  3969.  ***************************************************************************)
  3970.  
  3971. const
  3972.   IID_IVPConfig: TGUID = (D1:$BC29A660;D2:$30E3;D3:$11D0;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  3973.   IID_IVPVBIConfig: TGUID = (D1:$EC529B00;D2:$1A1F;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  3974.  
  3975. type
  3976. // IVPBaseConfig
  3977.   IVPBaseConfig = interface(IUnknown)
  3978.     // gets the various connection information structures (guid, portwidth)
  3979.     // in an array of structures. If the pointer to the array is NULL, first
  3980.     // parameter returns the total number of formats supported.
  3981.     function GetConnectInfo(var pdwNumConnectInfo: PDWORD;
  3982.       var pddVPConnectInfo: PDDVideoPortConnect): HRESULT; stdcall;
  3983.  
  3984.     // sets the connection entry chosen (0, 1, .. ,(dwNumProposedEntries-1))
  3985.     function SetConnectInfo(dwChosenEntry: DWORD): HRESULT; stdcall;
  3986.  
  3987.     // gets various data parameters, includes dimensionnal info
  3988.     function GetVPDataInfo(var pamvpDataInfo: PAMVPDataInfo): HRESULT; stdcall;
  3989.  
  3990.     // retrives maximum pixels per second rate expected for a given
  3991.     // format and a given scaling factor. If decoder does not support
  3992.     // those scaling factors, then it gives the rate and the nearest
  3993.     // scaling factors.
  3994.     function GetMaxPixelRate(var pamvpSize: PAMVPSize;
  3995.       out pdwMaxPixelsPerSecond: PDWORD): HRESULT; stdcall;
  3996.  
  3997.     // informs the callee of the videoformats supported by the videoport
  3998.     function InformVPInputFormats(dwNumFormats: DWORD;
  3999.              pTDDPixelFormats: PDDPixelFormat): HRESULT; stdcall;
  4000.  
  4001.     // gets the various formats supported by the decoder in an array
  4002.     // of structures. If the pointer to the array is NULL, first parameter
  4003.     // returns the total number of formats supported.
  4004.     function GetVideoFormats(var pdwNumFormats: PDWORD;
  4005.       var pTDDPixelFormats: PDDPixelFormat): HRESULT; stdcall;
  4006.  
  4007.     // sets the format entry chosen (0, 1, .. ,(dwNumProposedEntries-1))
  4008.     function SetVideoFormat(dwChosenEntry: DWORD): HRESULT; stdcall;
  4009.  
  4010.     // asks the decoder to treat even fields like odd fields and visa versa
  4011.     function SetInvertPolarity: HRESULT; stdcall;
  4012.  
  4013.     // the mixer uses this function to determine if the callee wants
  4014.     // the vpmixer to use its overlay surface and if so to get a pointer to it
  4015.     function GetOverlaySurface(out ppddOverlaySurface: IDirectDrawSurface):
  4016.         HRESULT; stdcall;
  4017.  
  4018.     // sets the direct draw kernel handle
  4019.     function SetDirectDrawKernelHandle(dwDDKernelHandle: THandle): HRESULT;
  4020.         stdcall;
  4021.  
  4022.     // sets the video port id
  4023.     function SetVideoPortID(dwVideoPortID: DWORD): HRESULT; stdcall;
  4024.  
  4025.     // sets the direct draw surface kernel handle
  4026.     function SetDDSurfaceKernelHandles(cHandles: DWORD;
  4027.         var rgDDKernelHandles: THandle): HRESULT; stdcall;
  4028.  
  4029.     // Tells driver about surface created on its behalf by ovmixer/vbisurf and
  4030.     // returned from videoport/ddraw. Should always return NOERROR or E_NOIMPL.
  4031.     // dwPitch is the pitch of the surface (distance in pixels between the start
  4032.     // pixels of two consecutive lines of the surface). (dwXOrigin, dwYOrigin)
  4033.     // are the (X, Y) coordinates of the pixel at which valid data starts.
  4034.     function SetSurfaceParameters(dwPitch, dwXOrigin, dwYOrigin: DWORD):
  4035.         HRESULT; stdcall;
  4036.   end;
  4037.  
  4038. // IVPConfig
  4039.   IVPConfig = interface(IVPBaseConfig)
  4040.     ['{BC29A660-30E3-11D0-9E69-00C04FD7C15B}']
  4041.     // the mixer uses this function to determine if the callee wants
  4042.     // the mixer to decimate VIDEO data at its own descrition
  4043.     function IsVPDecimationAllowed(out pbIsDecimationAllowed: PBOOL): HRESULT;
  4044.         stdcall;
  4045.  
  4046.     // sets the scaling factors. If decoder does not support these,
  4047.     // then it sets the values to the nearest factors it can support
  4048.     function SetScalingFactors(pamvpSize: PAMVPSize): HRESULT; stdcall;
  4049.   end;
  4050.  
  4051. // IVPVBIConfig
  4052.   IVPVBIConfig = interface(IVPBaseConfig)
  4053.     ['{EC529B00-1A1F-11D1-BAD9-00609744111A}']
  4054.   end;
  4055.  
  4056. (*==========================================================================;
  4057.  *
  4058.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4059.  *
  4060.  *  File:       vpnotify.h
  4061.  *
  4062.  ***************************************************************************)
  4063.  
  4064. const
  4065.   IID_IVPNotify: TGUID  = (D1:$C76794A1;D2:$D6C5;D3:$11D0;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  4066.   IID_IVPVBINotify: TGUID = (D1:$EC529B01;D2:$1A1F;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  4067.   IID_IVPNotify2: TGUID = (D1:$ebf47183;D2:$8764;D3:$11d1;D4:($9e,$69,$00,$c0,$4f,$d7,$c1,$5b));
  4068.  
  4069. type
  4070. // interface IVPBaseNotify
  4071.   IVPBaseNotify = interface(IUnknown)
  4072.     // this function initializes the reconnection to the decoder.
  4073.     function RenegotiateVPParameters: HRESULT; stdcall;
  4074.   end;
  4075.  
  4076. // interface IVPNotify
  4077.   IVPNotify = interface(IVPBaseNotify)
  4078.     ['{C76794A1-D6C5-11D0-9E69-00C04FD7C15B}']
  4079.     // function to set the mode (bob, weave etc)
  4080.     function SetDeinterlaceMode(mode: TAMVP_Mode): HRESULT; stdcall;
  4081.     // function to get the mode (bob, weave etc)
  4082.     function GetDeinterlaceMode(out pMode: TAMVP_Mode): HRESULT; stdcall;
  4083.   end;
  4084.  
  4085. // interface IVPNotify2
  4086. // 4 functions have been removed from dxmedia!!
  4087.   IVPNotify2 = interface(IVPNotify)
  4088.     ['{EBF47183-8764-11d1-9E69-00C04FD7C15B}']
  4089.     // function to set the mode (bob, weave etc)
  4090.     function SetVPSyncMaster(bVPSyncMaster: BOOL): HRESULT; stdcall;
  4091.     // function to get the mode (bob, weave etc)
  4092.     function GetVPSyncMaster(OUT pbVPSyncMaster: BOOL): HRESULT; stdcall;
  4093.   end;
  4094.  
  4095. // interface IVPVBINotify
  4096.   IVPVBINotify = interface(IVPBaseNotify)
  4097.     ['{EC529B01-1A1F-11D1-BAD9-00609744111A}']
  4098.   end;
  4099.  
  4100. (*==========================================================================;
  4101.  *
  4102.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4103.  *
  4104.  *  File:       mpegtype.h
  4105.  *
  4106.  ***************************************************************************)
  4107.  
  4108. const
  4109.   IID_IMpegAudioDecoder: TGUID = (D1:$B45DD570;D2:$3C77;D3:$11D1;D4:($AB,$E1,$00,$A0,$C9,$05,$F3,$75));
  4110.  
  4111. type
  4112. //
  4113. //  AM_MPEGSYSTEMTYPE defines the format block contents for
  4114. //  data of type MEDIATYPE_MPEG1System when the format
  4115. //  block GUID is FORMAT_MPEG1System
  4116. //
  4117. //  The format block consists of elements of type
  4118. //  AM_MPEGSYSTEMTYPE up to the length of the format block
  4119. //  Each format block is 8-byte aligned from the start of
  4120. //  the format block
  4121. //
  4122.  
  4123.   TAM_MPEGSreamType = record
  4124.     dwStreamId: DWORD;               // Stream id of stream to process
  4125.     dwReserved: DWORD;               // 8-byte alignment
  4126.     mt: TAM_Media_Type;              // Type for substream - pbFormat is NULL
  4127.     bFormat: array[0..0] of Byte;    // Format data
  4128.   end;
  4129.  
  4130.   TAM_MPEGSystemType = record
  4131.     dwBitRate: DWORD;                // Bits per second
  4132.     cStreams: DWORD;                 // Number of streams
  4133.     Streams: array[0..0] of TAM_MPEGSreamType;
  4134.   end;
  4135. {
  4136. //
  4137. //  Helper macros for AM_MPEGSTREAMTYPE
  4138. //
  4139. #define AM_MPEGSTREAMTYPE_ELEMENTLENGTH(pStreamType)  \
  4140.     FIELD_OFFSET(AM_MPEGSTREAMTYPE, bFormat[(pStreamType)->mt.cbFormat])
  4141. #define AM_MPEGSTREAMTYPE_NEXT(pStreamType)           \
  4142.     ((AM_MPEGSTREAMTYPE *)((PBYTE)(pStreamType) +     \
  4143.      ((AM_MPEGSTREAMTYPE_ELEMENTLENGTH(pStreamType) + 7) & ~7)))
  4144.  }
  4145. //
  4146. // IMpegAudioDecoder
  4147. //
  4148.  
  4149. // Values for DualMode
  4150. const
  4151.   AM_MPEG_AUDIO_DUAL_MERGE = 0;
  4152.   AM_MPEG_AUDIO_DUAL_LEFT  = 1;
  4153.   AM_MPEG_AUDIO_DUAL_RIGHT = 2;
  4154.  
  4155. type
  4156. //
  4157. //
  4158. // Microsoft MPEG audio WAV definition
  4159. //
  4160. (*  MPEG-1 audio wave format (audio layer only).   (0x0050)   *)
  4161.  
  4162.   TMPEG1WaveFormat = record
  4163.     wfx: TWaveFormatEx;
  4164.     fwHeadLayer: Word;
  4165.     dwHeadBitrate: DWORD;
  4166.     fwHeadMode: Word;
  4167.     fwHeadModeExt: Word;
  4168.     wHeadEmphasis: Word;
  4169.     fwHeadFlags: Word;
  4170.     dwPTSLow: DWORD;
  4171.     dwPTSHigh: DWORD;
  4172.   end;
  4173.  
  4174. const
  4175.   ACM_MPEG_LAYER1         = $0001;
  4176.   ACM_MPEG_LAYER2         = $0002;
  4177.   ACM_MPEG_LAYER3         = $0004;
  4178.   ACM_MPEG_STEREO         = $0001;
  4179.   ACM_MPEG_JOINTSTEREO    = $0002;
  4180.   ACM_MPEG_DUALCHANNEL    = $0004;
  4181.   ACM_MPEG_SINGLECHANNEL  = $0008;
  4182.   ACM_MPEG_PRIVATEBIT     = $0001;
  4183.   ACM_MPEG_COPYRIGHT      = $0002;
  4184.   ACM_MPEG_ORIGINALHOME   = $0004;
  4185.   ACM_MPEG_PROTECTIONBIT  = $0008;
  4186.   ACM_MPEG_ID_MPEG1       = $0010;
  4187.  
  4188. type
  4189.   IMpegAudioDecoder = interface(IUnknown)
  4190.     ['{B45DD570-3C77-11D1-ABE1-00A0C905F375}']
  4191.     function get_FrequencyDivider(out pDivider: LongWord): HRESULT; stdcall;
  4192.     function put_FrequencyDivider(Divider: LongWord): HRESULT; stdcall;
  4193.     function get_DecoderAccuracy(out pAccuracy: LongWord): HRESULT; stdcall;
  4194.     function put_DecoderAccuracy(Accuracy: LongWord): HRESULT; stdcall;
  4195.     function get_Stereo(out pStereo: LongWord): HRESULT; stdcall;
  4196.     function put_Stereo(Stereo: LongWord): HRESULT; stdcall;
  4197.     function get_DecoderWordSize(out pWordSize: LongWord): HRESULT; stdcall;
  4198.     function put_DecoderWordSize(WordSize: LongWord): HRESULT; stdcall;
  4199.     function get_IntegerDecode(out pIntDecode: LongWord): HRESULT; stdcall;
  4200.     function put_IntegerDecode(IntDecode: LongWord): HRESULT; stdcall;
  4201.     function get_DualMode(out pIntDecode: LongWord): HRESULT; stdcall;
  4202.     function put_DualMode(IntDecode: LongWord): HRESULT; stdcall;
  4203.     function get_AudioFormat(out lpFmt: TMPEG1WaveFormat): HRESULT; stdcall;
  4204.   end;
  4205.  
  4206. (*==========================================================================;
  4207.  *
  4208.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4209.  *
  4210.  *  File:       il21dec.h
  4211.  *
  4212.  ***************************************************************************)
  4213. // Line 21 Decoder related definitions and interfaces for ActiveMovie
  4214.  
  4215. const
  4216.   IID_IAMLine21Decoder: TGUID = (D1:$6E8D4A21;D2:$310C;D3:$11D0;D4:($B7,$9A,$00,$AA,$00,$37,$67,$A7));
  4217.  
  4218. type
  4219. //
  4220. //  Some enum data types used as line 21 decoder params by the interface
  4221. //
  4222.   TAM_Line21_CCLevel = (       // should we use TC1, TC2 in stead?
  4223.     AM_L21_CCLEVEL_TC2
  4224.   );
  4225.  
  4226.   TAM_Line21_CCService = (
  4227.     AM_L21_CCSERVICE_None,
  4228.     AM_L21_CCSERVICE_Caption1,
  4229.     AM_L21_CCSERVICE_Caption2,
  4230.     AM_L21_CCSERVICE_Text1,
  4231.     AM_L21_CCSERVICE_Text2,
  4232.     AM_L21_CCSERVICE_XDS,
  4233.     AM_L21_CCSERVICE_INVALID_6,
  4234.     AM_L21_CCSERVICE_INVALID_7,
  4235.     AM_L21_CCSERVICE_INVALID_8,
  4236.     AM_L21_CCSERVICE_INVALID_9,
  4237.     AM_L21_CCSERVICE_DefChannel,
  4238.     AM_L21_CCSERVICE_Invalid
  4239.   );
  4240.  
  4241.   TAM_Line21_CCState = (
  4242.     AM_L21_CCSTATE_Off,
  4243.     AM_L21_CCSTATE_On
  4244.   );
  4245.  
  4246.   TAM_Line21_CCStyle = (
  4247.     AM_L21_CCSTYLE_None,
  4248.     AM_L21_CCSTYLE_PopOn,
  4249.     AM_L21_CCSTYLE_PaintOn,
  4250.     AM_L21_CCSTYLE_RollUp
  4251.   );
  4252.  
  4253.   TAM_Line21_DrawBGMode = (
  4254.     AM_L21_DRAWBGMODE_Opaque,
  4255.     AM_L21_DRAWBGMODE_Transparent
  4256.   );
  4257.  
  4258. //
  4259. //  Line 21 Decoder standard COM interface
  4260. //
  4261.   IAMLine21Decoder = interface(IUnknown)
  4262.     ['{6E8D4A21-310C-11D0-B79A-00AA003767A7}']
  4263.     //
  4264.     // Decoder options to be used by apps
  4265.     //
  4266.  
  4267.     // What is the decoder's level
  4268.     function GetDecoderLevel(var lpLevel: TAM_Line21_CCLevel): HRESULT; stdcall;
  4269.     // supported level value is AM_L21Level_TC2 only
  4270.     // skipping the SetDecoderLevel( )
  4271.  
  4272.     // Which of the services is being currently used
  4273.     function GetCurrentService(var lpService: TAM_Line21_CCService): HRESULT;
  4274.         stdcall;
  4275.     function SetCurrentService(Service: TAM_Line21_CCService): HRESULT;
  4276.         stdcall;
  4277.     // supported service values are AM_L21Service_Caption1,
  4278.     // AM_L21Service_Caption2, AM_L21Service_Text1, AM_L21Service_Text2,
  4279.     // AM_L21Service_XDS, AM_L21Service_None)
  4280.  
  4281.     // Query/Set the service state (On/Off)
  4282.     // supported state values are AM_L21State_On and AM_L21State_Off
  4283.     function GetServiceState(var lpState: TAM_Line21_CCState): HRESULT;
  4284.         stdcall;
  4285.     function SetServiceState(State: TAM_Line21_CCState): HRESULT;
  4286.         stdcall;
  4287.  
  4288.     //
  4289.     // Output options to be used by downstream filters
  4290.     //
  4291.  
  4292.     // What size, bitdepth etc should the output video be
  4293.     function GetOutputFormat(lpbmih: PBitmapInfoHeader): HRESULT; stdcall;
  4294.     // GetOutputFormat() method, if successful, returns
  4295.     // 1.  S_FALSE if no output format has so far been defined by downstream filters
  4296.     // 2.  S_OK if an output format has already been defined by downstream filters
  4297.     function SetOutputFormat(lpbmih: PBitmapInfoHeader): HRESULT;
  4298.         stdcall;
  4299.  
  4300.     // Specify physical color to be used in colorkeying the background
  4301.     // for overlay mixing
  4302.     function GetBackgroundColor(var pdwPhysColor: DWORD): HRESULT; stdcall;
  4303.     function SetBackgroundColor(dwPhysColor: DWORD): HRESULT; stdcall;
  4304.  
  4305.     // Specify if whole output bitmap should be redrawn for each sample
  4306.     function GetRedrawAlways(lpbOption: PBOOL): HRESULT; stdcall;
  4307.     function SetRedrawAlways(bOption: BOOL): HRESULT; stdcall;
  4308.  
  4309.     // Specify if the caption text background should be opaque/transparent
  4310.     function GetDrawBackgroundMode(var lpMode: TAM_Line21_DrawBGMode): HRESULT;
  4311.         stdcall;
  4312.     function SetDrawBackgroundMode(Mode: TAM_Line21_DrawBGMode): HRESULT;
  4313.         stdcall;
  4314.     // supported mode values are AM_L21_DrawBGMode_Opaque and
  4315.     // AM_L21_DrawBGMode_Transparent
  4316.   end;
  4317.  
  4318. (*==========================================================================;
  4319.  *
  4320.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4321.  *
  4322.  *  File:       dvdevcod.h
  4323.  *
  4324.  ***************************************************************************)
  4325. // list of standard DVD-Video event codes and the expected params
  4326.  
  4327. const
  4328.   EC_DVDBASE                                                    = $0100;
  4329.  
  4330. type
  4331.   TDVD_Error = (
  4332.     DVD_ERROR_INVALID_0,
  4333.     DVD_ERROR_Unexpected,           // Something unexpected happened, perhaps content
  4334.                                     //   is incorrectly authored.  Playback is stopped.
  4335.     DVD_ERROR_CopyProtectFail,      // Key exchange for DVD copy protection failed.
  4336.                                     //   Playback is stopped.
  4337.     DVD_ERROR_InvalidDVD1_0Disc,    // DVD-Video disc is incorrectly authored for v1.0
  4338.                                     //   of spec. Playback is stopped.
  4339.     DVD_ERROR_InvalidDiscRegion,    // The Disc is not approved for playback by decoders
  4340.                                     //   from this DVD region.
  4341.     DVD_ERROR_LowParentalLevel,      // Player parental level is lower than the lowest parental
  4342.                                     //   level available in the DVD content. Playback is stopped.
  4343.     DVD_ERROR_MacrovisionFail,    // Macrovision Distribution Failed.
  4344.                                     // Playback is stopped.
  4345.     DVD_ERROR_IncompatibleSystemAndDecoderRegions,
  4346.                                     // No discs can be played because the system region
  4347.                                     // does not match the decoder region.
  4348.     DVD_ERROR_IncompatibleDiscAndDecoderRegions
  4349.                                     // The disc cannot be played because the disc is
  4350.                                     // not authored to be played in the decoder's region
  4351.   );
  4352.  
  4353.   TDVD_Warning = (
  4354.     DVD_WARNING_INVALID_0,
  4355.     DVD_WARNING_InvalidDVD1_0Disc,   // DVD-Video disc is incorrectly authored. Playback
  4356.                                      //   can continue, but unexpected behavior may occur.
  4357.     DVD_WARNING_FormatNotSupported,  // A decoder would not support the current format.  Playback
  4358.                                      //   of a stream (audio, video of SP) may not function.
  4359.     DVD_WARNING_IllegalNavCommand,   // The internal DVD navigation command processor attempted to
  4360.                                      //   process an illegal command.
  4361.     DVD_WARNING_Open,                // File Open Failed
  4362.     DVD_WARNING_Seek,                // File Seek Failed
  4363.     DVD_WARNING_Read                 // File Read Failed
  4364.   );
  4365.  
  4366. const
  4367.  
  4368. // DVD-Video event codes
  4369. // ======================
  4370. //
  4371. // All DVD-Video event are always passed on to the application, and are
  4372. // never processed by the filter graph
  4373.  
  4374.  
  4375.   EC_DVD_DOMAIN_CHANGE                    = (EC_DVDBASE + $01);
  4376. // Parameters: ( DWORD, void )
  4377. // lParam1 is enum DVD_DOMAIN, and indicates the player's new domain
  4378. //
  4379. // Raised from following domains: all
  4380. //
  4381. // Signaled when ever the DVD player changes domains.
  4382.  
  4383.  
  4384.   EC_DVD_TITLE_CHANGE                     = (EC_DVDBASE + $02);
  4385. // Parameters: ( DWORD, void )
  4386. // lParam1 is the new title number.
  4387. //
  4388. // Raised from following domains: DVD_DOMAIN_Title
  4389. //
  4390. // Indicates when the current title number changes.  Title numbers
  4391. // range 1 to 99.  This indicates the TTN, which is the title number
  4392. // with respect to the whole disc, not the VTS_TTN which is the title
  4393. // number with respect to just a current VTS.
  4394.  
  4395.  
  4396.   EC_DVD_CHAPTER_START                   = (EC_DVDBASE + $03);
  4397. // Parameters: ( DWORD, void )
  4398. // lParam1 is the new chapter number (which is the program number for
  4399. // One_Sequential_PGC_Titles).
  4400. //
  4401. // Raised from following domains: DVD_DOMAIN_Title
  4402. //
  4403. // Signales that DVD player started playback of a new program in the Title
  4404. // domain.  This is only signaled for One_Sequential_PGC_Titles.
  4405.  
  4406.  
  4407.   EC_DVD_AUDIO_STREAM_CHANGE              = (EC_DVDBASE + $04);
  4408. // Parameters: ( DWORD, void )
  4409. // lParam1 is the new user audio stream number.
  4410. //
  4411. // Raised from following domains: all
  4412. //
  4413. // Signaled when ever the current user audio stream number changes for the main
  4414. // title.  This can be changed automatically with a navigation command on disc
  4415. // as well as through IDVDAnnexJ.
  4416. // Audio stream numbers range from 0 to 7.  Stream $ffffffff
  4417. // indicates that no stream is selected.
  4418.  
  4419.   EC_DVD_SUBPICTURE_STREAM_CHANGE         = (EC_DVDBASE + $05);
  4420. // Parameters: ( DWORD, void )
  4421. // lParam1 is the new user subpicture stream number.
  4422. //
  4423. // Raised from following domains: all
  4424. //
  4425. // Signaled when ever the current user subpicture stream number changes for the main
  4426. // title.  This can be changed automatically with a navigation command on disc
  4427. // as well as through IDVDAnnexJ.
  4428. // Subpicture stream numbers range from 0 to 31.  Stream $ffffffff
  4429. // indicates that no stream is selected.
  4430.  
  4431.   EC_DVD_ANGLE_CHANGE                     = (EC_DVDBASE + $06);
  4432. // Parameters: ( DWORD, DWORD )
  4433. // lParam1 is the number of available angles.
  4434. // lParam2 is the current user angle number.
  4435. //
  4436. // Raised from following domains: all
  4437. //
  4438. // Signaled when ever either
  4439. //   a) the number of available angles changes, or
  4440. //   b) the current user angle number changes.
  4441. // Current angle number can be changed automatically with navigation command
  4442. // on disc as well as through IDVDAnnexJ.
  4443. // When the number of available angles is 1, the current video is not multiangle.
  4444. // Angle numbers range from 1 to 9.
  4445.  
  4446.  
  4447.   EC_DVD_BUTTON_CHANGE                    = (EC_DVDBASE + $07);
  4448. // Parameters: ( DWORD, DWORD )
  4449. // lParam1 is the number of available buttons.
  4450. // lParam2 is the current selected button number.
  4451. //
  4452. // Raised from following domains: all
  4453. //
  4454. // Signaled when ever either
  4455. //   a) the number of available buttons changes, or
  4456. //   b) the current selected button number changes.
  4457. // The current selected button can be changed automatically with navigation
  4458. // commands on disc as well as through IDVDAnnexJ.
  4459. // Button numbers range from 1 to 36.  Selected button number 0 implies that
  4460. // no button is selected.  Note that these button numbers enumerate all
  4461. // available button numbers, and do not always correspond to button numbers
  4462. // used for IDVDAnnexJ::ButtonSelectAndActivate since only a subset of buttons
  4463. // may be activated with ButtonSelectAndActivate.
  4464.  
  4465.  
  4466.   EC_DVD_VALID_UOPS_CHANGE                = (EC_DVDBASE + $08);
  4467. // Parameters: ( DWORD, void )
  4468. // lParam1 is a VALID_UOP_SOMTHING_OR_OTHER bit-field stuct which indicates
  4469. //   which IDVDAnnexJ commands are explicitly disable by the DVD disc.
  4470. //
  4471. // Raised from following domains: all
  4472. //
  4473. // Signaled when ever the available set of IDVDAnnexJ methods changes.  This
  4474. // only indicates which operations are explicited disabled by the content on
  4475. // the DVD disc, and does not guarentee that it is valid to call methods
  4476. // which are not disabled.  For example, if no buttons are currently present,
  4477. // IDVDAnnexJ::ButtonActivate() won't work, even though the buttons are not
  4478. // explicitly disabled.
  4479.  
  4480.  
  4481.   EC_DVD_STILL_ON                         = (EC_DVDBASE + $09);
  4482. // Parameters: ( BOOL, DWORD )
  4483. // lParam1 == 0  -->  buttons are available, so StillOff won't work
  4484. // lParam1 == 1  -->  no buttons available, so StillOff will work
  4485. // lParam2 indicates the number of seconds the still will last, with $ffffffff
  4486. //   indicating an infinite still (wait till button or StillOff selected).
  4487. //
  4488. // Raised from following domains: all
  4489. //
  4490. // Signaled at the beginning of any still: PGC still, Cell Still, or VOBU Still.
  4491. // Note that all combinations of buttons and still are possible (buttons on with
  4492. // still on, buttons on with still off, button off with still on, button off
  4493. // with still off).
  4494.  
  4495.   EC_DVD_STILL_OFF                         = (EC_DVDBASE + $0a);
  4496. // Parameters: ( void, void )
  4497. //
  4498. //   Indicating that any still that is currently active
  4499. //   has been released.
  4500. //
  4501. // Raised from following domains: all
  4502. //
  4503. // Signaled at the end of any still: PGC still, Cell Still, or VOBU Still.
  4504. //
  4505.  
  4506.   EC_DVD_CURRENT_TIME                     = (EC_DVDBASE + $0b);
  4507. // Parameters: ( DWORD, BOOL )
  4508. // lParam1 is a DVD_TIMECODE which indicates the current
  4509. //   playback time code in a BCD HH:MM:SS:FF format.
  4510. // lParam2 == 0  -->  time code is 25 frames/sec
  4511. // lParam2 == 1  -->  time code is 30 frames/sec (non-drop).
  4512. //
  4513. // Raised from following domains: DVD_DOMAIN_Title
  4514. //
  4515. // Signaled at the beginning of every VOBU, which occurs every .4 to 1.0 sec.
  4516. // This is only signaled for One_Sequential_PGC_Titles.
  4517.  
  4518.  
  4519.   EC_DVD_ERROR                            = (EC_DVDBASE + $0c);
  4520. // Parameters: ( DWORD, void)
  4521. // lParam1 is an enum DVD_ERROR which notifies the app of some error condition.
  4522. //
  4523. // Raised from following domains: all
  4524. //
  4525.  
  4526.   EC_DVD_WARNING                           = (EC_DVDBASE + $0d);
  4527. // Parameters: ( DWORD, void)
  4528. // lParam1 is an enum DVD_WARNING which notifies the app of some warning condition.
  4529. //
  4530. // Raised from following domains: all
  4531. //
  4532.  
  4533.   EC_DVD_CHAPTER_AUTOSTOP                  = (EC_DVDBASE + $0e);
  4534. // Parameters: (void, void)
  4535. //
  4536. //  Indicating that playback is stopped as a result of a call
  4537. //  to IDVDControl::ChapterPlayAutoStop()
  4538. //
  4539. // Raised from following domains : DVD_DOMAIN_TITLE
  4540. //
  4541.  
  4542.   EC_DVD_NO_FP_PGC                         = (EC_DVDBASE + $0f);
  4543. //  Parameters : (void, void)
  4544. //
  4545. //  Raised from the following domains : FP_DOM
  4546. //
  4547. //  Indicates that the DVD disc does not have a FP_PGC (First Play Program Chain)
  4548. //  and the DVD Navigator will not automatically load any PGC and start playback.
  4549. //
  4550.  
  4551.   EC_DVD_PLAYBACK_RATE_CHANGE              = (EC_DVDBASE + $10);
  4552.   EC_DVD_PARENTAL_LEVEL_CHANGE             = (EC_DVDBASE + $11);
  4553.   EC_DVD_PLAYBACK_STOPPED                  = (EC_DVDBASE + $12);
  4554.   EC_DVD_ANGLES_AVAILABLE                  = (EC_DVDBASE + $13);
  4555.   EC_DVD_PLAYPERIOD_AUTOSTOP               = (EC_DVDBASE + $14);
  4556.   EC_DVD_BUTTON_AUTO_ACTIVATED             = (EC_DVDBASE + $15);
  4557.   EC_DVD_CMD_START                         = (EC_DVDBASE + $16);
  4558.   EC_DVD_CMD_END                           = (EC_DVDBASE + $17);
  4559.   EC_DVD_DISC_EJECTED                      = (EC_DVDBASE + $18);
  4560.   EC_DVD_DISC_INSERTED                     = (EC_DVDBASE + $19);
  4561.   EC_DVD_CURRENT_HMSF_TIME                 = (EC_DVDBASE + $1a);
  4562.   EC_DVD_KARAOKE_MODE                      = (EC_DVDBASE + $1b);
  4563.  
  4564.  
  4565. (*==========================================================================;
  4566.  *
  4567.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4568.  *
  4569.  *  File:       dvdmedia.h
  4570.  *
  4571.  ***************************************************************************)
  4572.  
  4573. type
  4574. // -----------------------------------------------------------------------
  4575. // AC-3 definition for the AM_KSPROPSETID_AC3 property set
  4576. // -----------------------------------------------------------------------
  4577.   TAM_Property_AC3 = (
  4578.     AM_PROPERTY_AC3_INVALID_0,
  4579.     AM_PROPERTY_AC3_ERROR_CONCEALMENT,
  4580.     AM_PROPERTY_AC3_ALTERNATE_AUDIO,
  4581.     AM_PROPERTY_AC3_DOWNMIX,
  4582.     AM_PROPERTY_AC3_BIT_STREAM_MODE,
  4583.     AM_PROPERTY_AC3_DIALOGUE_LEVEL,
  4584.     AM_PROPERTY_AC3_LANGUAGE_CODE,
  4585.     AM_PROPERTY_AC3_ROOM_TYPE
  4586.   );
  4587.  
  4588.   TAM_AC3_Error_Concelment = record
  4589.     fRepeatPreviousBlock: BOOL;
  4590.     fErrorInCurrentBlock: BOOL;
  4591.   end;
  4592.  
  4593.   TAM_AC3_Alteranate_Audio = record
  4594.     fStereo: BOOL;
  4595.     DualMode: ULONG;
  4596.   end;
  4597.  
  4598. const
  4599.   AM_AC3_ALTERNATE_AUDIO_1     = 1;
  4600.   AM_AC3_ALTERNATE_AUDIO_2     = 2;
  4601.   AM_AC3_ALTERNATE_AUDIO_BOTH   = 3;
  4602.  
  4603. type
  4604.   TAM_AC3_DownMix = record
  4605.     fDownMix: BOOL;
  4606.     fDolbySurround: BOOL;
  4607.   end;
  4608.  
  4609.   TAM_AC3_BitStream_Mode = record
  4610.     BitStreamMode: Longint;
  4611.   end;
  4612.  
  4613. const
  4614.   AM_AC3_SERVICE_MAIN_AUDIO            = 0;
  4615.   AM_AC3_SERVICE_NO_DIALOG             = 1;
  4616.   AM_AC3_SERVICE_VISUALLY_IMPAIRED     = 2;
  4617.   AM_AC3_SERVICE_HEARING_IMPAIRED      = 3;
  4618.   AM_AC3_SERVICE_DIALOG_ONLY           = 4;
  4619.   AM_AC3_SERVICE_COMMENTARY            = 5;
  4620.   AM_AC3_SERVICE_EMERGENCY_FLASH       = 6;
  4621.   AM_AC3_SERVICE_VOICE_OVER            = 7;
  4622.  
  4623. type
  4624.   TAM_AC3_Dialogue_Level = record
  4625.     DialogueLevel: ULONG;
  4626.   end;
  4627.  
  4628.   TAM_AC3_RoomType = record
  4629.     fLargeRoom: BOOL;
  4630.   end;
  4631.  
  4632. // -----------------------------------------------------------------------
  4633. // subpicture definition for the AM_KSPROPSETID_DvdSubPic property set
  4634. // -----------------------------------------------------------------------
  4635.  
  4636.   TAM_Property_DVDSubpic = (
  4637.     AM_PROPERTY_DVDSUBPIC_PALETTE,
  4638.     AM_PROPERTY_DVDSUBPIC_HLI,
  4639.     AM_PROPERTY_DVDSUBPIC_COMPOSIT_ON   // TRUE for subpicture is displayed
  4640.   );
  4641.  
  4642.   TAM_DVD_YUV = record
  4643.     Reserved: Byte;
  4644.     Y: byte;
  4645.     U: Byte;
  4646.     V: Byte;
  4647.   end;
  4648.  
  4649.   TAM_Property_SPPAL = record
  4650.     sppal: array[0..15] of TAM_DVD_YUV;
  4651.   end;
  4652.  
  4653.   TAMColCon = record
  4654.     emph1col: Byte;
  4655.     emph2col: Byte;
  4656.     backcol: Byte;
  4657.     patcol: Byte;
  4658.     emph1con: Byte;
  4659.     emph2con: Byte;
  4660.     backcon: Byte;
  4661.     patcon: Byte;
  4662.   end;
  4663.  
  4664.   TAM_Property_SPHLI = record
  4665.     HLISS: Word;      //
  4666.     Reserved: Word;
  4667.     StartPTM: ULONG;   // start presentation time in x/90000
  4668.     EndPTM: ULONG;     // end PTM in x/90000
  4669.     StartX: Word;
  4670.     StartY: Word;
  4671.     StopX: Word;
  4672.     StopY: Word;
  4673.     ColCon: TAMColCon;     // color contrast description (4 bytes as given in HLI)
  4674.   end;
  4675.  
  4676.   AM_PROPERTY_COMPOSIT_ON = BOOL;
  4677.  
  4678. // -----------------------------------------------------------------------
  4679. // copy protection definitions
  4680. // -----------------------------------------------------------------------
  4681.  
  4682. // AM_UseNewCSSKey for the dwTypeSpecificFlags in IMediaSample2 to indicate
  4683. // the exact point in a stream after which to start applying a new CSS key.
  4684. // This is typically sent on an empty media sample just before attempting
  4685. // to renegotiate a CSS key.
  4686. const
  4687.   AM_UseNewCSSKey    = $1;
  4688.  
  4689. //
  4690. // AM_KSPROPSETID_CopyProt property set definitions
  4691. //
  4692. type
  4693.   TAM_Property_DVDCopyProt = TOLeEnum;
  4694. const
  4695.     AM_PROPERTY_DVDCOPY_CHLG_KEY       = $01;
  4696.     AM_PROPERTY_DVDCOPY_DVD_KEY1       = $02;
  4697.     AM_PROPERTY_DVDCOPY_DEC_KEY2       = $03;
  4698.     AM_PROPERTY_DVDCOPY_TITLE_KEY      = $04;
  4699.     AM_PROPERTY_COPY_MACROVISION       = $05;
  4700.     AM_PROPERTY_DVDCOPY_REGION         = $06;
  4701.     AM_PROPERTY_DVDCOPY_SET_COPY_STATE = $07;
  4702.     AM_PROPERTY_DVDCOPY_DISC_KEY       = $80;
  4703.  
  4704. type
  4705.   TAM_DVDCopy_ChlgKey = record
  4706.     ChlgKey: array[0..9] of Byte;
  4707.     Reserved: array[0..1] of Byte;
  4708.   end;
  4709.  
  4710.   TAM_DVDCopy_BusKey = record
  4711.     BusKey: array[0..4] of Byte;
  4712.     Reserved: array[0..0] of Byte;
  4713.   end;
  4714.  
  4715.   TAM_DVDCopy_DiscKey = record
  4716.     DiscKey: array[0..2047] of Byte;
  4717.   end;
  4718.  
  4719.   TAM_DVDCopy_TitleKey = record
  4720.     KeyFlags: ULONG;
  4721.     Reserved1: array[0..1] of ULONG;
  4722.     TitleKey: array[0..5] of Byte;
  4723.     Reserved2: array[0..1] of Byte;
  4724.   end;
  4725.  
  4726.   TAM_Copy_MacroVision = record
  4727.     MACROVISIONLevel: ULONG;
  4728.   end;
  4729.  
  4730.   TAM_DVDCopy_Set_Copy_State = record
  4731.     DVDCopyState: ULONG;
  4732.   end;
  4733.  
  4734.   TAM_DVDCopyState = (
  4735.     AM_DVDCOPYSTATE_INITIALIZE,
  4736.     AM_DVDCOPYSTATE_INITIALIZE_TITLE,   // indicates we are starting a title
  4737.                                         // key copy protection sequence
  4738.     AM_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  4739.     AM_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  4740.     AM_DVDCOPYSTATE_DONE
  4741.   );
  4742.  
  4743.   TAM_Copy_MacroVision_Level = (
  4744.     AM_MACROVISION_DISABLED,
  4745.     AM_MACROVISION_LEVEL1,
  4746.     AM_MACROVISION_LEVEL2,
  4747.     AM_MACROVISION_LEVEL3
  4748.   );
  4749.  
  4750. // CSS region stucture
  4751.   TDVD_Region = record
  4752.     CopySystem: Byte;
  4753.     RegionData: Byte;
  4754.     SystemRegion: Byte;
  4755.     Reserved: Byte;
  4756.   end;
  4757.  
  4758. //
  4759. // CGMS Copy Protection Flags
  4760. //
  4761.  
  4762. const
  4763.   AM_DVD_CGMS_RESERVED_MASK      = $00000078;
  4764.  
  4765.   AM_DVD_CGMS_COPY_PROTECT_MASK  = $00000018;
  4766.   AM_DVD_CGMS_COPY_PERMITTED     = $00000000;
  4767.   AM_DVD_CGMS_COPY_ONCE          = $00000010;
  4768.   AM_DVD_CGMS_NO_COPY            = $00000018;
  4769.  
  4770.   AM_DVD_COPYRIGHT_MASK          = $00000040;
  4771.   AM_DVD_NOT_COPYRIGHTED         = $00000000;
  4772.   AM_DVD_COPYRIGHTED             = $00000040;
  4773.  
  4774.   AM_DVD_SECTOR_PROTECT_MASK     = $00000020;
  4775.   AM_DVD_SECTOR_NOT_PROTECTED    = $00000000;
  4776.   AM_DVD_SECTOR_PROTECTED        = $00000020;
  4777.  
  4778.  
  4779. // -----------------------------------------------------------------------
  4780. // video format blocks
  4781. // -----------------------------------------------------------------------
  4782.  
  4783. type
  4784.   TAM_MPEG2Level = (
  4785.     AM_MPEG2Level_INVALID_0,
  4786.     AM_MPEG2Level_Low,
  4787.     AM_MPEG2Level_Main,
  4788.     AM_MPEG2Level_High1440,
  4789.     AM_MPEG2Level_High
  4790.   );
  4791.  
  4792.   TAM_MPEG2Profile = (
  4793.     AM_MPEG2Profile_0,
  4794.     AM_MPEG2Profile_Simple,
  4795.     AM_MPEG2Profile_Main,
  4796.     AM_MPEG2Profile_SNRScalable,
  4797.     AM_MPEG2Profile_SpatiallyScalable,
  4798.     AM_MPEG2Profile_High
  4799.   );
  4800.  
  4801. const
  4802.   AMINTERLACE_IsInterlaced             = $00000001;  // if 0, other interlace bits are irrelevent
  4803.   AMINTERLACE_1FieldPerSample          = $00000002;  // else 2 fields per media sample
  4804.   AMINTERLACE_Field1First              = $00000004;  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  4805.   AMINTERLACE_UNUSED                   = $00000008;  //
  4806.   AMINTERLACE_FieldPatternMask         = $00000030;  // use this mask with AMINTERLACE_FieldPat*
  4807.   AMINTERLACE_FieldPatField1Only       = $00000000;  // stream never contains a Field2
  4808.   AMINTERLACE_FieldPatField2Only       = $00000010;  // stream never contains a Field1
  4809.   AMINTERLACE_FieldPatBothRegular      = $00000020;  // There will be a Field2 for every Field1 (required for Weave?)
  4810.   AMINTERLACE_FieldPatBothIrregular    = $00000030;  // Random pattern of Field1s and Field2s
  4811.   AMINTERLACE_DisplayModeMask          = $000000c0;
  4812.   AMINTERLACE_DisplayModeBobOnly       = $00000000;
  4813.   AMINTERLACE_DisplayModeWeaveOnly     = $00000040;
  4814.   AMINTERLACE_DisplayModeBobOrWeave    = $00000080;
  4815.  
  4816.   AMCOPYPROTECT_RestrictDuplication    = $00000001;  // duplication of this stream should be restricted
  4817.  
  4818.   AMMPEG2_DoPanScan            = $00000001;  //if set, the MPEG-2 video decoder should crop output image
  4819.                                                 //  based on pan-scan vectors in picture_display_extension
  4820.                                                 //  and change the picture aspect ratio accordingly.
  4821.   AMMPEG2_DVDLine21Field1      = $00000002;  //if set, the MPEG-2 decoder must be able to produce an output
  4822.                                                 //  pin for DVD style closed caption data found in GOP layer of field 1
  4823.   AMMPEG2_DVDLine21Field2      = $00000004;  //if set, the MPEG-2 decoder must be able to produce an output
  4824.                                                 //  pin for DVD style closed caption data found in GOP layer of field 2
  4825.   AMMPEG2_SourceIsLetterboxed  = $00000008;  //if set, indicates that black bars have been encoded in the top
  4826.                                                 //  and bottom of the video.
  4827.   AMMPEG2_FilmCameraMode       = $00000010;  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  4828.                                                 //  indicates that "camera mode" was used.
  4829.   AMMPEG2_LetterboxAnalogOut   = $00000020;  //if set and this stream is sent to an analog output, it should
  4830.                         //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  4831.  
  4832. type
  4833.   TVIDEOINFOHEADER2 = record
  4834.     rcSource: TRect;
  4835.     rcTarget: TRect;
  4836.     dwBitRate: DWORD;
  4837.     dwBitErrorRate: DWORD;
  4838.     AvgTimePerFrame: TReference_Time;
  4839.     dwInterlaceFlags: DWORD;         // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  4840.     dwCopyProtectFlags: DWORD;       // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  4841.     dwPictAspectRatioX: DWORD;       // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
  4842.     dwPictAspectRatioY: DWORD;       // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  4843.     dwReserved1: DWORD;              // must be 0; reject connection otherwise
  4844.     dwReserved2: DWORD;              // must be 0; reject connection otherwise
  4845.     bmiHeader: TBitmapInfoHeader;
  4846.   end;
  4847.  
  4848.   TMPEG2VideoInfo = record
  4849.      hdr: TVIDEOINFOHEADER2;
  4850.      dwStartTimeCode: DWORD;                 //  ?? not used for DVD ??
  4851.      cbSequenceHeader: DWORD;                // is 0 for DVD (no sequence header)
  4852.      dwProfile: DWORD;                       // use enum MPEG2Profile
  4853.      dwLevel: DWORD;                         // use enum MPEG2Level
  4854.      dwFlags: DWORD;                         // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  4855.      dwSequenceHeader: array[0..0] of DWORD; // DWORD instead of Byte for alignment purposes
  4856.                                                //   For MPEG-2, if a sequence_header is included, the sequence_extension
  4857.                                                //   should also be included
  4858.   end;
  4859. {
  4860. #define SIZE_MPEG2VIDEOINFO(pv) (FIELD_OFFSET(MPEG2VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  4861. #define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  4862. // use this macro instead, the previous only works for MPEG1VIDEOINFO structures
  4863. #define MPEG2_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->dwSequenceHeader)
  4864.  }
  4865.  
  4866. //===================================================================================
  4867. // flags for dwTypeSpecificFlags in AM_SAMPLE2_PROPERTIES which define type specific
  4868. // data in IMediaSample2
  4869. //===================================================================================
  4870.  
  4871. const
  4872.   AM_VIDEO_FLAG_FIELD_MASK          = $0003;    // use this mask to check whether the sample is field1 or field2 or frame
  4873.   AM_VIDEO_FLAG_INTERLEAVED_FRAME   = $0000;    // the sample is a frame (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  4874.   AM_VIDEO_FLAG_FIELD1              = $0001;    // the sample is field1 (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  4875.   AM_VIDEO_FLAG_FIELD2              = $0002;    // the sample is the field2 (remember to use AM_VIDEO_FLAG_FIELD_MASK when using this)
  4876.   AM_VIDEO_FLAG_FIELD1FIRST         = $0004;    // if set means display field1 first, else display field2 first.
  4877.                                         // this bit is irrelavant for 1FieldPerSample mode
  4878.   AM_VIDEO_FLAG_WEAVE               = $0008;    // if set use bob display mode else weave
  4879.   AM_VIDEO_FLAG_IPB_MASK            = $0030;    // use this mask to check whether the sample is I, P or B
  4880.   AM_VIDEO_FLAG_I_SAMPLE            = $0000;    // I Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  4881.   AM_VIDEO_FLAG_P_SAMPLE            = $0010;    // P Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  4882.   AM_VIDEO_FLAG_B_SAMPLE            = $0020;    // B Sample (remember to use AM_VIDEO_FLAG_IPB_MASK when using this)
  4883.   AM_VIDEO_FLAG_REPEAT_FIELD        = $0040;    // if set means display the field which has been displayed first again after displaying
  4884.                                         // both fields first. This bit is irrelavant for 1FieldPerSample mode
  4885. // -----------------------------------------------------------------------
  4886. // AM_KSPROPSETID_DvdKaraoke property set definitions
  4887. // -----------------------------------------------------------------------
  4888. type
  4889. TAM_DvdKaraokeData = record
  4890.     dwDownmix           : DWORD;    // bitwise OR of AM_DvdKaraoke_Downmix flags
  4891.     dwSpeakerAssignment : DWORD;    // AM_DvdKaraoke_SpeakerAssignment
  4892.     end;
  4893.  
  4894. TAM_PROPERTY_DVDKARAOKE = (
  4895.     AM_PROPERTY_DVDKARAOKE_ENABLE,  // BOOL
  4896.     AM_PROPERTY_DVDKARAOKE_DATA
  4897.     );
  4898.  
  4899. // -----------------------------------------------------------------------
  4900. // AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  4901. // rate changes.
  4902. // -----------------------------------------------------------------------
  4903. type
  4904.   TAM_Property_TS_Rate_Change = (
  4905.     AM_RATE_INVALID_0,
  4906.     AM_RATE_SimpleRateChange,   // rw, use AM_SimpleRateChange
  4907.     AM_RATE_ExactRateChange,    // rw, use AM_ExactRateChange
  4908.     AM_RATE_MaxFullDataRate,    // r, use AM_MaxFullDataRate
  4909.     AM_RATE_Step                // w, use AM_Step
  4910.   );
  4911. // -------------------------------------------------------------------
  4912. // AM_KSPROPSETID_DVD_RateChange property set definitions for new DVD
  4913. // rate change scheme.
  4914. // -------------------------------------------------------------------
  4915.  
  4916.   TAM_PROPERTY_DVD_RATE_CHANGE = (
  4917.     AM_RATE_Invalid,
  4918.     AM_RATE_ChangeRate,       // w,  use AM_DVD_ChangeRate
  4919.     AM_RATE_FullDataRateMax,  // r,  use AM_MaxFullDataRate
  4920.     AM_RATE_ReverseDecode,    // r,  use LONG
  4921.     AM_RATE_DecoderPosition,  // r,  use AM_DVD_DecoderPosition
  4922.     AM_RATE_DecoderVersion    // r,  use LONG
  4923.   );
  4924.  
  4925.   TAM_SimpleRateChange = record
  4926.     // this is the simplest mechinism to set a time stamp rate change on
  4927.     // a filter (simplest for the person setting the rate change, harder
  4928.     // for the filter doing the rate change).
  4929.     StartTime: TReference_Time;    //stream time at which to start this rate
  4930.     Rate: Longint;                //new rate * 10000 (decimal)
  4931.   end;
  4932.  
  4933.   TAM_ExactRateChange = record
  4934.     OutputZeroTime: TReference_Time;   //input TS that maps to zero output TS
  4935.     Rate: Longint;                    //new rate * 10000 (decimal)
  4936.   end;
  4937.  
  4938.   TAM_MaxFullDateRate = Longint;    //rate * 10000 (decimal)
  4939.  
  4940.   TAM_Step = DWORD;        // number of frame to step
  4941.  
  4942.   // New rate change property set, structs. enums etc.
  4943.   TAM_DVD_ChangeRate = record
  4944.      StartInTime  : TREFERENCE_TIME;  // stream time (input) at which to start decoding at this rate
  4945.      StartOutTime : TREFERENCE_TIME;  // reference time (output) at which to start showing at this rate
  4946.      Rate         : Longint;         // new rate * 10000 (decimal)
  4947.      end;
  4948.  
  4949.   TAM_DVD_DecoderPosition = int64 ;
  4950.  
  4951.   TDVD_PLAY_DIRECTION = (
  4952.     DVD_DIR_FORWARD,
  4953.     DVD_DIR_BACKWARD
  4954.     );
  4955.  
  4956. (*==========================================================================;
  4957.  *
  4958.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4959.  *
  4960.  *  File:       activecf.h
  4961.  *
  4962.  ***************************************************************************)
  4963.  
  4964. const
  4965.   CFSTR_VFW_FILTERLIST = 'Video for Windows 4 Filters';
  4966.  
  4967. type
  4968.   TVFW_FilterList = record
  4969.     cFilters: UINT;                     // number of CLSIDs in aClsId
  4970.     aClsId: array[0..0] of TGUID;       // ClsId of each filter
  4971.   end;
  4972.  
  4973.  
  4974. (*==========================================================================;
  4975.  *
  4976.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  4977.  *
  4978.  *  File:       vfwmsgs.h
  4979.  *
  4980.  ***************************************************************************)
  4981.  
  4982. const
  4983. //
  4984. // Define the severity codes
  4985. //
  4986.  
  4987.   VFW_E_INVALIDMEDIATYPE                   = $80040200;
  4988.   VFW_E_INVALIDSUBTYPE                     = $80040201;
  4989.   VFW_E_NEED_OWNER                         = $80040202;
  4990.   VFW_E_ENUM_OUT_OF_SYNC                   = $80040203;
  4991.   VFW_E_ALREADY_CONNECTED                  = $80040204;
  4992.   VFW_E_FILTER_ACTIVE                      = $80040205;
  4993.   VFW_E_NO_TYPES                           = $80040206;
  4994.   VFW_E_NO_ACCEPTABLE_TYPES                = $80040207;
  4995.   VFW_E_INVALID_DIRECTION                  = $80040208;
  4996.   VFW_E_NOT_CONNECTED                      = $80040209;
  4997.   VFW_E_NO_ALLOCATOR                       = $8004020A;
  4998.   VFW_E_RUNTIME_ERROR                      = $8004020B;
  4999.   VFW_E_BUFFER_NOTSET                      = $8004020C;
  5000.   VFW_E_BUFFER_OVERFLOW                    = $8004020D;
  5001.   VFW_E_BADALIGN                           = $8004020E;
  5002.   VFW_E_ALREADY_COMMITTED                  = $8004020F;
  5003.   VFW_E_BUFFERS_OUTSTANDING                = $80040210;
  5004.   VFW_E_NOT_COMMITTED                      = $80040211;
  5005.   VFW_E_SIZENOTSET                         = $80040212;
  5006.   VFW_E_NO_CLOCK                           = $80040213;
  5007.   VFW_E_NO_SINK                            = $80040214;
  5008.   VFW_E_NO_INTERFACE                       = $80040215;
  5009.   VFW_E_NOT_FOUND                          = $80040216;
  5010.   VFW_E_CANNOT_CONNECT                     = $80040217;
  5011.   VFW_E_CANNOT_RENDER                      = $80040218;
  5012.   VFW_E_CHANGING_FORMAT                    = $80040219;
  5013.   VFW_E_NO_COLOR_KEY_SET                   = $8004021A;
  5014.   VFW_E_NOT_OVERLAY_CONNECTION             = $8004021B;
  5015.   VFW_E_NOT_SAMPLE_CONNECTION              = $8004021C;
  5016.   VFW_E_PALETTE_SET                        = $8004021D;
  5017.   VFW_E_COLOR_KEY_SET                      = $8004021E;
  5018.   VFW_E_NO_COLOR_KEY_FOUND                 = $8004021F;
  5019.   VFW_E_NO_PALETTE_AVAILABLE               = $80040220;
  5020.   VFW_E_NO_DISPLAY_PALETTE                 = $80040221;
  5021.   VFW_E_TOO_MANY_COLORS                    = $80040222;
  5022.   VFW_E_STATE_CHANGED                      = $80040223;
  5023.   VFW_E_NOT_STOPPED                        = $80040224;
  5024.   VFW_E_NOT_PAUSED                         = $80040225;
  5025.   VFW_E_NOT_RUNNING                        = $80040226;
  5026.   VFW_E_WRONG_STATE                        = $80040227;
  5027.   VFW_E_START_TIME_AFTER_END               = $80040228;
  5028.   VFW_E_INVALID_RECT                       = $80040229;
  5029.   VFW_E_TYPE_NOT_ACCEPTED                  = $8004022A;
  5030.   VFW_E_SAMPLE_REJECTED                    = $8004022B;
  5031.   VFW_E_SAMPLE_REJECTED_EOS                = $8004022C;
  5032.   VFW_E_DUPLICATE_NAME                     = $8004022D;
  5033.   VFW_S_DUPLICATE_NAME                     = $0004022D;
  5034.   VFW_E_TIMEOUT                            = $8004022E;
  5035.   VFW_E_INVALID_FILE_FORMAT                = $8004022F;
  5036.   VFW_E_ENUM_OUT_OF_RANGE                  = $80040230;
  5037.   VFW_E_CIRCULAR_GRAPH                     = $80040231;
  5038.   VFW_E_NOT_ALLOWED_TO_SAVE                = $80040232;
  5039.   VFW_E_TIME_ALREADY_PASSED                = $80040233;
  5040.   VFW_E_ALREADY_CANCELLED                  = $80040234;
  5041.   VFW_E_CORRUPT_GRAPH_FILE                 = $80040235;
  5042.   VFW_E_ADVISE_ALREADY_SET                 = $80040236;
  5043.   VFW_S_STATE_INTERMEDIATE                 = $00040237;
  5044.   VFW_E_NO_MODEX_AVAILABLE                 = $80040238;
  5045.   VFW_E_NO_ADVISE_SET                      = $80040239;
  5046.   VFW_E_NO_FULLSCREEN                      = $8004023A;
  5047.   VFW_E_IN_FULLSCREEN_MODE                 = $8004023B;
  5048.   VFW_E_UNKNOWN_FILE_TYPE                  = $80040240;
  5049.   VFW_E_CANNOT_LOAD_SOURCE_FILTER          = $80040241;
  5050.   VFW_S_PARTIAL_RENDER                     = $00040242;
  5051.   VFW_E_FILE_TOO_SHORT                     = $80040243;
  5052.   VFW_E_INVALID_FILE_VERSION               = $80040244;
  5053.   VFW_S_SOME_DATA_IGNORED                  = $00040245;
  5054.   VFW_S_CONNECTIONS_DEFERRED               = $00040246;
  5055.   VFW_E_INVALID_CLSID                      = $80040247;
  5056.   VFW_E_INVALID_MEDIA_TYPE                 = $80040248;
  5057.   VFW_E_BAD_KEY                            = $800403F2;
  5058.   VFW_S_NO_MORE_ITEMS                      = $00040103;
  5059.   VFW_E_SAMPLE_TIME_NOT_SET                = $80040249;
  5060.   VFW_S_RESOURCE_NOT_NEEDED                = $00040250;
  5061.   VFW_E_MEDIA_TIME_NOT_SET                 = $80040251;
  5062.   VFW_E_NO_TIME_FORMAT_SET                 = $80040252;
  5063.   VFW_E_MONO_AUDIO_HW                      = $80040253;
  5064.   VFW_S_MEDIA_TYPE_IGNORED                 = $00040254;
  5065.   VFW_E_NO_AUDIO_HARDWARE                  = $80040256;
  5066.   VFW_S_VIDEO_NOT_RENDERED                 = $00040257;
  5067.   VFW_S_AUDIO_NOT_RENDERED                 = $00040258;
  5068.   VFW_E_RPZA                               = $80040259;
  5069.   VFW_S_RPZA                               = $0004025A;
  5070.   VFW_E_PROCESSOR_NOT_SUITABLE             = $8004025B;
  5071.   VFW_E_UNSUPPORTED_AUDIO                  = $8004025C;
  5072.   VFW_E_UNSUPPORTED_VIDEO                  = $8004025D;
  5073.   VFW_E_MPEG_NOT_CONSTRAINED               = $8004025E;
  5074.   VFW_E_NOT_IN_GRAPH                       = $8004025F;
  5075.   VFW_S_ESTIMATED                          = $00040260;
  5076.   VFW_E_NO_TIME_FORMAT                     = $80040261;
  5077.   VFW_E_READ_ONLY                          = $80040262;
  5078.   VFW_S_RESERVED                           = $00040263;
  5079.   VFW_E_BUFFER_UNDERFLOW                   = $80040264;
  5080.   VFW_E_UNSUPPORTED_STREAM                 = $80040265;
  5081.   VFW_E_NO_TRANSPORT                       = $80040266;
  5082.   VFW_S_STREAM_OFF                         = $00040267;
  5083.   VFW_S_CANT_CUE                           = $00040268;
  5084.   VFW_E_BAD_VIDEOCD                        = $80040269;
  5085.   VFW_S_NO_STOP_TIME                       = $00040270;
  5086.   VFW_E_OUT_OF_VIDEO_MEMORY                = $80040271;
  5087.   VFW_E_VP_NEGOTIATION_FAILED              = $80040272;
  5088.   VFW_E_DDRAW_CAPS_NOT_SUITABLE            = $80040273;
  5089.   VFW_E_NO_VP_HARDWARE                     = $80040274;
  5090.   VFW_E_NO_CAPTURE_HARDWARE                = $80040275;
  5091.   VFW_E_DVD_OPERATION_INHIBITED            = $80040276;
  5092.   VFW_E_DVD_INVALIDDOMAIN                  = $80040277;
  5093.   VFW_E_DVD_GRAPHNOTREADY                  = $80040279;
  5094.   VFW_E_DVD_RENDERFAIL                     = $8004027A;
  5095.   VFW_E_DVD_DECNOTENOUGH                   = $8004027B;
  5096.   VFW_E_DDRAW_VERSION_NOT_SUITABLE         = $8004027C;
  5097.   VFW_E_COPYPROT_FAILED                    = $8004027D;
  5098.   VFW_S_NOPREVIEWPIN                       = $0004027E;
  5099.   VFW_E_TIME_EXPIRED                       = $8004027F;
  5100.   VFW_S_DVD_NON_ONE_SEQUENTIAL             = $00040280;
  5101.   VFW_E_DVD_WRONG_SPEED                    = $80040281;
  5102.   VFW_E_DVD_MENU_DOES_NOT_EXIST            = $80040282;
  5103.   VFW_E_DVD_CMD_CANCELLED                  = $80040283;
  5104.   VFW_E_DVD_STATE_WRONG_VERSION            = $80040284;
  5105.   VFW_E_DVD_STATE_CORRUPT                  = $80040285;
  5106.   VFW_E_DVD_STATE_WRONG_DISC               = $80040286;
  5107.   VFW_E_DVD_INCOMPATIBLE_REGION            = $80040287;
  5108.   VFW_E_DVD_NO_ATTRIBUTES                  = $80040288;
  5109.   VFW_E_DVD_NO_GOUP_PGC                    = $80040289;
  5110.   VFW_E_DVD_LOW_PARENTAL_LEVEL             = $8004028A;
  5111.   VFW_E_DVD_NOT_IN_KARAOKE_MODE            = $8004028B;
  5112.   VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE = $0004028C;
  5113.   VFW_S_DVD_NOT_ACCURATE                   = $0004028D;
  5114.   VFW_E_FRAME_STEP_UNSUPPORTED             = $8004028E;
  5115.   VFW_E_DVD_STREAM_DISABLED                = $8004028F;
  5116.   VFW_E_DVD_TITLE_UNKNOWN                  = $80040290;
  5117.   VFW_E_DVD_INVALID_DISC                   = $80040291;
  5118.   VFW_E_DVD_NO_RESUME_INFORMATION          = $80040292;
  5119.   VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD = $80040293;
  5120.   VFW_E_PIN_ALREADY_BLOCKED                = $80040294;
  5121.   VFW_E_CERTIFICATION_FAILURE              = $80040295;
  5122.  
  5123.   E_PROP_SET_UNSUPPORTED            = $80070492;
  5124.   E_PROP_ID_UNSUPPORTED             = $80070490;
  5125.  
  5126.  
  5127. (*==========================================================================;
  5128.  *
  5129.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  5130.  *
  5131.  *  Files:       edevdefs.h
  5132.  *               XPrtDefs.h (derived from edevdefs.h)
  5133.  *
  5134.  ***************************************************************************)
  5135.  
  5136. const
  5137.   ED_BASE                                 = $1000;
  5138.  
  5139. // this is used to tell the device communications object which
  5140. // physical communications port to use.
  5141.   DEV_PORT_SIM                            = 1;
  5142.   DEV_PORT_COM1                           = 2;
  5143.   DEV_PORT_COM2                           = 3;
  5144.   DEV_PORT_COM3                           = 4;
  5145.   DEV_PORT_COM4                           = 5;
  5146.   DEV_PORT_DIAQ                           = 6;
  5147.   DEV_PORT_ARTI                           = 7;
  5148.   DEV_PORT_1394                           = 8;
  5149.   DEV_PORT_USB                            = 9;
  5150.   DEV_PORT_MIN                            = DEV_PORT_SIM;
  5151.   DEV_PORT_MAX                            = DEV_PORT_USB;
  5152.  
  5153. //      IAMExtDevice Capability Items:  unless otherwise specified, these items return
  5154. //         OATRUE or OAFALSE.  All return values are in pdwValue unless otherwise specified:
  5155.  
  5156.   ED_DEVCAP_CAN_RECORD                    = ED_BASE+1;
  5157.   ED_DEVCAP_CAN_RECORD_STROBE             = ED_BASE+2;
  5158.   ED_DEVCAP_HAS_AUDIO                     = ED_BASE+3;
  5159.   ED_DEVCAP_HAS_VIDEO                     = ED_BASE+4;
  5160.   ED_DEVCAP_USES_FILES                    = ED_BASE+5;
  5161.   ED_DEVCAP_CAN_SAVE                      = ED_BASE+6;
  5162.   ED_DEVCAP_DEVICE_TYPE                   = ED_BASE+7;
  5163.   ED_DEVTYPE_VCR                          = ED_BASE+8;
  5164.   ED_DEVTYPE_LASERDISK                    = ED_BASE+9;
  5165.   ED_DEVTYPE_ATR                          = ED_BASE+10;
  5166.   ED_DEVTYPE_DDR                          = ED_BASE+11;
  5167.   ED_DEVTYPE_ROUTER                       = ED_BASE+12;
  5168.   ED_DEVTYPE_KEYER                        = ED_BASE+13;
  5169.   ED_DEVTYPE_MIXER_VIDEO                  = ED_BASE+14;
  5170.   ED_DEVTYPE_DVE                          = ED_BASE+15;
  5171.   ED_DEVTYPE_WIPEGEN                      = ED_BASE+16;
  5172.   ED_DEVTYPE_MIXER_AUDIO                  = ED_BASE+17;
  5173.   ED_DEVTYPE_CG                           = ED_BASE+18;
  5174.   ED_DEVTYPE_TBC                          = ED_BASE+19;
  5175.   ED_DEVTYPE_TCG                          = ED_BASE+20;
  5176.   ED_DEVTYPE_GPI                          = ED_BASE+21;
  5177.   ED_DEVTYPE_JOYSTICK                     = ED_BASE+22;
  5178.   ED_DEVTYPE_KEYBOARD                     = ED_BASE+23;
  5179.  
  5180. // returns mfr-specific ID from external device.
  5181.   ED_DEVCAP_EXTERNAL_DEVICE_ID            = ED_BASE+24;
  5182.  
  5183.   ED_DEVCAP_TIMECODE_READ                 = ED_BASE+25;
  5184.   ED_DEVCAP_TIMECODE_WRITE                = ED_BASE+26;
  5185. //      used for seekable non-timecode enabled devices
  5186.   ED_DEVCAP_CTLTRK_READ                   = ED_BASE+27;
  5187. //      used for seekable non-timecode enabled devices
  5188.   ED_DEVCAP_INDEX_READ                    = ED_BASE+28;
  5189.  
  5190. // returns device preroll time in current time format
  5191.   ED_DEVCAP_PREROLL                       = ED_BASE+29;
  5192. // returns device postroll time in current time format
  5193.   ED_DEVCAP_POSTROLL                     = ED_BASE+30;
  5194.  
  5195. // returns indication of deviceÆs synchronization accuracy.
  5196.   ED_DEVCAP_SYNC_ACCURACY                = ED_BASE+31;
  5197.   ED_SYNCACC_PRECISE                     = ED_BASE+32;
  5198.   ED_SYNCACC_FRAME                       = ED_BASE+33;
  5199.   ED_SYNCACC_ROUGH                       = ED_BASE+34;
  5200.  
  5201. // returns deviceÆs normal framerate.
  5202.   ED_DEVCAP_NORMAL_RATE                  = ED_BASE+35;
  5203.   ED_RATE_24                             = ED_BASE+36;
  5204.   ED_RATE_25                             = ED_BASE+37;
  5205.   ED_RATE_2997                           = ED_BASE+38;
  5206.   ED_RATE_30                             = ED_BASE+39;
  5207.  
  5208.   ED_DEVCAP_CAN_PREVIEW = ED_BASE+40;
  5209.   ED_DEVCAP_CAN_MONITOR_SOURCES = ED_BASE+41;
  5210.  
  5211. // indicates implementation allows testing of methods/parameters by
  5212. // setting the hi bit of a parm that makes sense - see individual methods
  5213. // for details.
  5214.   ED_DEVCAP_CAN_TEST                     = ED_BASE+42;
  5215.  
  5216. // indicates device accepts video as an input.
  5217.   ED_DEVCAP_VIDEO_INPUTS                 = ED_BASE+43;
  5218.  
  5219. // indicates device accepts audio as an input.
  5220.   ED_DEVCAP_AUDIO_INPUTS                 = ED_BASE+44;
  5221.  
  5222.   ED_DEVCAP_NEEDS_CALIBRATING            = ED_BASE+45;
  5223.  
  5224.   ED_DEVCAP_SEEK_TYPE                    = ED_BASE+46;
  5225.   ED_SEEK_PERFECT                        = ED_BASE+47;
  5226.   ED_SEEK_FAST                           = ED_BASE+48;
  5227.   ED_SEEK_SLOW                           = ED_BASE+49;
  5228.  
  5229.   ED_POWER_ON                            = ED_BASE+50;
  5230.   ED_POWER_OFF                           = ED_BASE+51;
  5231.   ED_POWER_STANDBY                       = ED_BASE+52;
  5232.  
  5233.   ED_ACTIVE                              = ED_BASE+53;
  5234.   ED_INACTIVE                            = ED_BASE+54;
  5235.   ED_ALL                                 = ED_BASE+55;
  5236.   ED_TEST                                = ED_BASE+56;
  5237.  
  5238. //      IAMExtTransport Capability Items:  unless otherwise specified, these items return
  5239. //         OATRUE or OAFALSE.  All return values are in pdwValue unless otherwise specified:
  5240.  
  5241.   ED_TRANSCAP_CAN_EJECT                  = ED_BASE+100;
  5242.   ED_TRANSCAP_CAN_BUMP_PLAY              = ED_BASE+101;
  5243.   ED_TRANSCAP_CAN_PLAY_BACKWARDS         = ED_BASE+102;
  5244.   ED_TRANSCAP_CAN_SET_EE                 = ED_BASE+103;
  5245.   ED_TRANSCAP_CAN_SET_PB                 = ED_BASE+104;
  5246.   ED_TRANSCAP_CAN_DELAY_VIDEO_IN         = ED_BASE+105;
  5247.   ED_TRANSCAP_CAN_DELAY_VIDEO_OUT        = ED_BASE+106;
  5248.   ED_TRANSCAP_CAN_DELAY_AUDIO_IN         = ED_BASE+107;
  5249.   ED_TRANSCAP_CAN_DELAY_AUDIO_OUT        = ED_BASE+108;
  5250.   ED_TRANSCAP_FWD_VARIABLE_MAX           = ED_BASE+109;
  5251.   ED_TRANSCAP_FWD_VARIABLE_MIN             = ED_BASE+800;
  5252.   ED_TRANSCAP_REV_VARIABLE_MAX           = ED_BASE+110;
  5253.   ED_TRANSCAP_REV_VARIABLE_MIN             = ED_BASE+801;
  5254.   ED_TRANSCAP_FWD_SHUTTLE_MAX         = ED_BASE+802;
  5255.   ED_TRANSCAP_FWD_SHUTTLE_MIN         = ED_BASE+803;
  5256.   ED_TRANSCAP_REV_SHUTTLE_MAX         = ED_BASE+804;
  5257.   ED_TRANSCAP_REV_SHUTTLE_MIN         = ED_BASE+805;
  5258.   ED_TRANSCAP_NUM_AUDIO_TRACKS           = ED_BASE+111;
  5259.   ED_TRANSCAP_LTC_TRACK                  = ED_BASE+112;
  5260.   ED_TRANSCAP_NEEDS_TBC                  = ED_BASE+113;
  5261.   ED_TRANSCAP_NEEDS_CUEING               = ED_BASE+114;
  5262.   ED_TRANSCAP_CAN_INSERT                 = ED_BASE+115;
  5263.   ED_TRANSCAP_CAN_ASSEMBLE               = ED_BASE+116;
  5264.   ED_TRANSCAP_FIELD_STEP                 = ED_BASE+117;
  5265.   ED_TRANSCAP_CLOCK_INC_RATE             = ED_BASE+118;
  5266.   ED_TRANSCAP_CAN_DETECT_LENGTH          = ED_BASE+119;
  5267.   ED_TRANSCAP_CAN_FREEZE                 = ED_BASE+120;
  5268.   ED_TRANSCAP_HAS_TUNER                  = ED_BASE+121;
  5269.   ED_TRANSCAP_HAS_TIMER                  = ED_BASE+122;
  5270.   ED_TRANSCAP_HAS_CLOCK                  = ED_BASE+123;
  5271.   ED_TRANSCAP_MULTIPLE_EDITS         = ED_BASE+806;
  5272.   ED_TRANSCAP_IS_MASTER             = ED_BASE+807;
  5273.   ED_TRANSCAP_HAS_DT             = ED_BASE+814;
  5274.  
  5275. //      IAMExtTransport Media States
  5276.   ED_MEDIA_SPIN_UP                       = ED_BASE+130;
  5277.   ED_MEDIA_SPIN_DOWN                     = ED_BASE+131;
  5278.   ED_MEDIA_UNLOAD                        = ED_BASE+132;
  5279.  
  5280. //      IAMExtTransport Modes
  5281.   ED_MODE_PLAY                           = ED_BASE+200;
  5282.   ED_MODE_STOP                           = ED_BASE+201;
  5283.   ED_MODE_FREEZE                         = ED_BASE+202;
  5284.   ED_MODE_THAW                           = ED_BASE+203;
  5285.   ED_MODE_FF                             = ED_BASE+204;
  5286.   ED_MODE_REW                            = ED_BASE+205;
  5287.   ED_MODE_RECORD                         = ED_BASE+206;
  5288.   ED_MODE_RECORD_STROBE                  = ED_BASE+207;
  5289.   ED_MODE_RECORD_FREEZE                 = ED_BASE+808;
  5290.   ED_MODE_STEP                           = ED_BASE+208;
  5291.   ED_MODE_STEP_FWD             = ED_BASE+208;
  5292.   ED_MODE_STEP_REV             = ED_BASE+809;
  5293.   ED_MODE_SHUTTLE                        = ED_BASE+209;
  5294.   ED_MODE_EDIT_CUE                       = ED_BASE+210;
  5295.   ED_MODE_VAR_SPEED                      = ED_BASE+211;
  5296.   ED_MODE_PERFORM                        = ED_BASE+212;
  5297.   ED_MODE_LINK_ON                        = ED_BASE+280;
  5298.   ED_MODE_LINK_OFF                       = ED_BASE+281;
  5299.   ED_MODE_NOTIFY_ENABLE                 = ED_BASE+810;
  5300.   ED_MODE_NOTIFY_DISABLE         = ED_BASE+811;
  5301.   ED_MODE_SHOT_SEARCH             = ED_BASE+812;
  5302.  
  5303. //      IAMTimecodeReader/Generator/Display defines
  5304. //
  5305. // Timecode Generator Mode params and values:
  5306. //
  5307.   ED_TCG_TIMECODE_TYPE                   = ED_BASE+400;
  5308.   ED_TCG_SMPTE_LTC                       = ED_BASE+401;
  5309.   ED_TCG_SMPTE_VITC                      = ED_BASE+402;
  5310.   ED_TCG_MIDI_QF                         = ED_BASE+403;
  5311.   ED_TCG_MIDI_FULL                       = ED_BASE+404;
  5312.  
  5313.   ED_TCG_FRAMERATE                       = ED_BASE+405;
  5314.   ED_FORMAT_SMPTE_30                     = ED_BASE+406;
  5315.   ED_FORMAT_SMPTE_30DROP                 = ED_BASE+407;
  5316.   ED_FORMAT_SMPTE_25                     = ED_BASE+408;
  5317.   ED_FORMAT_SMPTE_24                     = ED_BASE+409;
  5318.  
  5319.   ED_TCG_SYNC_SOURCE                     = ED_BASE+410;
  5320.   ED_TCG_VIDEO                           = ED_BASE+411;
  5321.   ED_TCG_READER                          = ED_BASE+412;
  5322.   ED_TCG_FREE                            = ED_BASE+413;
  5323.  
  5324.   ED_TCG_REFERENCE_SOURCE                = ED_BASE+414;
  5325.  
  5326. // TimeCodeReader Mode params and values:
  5327.   ED_TCR_SOURCE                          = ED_BASE+416;
  5328. // ED_TCG (already defined)
  5329.   ED_TCR_LTC                             = ED_BASE+417;
  5330.   ED_TCR_VITC                            = ED_BASE+418;
  5331.   ED_TCR_CT                              = ED_BASE+419;
  5332.   ED_TCR_FTC                 = ED_BASE+420;
  5333.  
  5334. // ED_MODE_NOTIFY_ENABLE can be OATRUE or OAFALSE (defined in transport mode
  5335. //  section of this file).  
  5336.   ED_TCR_LAST_VALUE                 = ED_BASE+421;   
  5337.  
  5338. // TimeCode Display Mode params and values:
  5339. //
  5340.   ED_TCD_SOURCE                          = ED_BASE+422;
  5341.   ED_TCR                                 = ED_BASE+423;
  5342.   ED_TCG                                 = ED_BASE+424;
  5343.  
  5344.   ED_TCD_SIZE                            = ED_BASE+425;
  5345.   ED_SMALL                               = ED_BASE+426;
  5346.   ED_MED                                 = ED_BASE+427;
  5347.   ED_LARGE                               = ED_BASE+428;
  5348.  
  5349.   ED_TCD_POSITION                        = ED_BASE+429;
  5350.   ED_TOP                                 = $0001;
  5351.   ED_MIDDLE                              = $0002;
  5352.   ED_BOTTOM                              = $0004;
  5353.   ED_LEFT                                = $0100;
  5354.   ED_CENTER                              = $0200;
  5355.   ED_RIGHT                               = $0400;
  5356.  
  5357.   ED_TCD_INTENSITY                       = ED_BASE+436;
  5358.   ED_HIGH                                = ED_BASE+437;
  5359.   ED_LOW                                 = ED_BASE+438;
  5360.  
  5361.   ED_TCD_TRANSPARENCY                    = ED_BASE+439;
  5362.   ED_TCD_INVERT                          = ED_BASE+440;
  5363.  
  5364. //      IAMExtTransport defines
  5365. //
  5366. // Transport status, params and values
  5367. //
  5368.  
  5369. // IAMExtTransport Status items and and values:
  5370.   ED_MODE                                = ED_BASE+500;
  5371.   ED_ERROR                               = ED_BASE+501;
  5372.   ED_LOCAL                               = ED_BASE+502;
  5373.   ED_RECORD_INHIBIT                      = ED_BASE+503;
  5374.   ED_SERVO_LOCK                          = ED_BASE+504;
  5375.   ED_MEDIA_PRESENT                       = ED_BASE+505;
  5376.   ED_MEDIA_LENGTH                        = ED_BASE+506;
  5377.   ED_MEDIA_SIZE                          = ED_BASE+507;
  5378.   ED_MEDIA_TRACK_COUNT                   = ED_BASE+508;
  5379.   ED_MEDIA_TRACK_LENGTH                  = ED_BASE+509;
  5380.   ED_MEDIA_SIDE                          = ED_BASE+510;
  5381.  
  5382.   ED_MEDIA_TYPE                          = ED_BASE+511;
  5383.   ED_MEDIA_VHS                           = ED_BASE+512;
  5384.   ED_MEDIA_SVHS                          = ED_BASE+513;
  5385.   ED_MEDIA_HI8                           = ED_BASE+514;
  5386.   ED_MEDIA_UMATIC                        = ED_BASE+515;
  5387.   ED_MEDIA_DVC                           = ED_BASE+516;
  5388.   ED_MEDIA_1_INCH                        = ED_BASE+517;
  5389.   ED_MEDIA_D1                            = ED_BASE+518;
  5390.   ED_MEDIA_D2                            = ED_BASE+519;
  5391.   ED_MEDIA_D3                            = ED_BASE+520;
  5392.   ED_MEDIA_D5                            = ED_BASE+521;
  5393.   ED_MEDIA_DBETA                         = ED_BASE+522;
  5394.   ED_MEDIA_BETA                          = ED_BASE+523;
  5395.   ED_MEDIA_8MM                           = ED_BASE+524;
  5396.   ED_MEDIA_DDR                           = ED_BASE+525;
  5397.   ED_MEDIA_SX                 = ED_BASE+813;
  5398.   ED_MEDIA_OTHER                         = ED_BASE+526;
  5399.   ED_MEDIA_CLV                           = ED_BASE+527;
  5400.   ED_MEDIA_CAV                           = ED_BASE+528;
  5401.   ED_MEDIA_POSITION                      = ED_BASE+529;
  5402.  
  5403.   ED_LINK_MODE                           = ED_BASE+530;
  5404.  
  5405. // IAMExtTransport Basic Parms
  5406.   ED_TRANSBASIC_TIME_FORMAT              = ED_BASE+540;
  5407.   ED_FORMAT_MILLISECONDS                 = ED_BASE+541;
  5408.   ED_FORMAT_FRAMES                       = ED_BASE+542;
  5409.   ED_FORMAT_REFERENCE_TIME               = ED_BASE+543;
  5410.  
  5411.   ED_FORMAT_HMSF                         = ED_BASE+547;
  5412.   ED_FORMAT_TMSF                         = ED_BASE+548;
  5413.  
  5414.   ED_TRANSBASIC_TIME_REFERENCE           = ED_BASE+549;
  5415.   ED_TIMEREF_TIMECODE                    = ED_BASE+550;
  5416.   ED_TIMEREF_CONTROL_TRACK               = ED_BASE+551;
  5417.   ED_TIMEREF_INDEX                       = ED_BASE+552;
  5418.  
  5419.   ED_TRANSBASIC_SUPERIMPOSE              = ED_BASE+553;
  5420.   ED_TRANSBASIC_END_STOP_ACTION          = ED_BASE+554;
  5421.  
  5422.   ED_TRANSBASIC_RECORD_FORMAT            = ED_BASE+555;
  5423.   ED_RECORD_FORMAT_SP                    = ED_BASE+556;
  5424.   ED_RECORD_FORMAT_LP                    = ED_BASE+557;
  5425.   ED_RECORD_FORMAT_EP                    = ED_BASE+558;
  5426.  
  5427.   ED_TRANSBASIC_STEP_COUNT               = ED_BASE+559;
  5428.   ED_TRANSBASIC_STEP_UNIT                = ED_BASE+560;
  5429.   ED_STEP_FIELD                          = ED_BASE+561;
  5430.   ED_STEP_FRAME                          = ED_BASE+562;
  5431.   ED_STEP_3_2                            = ED_BASE+563;
  5432.  
  5433.   ED_TRANSBASIC_PREROLL                  = ED_BASE+564;
  5434.   ED_TRANSBASIC_RECPREROLL               = ED_BASE+565;
  5435.   ED_TRANSBASIC_POSTROLL                 = ED_BASE+566;
  5436.   ED_TRANSBASIC_EDIT_DELAY               = ED_BASE+567;
  5437.   ED_TRANSBASIC_PLAYTC_DELAY             = ED_BASE+568;
  5438.   ED_TRANSBASIC_RECTC_DELAY              = ED_BASE+569;
  5439.   ED_TRANSBASIC_EDIT_FIELD               = ED_BASE+570;
  5440.   ED_TRANSBASIC_FRAME_SERVO              = ED_BASE+571;
  5441.   ED_TRANSBASIC_CF_SERVO                 = ED_BASE+572;
  5442.   ED_TRANSBASIC_SERVO_REF                = ED_BASE+573;
  5443.   ED_REF_EXTERNAL                        = ED_BASE+574;
  5444.   ED_REF_INPUT                           = ED_BASE+575;
  5445.   ED_REF_INTERNAL                        = ED_BASE+576;
  5446.   ED_REF_AUTO                            = ED_BASE+577;
  5447.  
  5448.   ED_TRANSBASIC_WARN_GL                  = ED_BASE+578;
  5449.   ED_TRANSBASIC_SET_TRACKING             = ED_BASE+579;
  5450.   ED_TRACKING_PLUS                       = ED_BASE+580;
  5451.   ED_TRACKING_MINUS                      = ED_BASE+581;
  5452.   ED_TRACKING_RESET                      = ED_BASE+582;
  5453.  
  5454.   ED_TRANSBASIC_SET_FREEZE_TIMEOUT       = ED_BASE+583;
  5455.   ED_TRANSBASIC_VOLUME_NAME              = ED_BASE+584;
  5456.   ED_TRANSBASIC_BALLISTIC_1              = ED_BASE+585;
  5457.   ED_TRANSBASIC_BALLISTIC_2              = ED_BASE+586;
  5458.   ED_TRANSBASIC_BALLISTIC_3              = ED_BASE+587;
  5459.   ED_TRANSBASIC_BALLISTIC_4              = ED_BASE+588;
  5460.   ED_TRANSBASIC_BALLISTIC_5              = ED_BASE+589;
  5461.   ED_TRANSBASIC_BALLISTIC_6              = ED_BASE+590;
  5462.   ED_TRANSBASIC_BALLISTIC_7              = ED_BASE+591;
  5463.   ED_TRANSBASIC_BALLISTIC_8              = ED_BASE+592;
  5464.   ED_TRANSBASIC_BALLISTIC_9              = ED_BASE+593;
  5465.   ED_TRANSBASIC_BALLISTIC_10             = ED_BASE+594;
  5466.   ED_TRANSBASIC_BALLISTIC_11             = ED_BASE+595;
  5467.   ED_TRANSBASIC_BALLISTIC_12             = ED_BASE+596;
  5468.   ED_TRANSBASIC_BALLISTIC_13             = ED_BASE+597;
  5469.   ED_TRANSBASIC_BALLISTIC_14             = ED_BASE+598;
  5470.   ED_TRANSBASIC_BALLISTIC_15             = ED_BASE+599;
  5471.   ED_TRANSBASIC_BALLISTIC_16             = ED_BASE+600;
  5472.   ED_TRANSBASIC_BALLISTIC_17             = ED_BASE+601;
  5473.   ED_TRANSBASIC_BALLISTIC_18             = ED_BASE+602;
  5474.   ED_TRANSBASIC_BALLISTIC_19             = ED_BASE+603;
  5475.   ED_TRANSBASIC_BALLISTIC_20             = ED_BASE+604;
  5476.  
  5477. // consumer VCR items
  5478.   ED_TRANSBASIC_SETCLOCK                 = ED_BASE+605;
  5479.   ED_TRANSBASIC_SET_COUNTER_FORMAT       = ED_BASE+606;
  5480.   ED_TRANSBASIC_SET_COUNTER_VALUE        = ED_BASE+607;
  5481.  
  5482.   ED_TRANSBASIC_SETTUNER_CH_UP           = ED_BASE+608;
  5483.   ED_TRANSBASIC_SETTUNER_CH_DN           = ED_BASE+609;
  5484.   ED_TRANSBASIC_SETTUNER_SK_UP           = ED_BASE+610;
  5485.   ED_TRANSBASIC_SETTUNER_SK_DN           = ED_BASE+611;
  5486.   ED_TRANSBASIC_SETTUNER_CH              = ED_BASE+612;
  5487.   ED_TRANSBASIC_SETTUNER_NUM             = ED_BASE+613;
  5488.   ED_TRANSBASIC_SETTIMER_EVENT           = ED_BASE+614;
  5489.   ED_TRANSBASIC_SETTIMER_STARTDAY        = ED_BASE+615;
  5490.   ED_TRANSBASIC_SETTIMER_STARTTIME       = ED_BASE+616;
  5491.   ED_TRANSBASIC_SETTIMER_STOPDAY         = ED_BASE+617;
  5492.   ED_TRANSBASIC_SETTIMER_STOPTIME        = ED_BASE+618;
  5493.  
  5494. // IAMExtTransport video parameters
  5495.   ED_TRANSVIDEO_SET_OUTPUT               = ED_BASE+630;
  5496.   ED_E2E                                 = ED_BASE+631;
  5497.   ED_PLAYBACK                            = ED_BASE+632;
  5498.   ED_OFF                                 = ED_BASE+633;
  5499.  
  5500.   ED_TRANSVIDEO_SET_SOURCE               = ED_BASE+634;
  5501.  
  5502. // IAMExtTransport audio parameters
  5503.   ED_TRANSAUDIO_ENABLE_OUTPUT            = ED_BASE+640;
  5504.   ED_AUDIO_ALL                           = $10000000;
  5505.   ED_AUDIO_1                             = $0000001;
  5506.   ED_AUDIO_2                             = $0000002;
  5507.   ED_AUDIO_3                             = $0000004;
  5508.   ED_AUDIO_4                             = $0000008;
  5509.   ED_AUDIO_5                             = $0000010;
  5510.   ED_AUDIO_6                             = $0000020;
  5511.   ED_AUDIO_7                             = $0000040;
  5512.   ED_AUDIO_8                             = $0000080;
  5513.   ED_AUDIO_9                             = $0000100;
  5514.   ED_AUDIO_10                            = $0000200;
  5515.   ED_AUDIO_11                            = $0000400;
  5516.   ED_AUDIO_12                            = $0000800;
  5517.   ED_AUDIO_13                            = $0001000;
  5518.   ED_AUDIO_14                            = $0002000;
  5519.   ED_AUDIO_15                            = $0004000;
  5520.   ED_AUDIO_16                            = $0008000;
  5521.   ED_AUDIO_17                            = $0010000;
  5522.   ED_AUDIO_18                            = $0020000;
  5523.   ED_AUDIO_19                            = $0040000;
  5524.   ED_AUDIO_20                            = $0080000;
  5525.   ED_AUDIO_21                            = $0100000;
  5526.   ED_AUDIO_22                            = $0200000;
  5527.   ED_AUDIO_23                            = $0400000;
  5528.   ED_AUDIO_24                            = $0800000;
  5529.   ED_VIDEO                               = $2000000;
  5530.  
  5531.   ED_TRANSAUDIO_ENABLE_RECORD            = ED_BASE+642;
  5532.   ED_TRANSAUDIO_ENABLE_SELSYNC           = ED_BASE+643;
  5533.   ED_TRANSAUDIO_SET_SOURCE               = ED_BASE+644;
  5534.   ED_TRANSAUDIO_SET_MONITOR              = ED_BASE+645;
  5535.  
  5536. // Edit Property Set-related defs
  5537.  
  5538. // The following values reflect (and control) the state of an
  5539. // edit property set
  5540.   ED_INVALID                             = ED_BASE+652;
  5541.   ED_EXECUTING                           = ED_BASE+653;
  5542.   ED_REGISTER                            = ED_BASE+654;
  5543.   ED_DELETE                              = ED_BASE+655;
  5544.  
  5545. // Edit property set parameters and values
  5546.   ED_EDIT_HEVENT                         = ED_BASE+656;
  5547.   ED_EDIT_TEST                           = ED_BASE+657;
  5548.   ED_EDIT_IMMEDIATE                      = ED_BASE+658;
  5549.  
  5550.   ED_EDIT_MODE                           = ED_BASE+659;
  5551. // can be one of the following values:
  5552.   ED_EDIT_MODE_ASSEMBLE                  = ED_BASE+660;
  5553.   ED_EDIT_MODE_INSERT                    = ED_BASE+661;
  5554.   ED_EDIT_MODE_CRASH_RECORD              = ED_BASE+662;
  5555.   ED_EDIT_MODE_BOOKMARK_TIME             = ED_BASE+663;
  5556.   ED_EDIT_MODE_BOOKMARK_CHAPTER          = ED_BASE+664;
  5557.  
  5558.   ED_EDIT_MASTER                         = ED_BASE+666;
  5559.  
  5560.   ED_EDIT_TRACK                          = ED_BASE+667;
  5561. // can be one of the following possible OR'd values:
  5562. //      ED_VIDEO, ED_AUDIO_1 thru ED_AUDIO_24 (or ED_AUDIO_ALL)
  5563.  
  5564.   ED_EDIT_SRC_INPOINT                    = ED_BASE+668;
  5565.   ED_EDIT_SRC_OUTPOINT                   = ED_BASE+669;
  5566.   ED_EDIT_REC_INPOINT                    = ED_BASE+670;
  5567.   ED_EDIT_REC_OUTPOINT                   = ED_BASE+671;
  5568.  
  5569.   ED_EDIT_REHEARSE_MODE                  = ED_BASE+672;
  5570. // can be one of the following possible values:
  5571.   ED_EDIT_BVB                            = ED_BASE+673;
  5572.   ED_EDIT_VBV                            = ED_BASE+674;
  5573.   ED_EDIT_VVV                            = ED_BASE+675;
  5574.   ED_EDIT_PERFORM                        = ED_BASE+676;
  5575.  
  5576.  
  5577. // Set this property to OATRUE to kill the edit if in progress
  5578.   ED_EDIT_ABORT                          = ED_BASE+677;
  5579. // how long to wait for edit to complete
  5580.   ED_EDIT_TIMEOUT                        = ED_BASE+678;
  5581.  
  5582. // This property causes the device to seek to a point specified by
  5583. // ED_EDIT_SEEK_MODE (see below).  NOTE: Only one event at a time can seek.
  5584.   ED_EDIT_SEEK                           = ED_BASE+679;
  5585.   ED_EDIT_SEEK_MODE                      = ED_BASE+680;
  5586.  
  5587. //possible values:
  5588.   ED_EDIT_SEEK_EDIT_IN                   = ED_BASE+681;
  5589.   ED_EDIT_SEEK_EDIT_OUT                  = ED_BASE+682;
  5590.   ED_EDIT_SEEK_PREROLL                   = ED_BASE+683;
  5591.   ED_EDIT_SEEK_PREROLL_CT                = ED_BASE+684;
  5592.   ED_EDIT_SEEK_BOOKMARK                  = ED_BASE+685;
  5593.   ED_EDIT_OFFSET                     = ED_BASE+686;
  5594.   ED_EDIT_PREREAD                     = ED_BASE+815;
  5595. //
  5596. // Some error codes:
  5597. //
  5598. // device could be in local mode
  5599.   ED_ERR_DEVICE_NOT_READY                = ED_BASE+700;
  5600.  
  5601. // **************************************************
  5602. //
  5603. // New constants added for implementation of DVCR
  5604. //
  5605. // **************************************************
  5606.  
  5607.  
  5608. //
  5609. // New Device type (a DV has two subunits: camera and VCR)
  5610. //
  5611.   ED_DEVTYPE_CAMERA        =  ED_BASE+900;
  5612.  
  5613.   ED_DEVTYPE_TUNER         =  ED_BASE+901;
  5614.  
  5615.   ED_DEVTYPE_DVHS          =  ED_BASE+902;
  5616.  
  5617.   ED_DEVTYPE_UNKNOWN       =  ED_BASE+903;
  5618.  
  5619. //
  5620. // Unknownn capability
  5621. //     Instead of return E_NOTIMPL, or S_OK with OAFALSE, it may return S_OK with _UNKNOWN
  5622. //
  5623.   ED_CAPABILITY_UNKNOWN    =  ED_BASE+910;
  5624.  
  5625.  
  5626. //
  5627. // Send RAW extenal device command via Get/SetTransportBasicParameters()
  5628. //
  5629.   ED_RAW_EXT_DEV_CMD       =  ED_BASE+920;
  5630.  
  5631.  
  5632. //
  5633. // MEDIUM INFO
  5634. //
  5635.   ED_MEDIA_VHSC            =  ED_BASE+925;  // New media type
  5636.   ED_MEDIA_UNKNOWN         =  ED_BASE+926;  // Unknown media
  5637.   ED_MEDIA_NOT_PRESENT     =  ED_BASE+927;
  5638.  
  5639.  
  5640. //
  5641. // Device Control command that can result in pending state.
  5642. //
  5643.   ED_CONTROL_HEVENT_GET         =  ED_BASE+928;  // To get a sychronous event handle
  5644.   ED_CONTROL_HEVENT_RELEASE     =  ED_BASE+929;  // To release sychronous event handle must match what it got
  5645.  
  5646.   ED_DEV_REMOVED_HEVENT_GET     =  ED_BASE+960;  // To be a notify event and will be signal if device is removed.
  5647.   ED_DEV_REMOVED_HEVENT_RELEASE =  ED_BASE+961;  // Release this event handle
  5648.  
  5649.  
  5650. //
  5651. // TRANSPORT STATE
  5652. //
  5653.   ED_NOTIFY_HEVENT_GET     =  ED_BASE+930;  // To get a sychronous event handle
  5654.   ED_NOTIFY_HEVENT_RELEASE =  ED_BASE+931;  // To release sychronous event handle must match what it got
  5655.   ED_MODE_CHANGE_NOTIFY    =  ED_BASE+932;  // This is asynchronous operation, wait for event.
  5656.  
  5657.   ED_MODE_PLAY_FASTEST_FWD =  ED_BASE+933;
  5658.   ED_MODE_PLAY_SLOWEST_FWD =  ED_BASE+934;
  5659.   ED_MODE_PLAY_FASTEST_REV =  ED_BASE+935;
  5660.   ED_MODE_PLAY_SLOWEST_REV =  ED_BASE+936;
  5661.  
  5662.   ED_MODE_WIND             =  ED_BASE+937;
  5663.   ED_MODE_REW_FASTEST      =  ED_BASE+938;  // High speed rewind
  5664.  
  5665.   ED_MODE_REV_PLAY         =  ED_BASE+939;  // x1 speed reverse play
  5666.  
  5667.  
  5668.  
  5669. //
  5670. // TRANSPOSRTBASIC: input and output signal
  5671. //
  5672.   ED_TRANSBASIC_INPUT_SIGNAL      = ED_BASE+940;
  5673.   ED_TRANSBASIC_OUTPUT_SIGNAL     = ED_BASE+941;
  5674.  
  5675.   ED_TRANSBASIC_SIGNAL_525_60_SD  = ED_BASE+942;
  5676.   ED_TRANSBASIC_SIGNAL_525_60_SDL = ED_BASE+943;
  5677.   ED_TRANSBASIC_SIGNAL_625_50_SD  = ED_BASE+944;
  5678.   ED_TRANSBASIC_SIGNAL_625_50_SDL = ED_BASE+945;
  5679.  
  5680.   ED_TRANSBASIC_SIGNAL_MPEG2TS    = ED_BASE+946;
  5681.  
  5682. //
  5683. // TIMECODE/AbsoluteTrackNumber/RealTimeCounter read/seek/write
  5684. //
  5685.   ED_DEVCAP_TIMECODE_SEEK  =    ED_BASE+950;
  5686.  
  5687.   ED_DEVCAP_ATN_READ       =    ED_BASE+951;
  5688.   ED_DEVCAP_ATN_SEEK       =    ED_BASE+952;
  5689.   ED_DEVCAP_ATN_WRITE       =    ED_BASE+953;
  5690.  
  5691.   ED_DEVCAP_RTC_READ       =    ED_BASE+954;
  5692.   ED_DEVCAP_RTC_SEEK       =    ED_BASE+955;
  5693.   ED_DEVCAP_RTC_WRITE       =    ED_BASE+956;
  5694.  
  5695. //
  5696. // Basic parameter
  5697. //
  5698.   ED_TIMEREF_ATN     =        ED_BASE+958;
  5699.  
  5700. (*==========================================================================;
  5701.  *
  5702.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  5703.  *
  5704.  *  File:       aviriff.h
  5705.  *
  5706.  ***************************************************************************)
  5707.  
  5708. type
  5709. (*+
  5710.  *
  5711.  * Structures and defines for the RIFF AVI file format extended to
  5712.  * handle very large/long files
  5713.  *
  5714.  *-=====================================================================*)
  5715.  
  5716.                  {
  5717. #if !defined NUMELMS
  5718.   #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
  5719. #endif
  5720.                   }
  5721. // all structures in this file are packed on word boundaries
  5722. //
  5723. (*
  5724.  * heres the general layout of an AVI riff file (new format)
  5725.  *
  5726.  * RIFF (3F??????) AVI       <- not more than 1 GB in size
  5727.  *     LIST (size) hdrl
  5728.  *         avih (0038)
  5729.  *         LIST (size) strl
  5730.  *             strh (0038)
  5731.  *             strf (????)
  5732.  *             indx (3ff8)   <- size may vary, should be sector sized
  5733.  *         LIST (size) strl
  5734.  *             strh (0038)
  5735.  *             strf (????)
  5736.  *             indx (3ff8)   <- size may vary, should be sector sized
  5737.  *         LIST (size) odml
  5738.  *             dmlh (????)
  5739.  *         JUNK (size)       <- fill to align to sector - 12
  5740.  *     LIST (7f??????) movi  <- aligned on sector - 12
  5741.  *         00dc (size)       <- sector aligned
  5742.  *         01wb (size)       <- sector aligned
  5743.  *         ix00 (size)       <- sector aligned
  5744.  *     idx1 (00??????)       <- sector aligned
  5745.  * RIFF (7F??????) AVIX
  5746.  *     JUNK (size)           <- fill to align to sector -12
  5747.  *     LIST (size) movi
  5748.  *         00dc (size)       <- sector aligned
  5749.  * RIFF (7F??????) AVIX      <- not more than 2GB in size
  5750.  *     JUNK (size)           <- fill to align to sector - 12
  5751.  *     LIST (size) movi
  5752.  *         00dc (size)       <- sector aligned
  5753.  *
  5754.  *-===================================================================*)
  5755.  
  5756. //
  5757. // structures for manipulating RIFF headers
  5758. //
  5759. {
  5760. #define FCC(ch4) ((((DWORD)(ch4) & 0xFF) << 24) |     \
  5761.                   (((DWORD)(ch4) & 0xFF00) << 8) |    \
  5762.                   (((DWORD)(ch4) & 0xFF0000) >> 8) |  \
  5763.                   (((DWORD)(ch4) & 0xFF000000) >> 24))
  5764. }
  5765.   TRIFFChunk = packed record
  5766.     fcc: FOURCC;
  5767.     cb: DWORD;
  5768.   end;
  5769.  
  5770.   TRIFFList = packed record
  5771.     fcc: FOURCC;
  5772.     cb: DWORD;
  5773.     fccListType: FOURCC;
  5774.   end;
  5775.  
  5776. {
  5777. #define RIFFROUND(cb) ((cb) + ((cb)&1))
  5778. #define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk) \
  5779.                           + sizeof(RIFFCHUNK) \
  5780.                           + RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
  5781.  
  5782. }
  5783. //
  5784. // ==================== avi header structures ===========================
  5785. //
  5786.  
  5787. // main header for the avi file (compatibility header)
  5788. const
  5789. ckidMAINAVIHEADER = $68697661;// 'avih'
  5790.  
  5791. type
  5792.   TAVIMainHeader = packed record
  5793.     fcc: FOURCC;                   // 'avih'
  5794.     cb: DWORD;                     // size of this structure -8
  5795.     dwMicroSecPerFrame: DWORD;     // frame display rate (or 0L)
  5796.     dwMaxBytesPerSec: DWORD;       // max. transfer rate
  5797.     dwPaddingGranularity: DWORD;   // pad to multiples of this size; normally 2K.
  5798.     dwFlags: DWORD;                // the ever-present flags
  5799.     dwTotalFrames: DWORD;          // # frames in first movi list
  5800.     dwInitialFrames: DWORD;
  5801.     dwStreams: DWORD;
  5802.     dwSuggestedBufferSize: DWORD;
  5803.     dwWidth: DWORD;
  5804.     dwHeight: DWORD;
  5805.     dwReserved: array[0..3] of DWORD;
  5806.   end;
  5807.  
  5808. const
  5809.   AVIF_HASINDEX       = $00000010; // Index at end of file?
  5810.   AVIF_MUSTUSEINDEX   = $00000020;
  5811.   AVIF_ISINTERLEAVED  = $00000100;
  5812.   AVIF_TRUSTCKTYPE    = $00000800; // Use CKType to find key frames
  5813.   AVIF_WASCAPTUREFILE = $00010000;
  5814.   AVIF_COPYRIGHTED    = $00020000;
  5815.  
  5816.   ckidODML            = $6C6D646F; //'odml'
  5817.   ckidAVIEXTHEADER    = $686C6D64; //'dmlh'
  5818.  
  5819. type
  5820.   TAVIExtHeader = packed record
  5821.     fcc: FOURCC;                       // 'dmlh'
  5822.     cb: DWORD;                         // size of this structure -8
  5823.     dwGrandFrames: DWORD;              // total number of frames in the file
  5824.     dwFuture: array[0..60] of DWORD;   // to be defined later
  5825.   end;
  5826.  
  5827. //
  5828. // structure of an AVI stream header riff chunk
  5829. //
  5830. const
  5831.   ckidSTREAMLIST    = $6C727473; //'strl'
  5832.   ckidSTREAMHEADER  = $68727473; //'strh'
  5833.  
  5834. type
  5835.   TAVIStreamHeader = packed record
  5836.      fcc: FOURCC;            // 'strh'
  5837.      cb: DWORD;              // size of this structure - 8
  5838.  
  5839.      fccType: FOURCC;        // stream type codes
  5840.  
  5841.      fccHandler: FOURCC;
  5842.      dwFlags: DWORD;
  5843.  
  5844.      wPriority: WORD;
  5845.      wLanguage: WORD;
  5846.      dwInitialFrames: DWORD;
  5847.      dwScale: DWORD;
  5848.      dwRate: DWORD;          // dwRate/dwScale is stream tick rate in ticks/sec
  5849.      dwStart: DWORD;
  5850.      dwLength: DWORD;
  5851.      dwSuggestedBufferSize: DWORD;
  5852.      dwQuality: DWORD;
  5853.      dwSampleSize: DWORD;
  5854.  
  5855.      rcFrame: packed record
  5856.        left: SmallInt;
  5857.        top: SmallInt;
  5858.        right: SmallInt;
  5859.        bottom: SmallInt;
  5860.      end;
  5861.   end;
  5862.  
  5863. const
  5864.  
  5865.   streamtypeVIDEO = $73646976; //'vids'
  5866.   streamtypeAUDIO = $73647561; //'auds'
  5867.   streamtypeMIDI  = $7364696D; //'mids'
  5868.   streamtypeTEXT  = $73747874; //'txts'
  5869.  
  5870.   AVISF_DISABLED         = $00000001;
  5871.   AVISF_VIDEO_PALCHANGES = $00010000;
  5872.  
  5873. //
  5874. // structure of an AVI stream format chunk
  5875. //
  5876.  
  5877.   ckidSTREAMFORMAT = $66727473; //'strf'
  5878.  
  5879. //
  5880. // avi stream formats are different for each stream type
  5881. //
  5882. // BITMAPINFOHEADER for video streams
  5883. // WAVEFORMATEX or PCMWAVEFORMAT for audio streams
  5884. // nothing for text streams
  5885. // nothing for midi streams
  5886.  
  5887.  
  5888. //
  5889. // structure of old style AVI index
  5890. //
  5891.   ckidAVIOLDINDEX = $31786469;//'idx1'
  5892.  
  5893. type
  5894.   TAVIOldIndex = packed record
  5895.     fcc: FOURCC;      // 'idx1'
  5896.     cb: DWORD;        // size of this structure -8
  5897.  
  5898.     aIndex: array[0..0] of packed record
  5899.       dwChunkId: DWORD;
  5900.       dwFlags: DWORD;
  5901.       dwOffset: DWORD;      // offset of riff chunk header for the data
  5902.       dwSize: DWORD;        // size of the data (excluding riff header size)
  5903.     end;                    // size of this array
  5904.   end;
  5905.  
  5906. const
  5907.   AVIIF_LIST       = $00000001;
  5908.   AVIIF_KEYFRAME   = $00000010;
  5909.  
  5910.   AVIIF_NO_TIME    = $00000100;
  5911.   AVIIF_COMPRESSOR = $0FFF0000;  // unused?
  5912.  
  5913.  
  5914. // old timecode structure
  5915. //typedef union _timecode {
  5916. //   struct {
  5917. //      WORD   wFrameRate;
  5918. //      WORD   wFrameFract;
  5919. //      LONG   cFrames;
  5920. //      };
  5921. //   DWORDLONG  qw;
  5922. //   } TIMECODE;
  5923. //
  5924. // struct for all the SMPTE timecode info
  5925. //
  5926.   TIMECODE_RATE_30DROP = 0;   // this MUST be zero
  5927.  
  5928. type
  5929.   TTimeCodeData = packed record
  5930.     time: TTimeCode;
  5931.     dwSMPTEflags: DWORD;
  5932.     dwUser: DWORD;
  5933.   end;
  5934.  
  5935. // dwSMPTEflags masks/values
  5936. //
  5937. const
  5938.   TIMECODE_SMPTE_BINARY_GROUP = $07;
  5939.   TIMECODE_SMPTE_COLOR_FRAME  = $08;
  5940.  
  5941. //
  5942. // ============ structures for new style AVI indexes =================
  5943. //
  5944.  
  5945. // index type codes
  5946. //
  5947.   AVI_INDEX_OF_INDEXES      = $00;
  5948.   AVI_INDEX_OF_CHUNKS       = $01;
  5949.   AVI_INDEX_OF_TIMED_CHUNKS = $02;
  5950.   AVI_INDEX_OF_SUB_2FIELD   = $03;
  5951.   AVI_INDEX_IS_DATA         = $80;
  5952.  
  5953. // index subtype codes
  5954. //
  5955.   AVI_INDEX_SUB_DEFAULT     = $00;
  5956.  
  5957. // INDEX_OF_CHUNKS subtype codes
  5958. //
  5959.   AVI_INDEX_SUB_2FIELD      = $01;
  5960.  
  5961. // meta structure of all avi indexes
  5962. //
  5963. type
  5964.   TAVIMetaIndex = packed record
  5965.     fcc: FOURCC;
  5966.     cb: UINT;
  5967.     wLongsPerEntry: WORD;
  5968.     bIndexSubType: BYTE;
  5969.     bIndexType: BYTE;
  5970.     nEntriesInUse: DWORD;
  5971.     dwChunkId: DWORD;
  5972.     dwReserved: array[0..2] of DWORD;
  5973.     adwIndex: array[0..0] of DWORD;
  5974.   end;
  5975.  
  5976. const
  5977.   STDINDEXSIZE = $4000;
  5978. {
  5979. #define NUMINDEX(wLongsPerEntry) ((STDINDEXSIZE-32)/4/(wLongsPerEntry))
  5980. #define NUMINDEXFILL(wLongsPerEntry) ((STDINDEXSIZE/4) - NUMINDEX(wLongsPerEntry))
  5981. }
  5982. // structure of a super index (INDEX_OF_INDEXES)
  5983. //
  5984.   ckidAVISUPERINDEX = $78646E69;//'indx'
  5985.  
  5986. type
  5987.  TAVISuperIndex = packed record
  5988.    fcc: FOURCC;                      // 'indx'
  5989.    cb: UINT;                         // size of this structure
  5990.    wLongsPerEntry: WORD;             // ==4
  5991.    bIndexSubType: BYTE;              // ==0 (frame index) or AVI_INDEX_SUB_2FIELD
  5992.    bIndexType: BYTE;                 // ==AVI_INDEX_OF_INDEXES
  5993.    nEntriesInUse: DWORD;             // offset of next unused entry in aIndex
  5994.    dwChunkId: DWORD;                 // chunk ID of chunks being indexed, (i.e. RGB8)
  5995.    dwReserved: array[0..2] of DWORD; // must be 0
  5996.  
  5997.    aIndex: array[0..3] of record
  5998.      qwOffset: Int64;             // 64 bit offset to sub index chunk
  5999.      dwSize: DWORD;              // 32 bit size of sub index chunk
  6000.      dwDuration: DWORD;          // time span of subindex chunk (in stream ticks)
  6001.    end;
  6002.  end;
  6003.  
  6004. //#define Valid_SUPERINDEX(pi) (*(DWORD *)(&((pi)->wLongsPerEntry)) == (4 | (AVI_INDEX_OF_INDEXES << 24)))
  6005.  
  6006. // struct of a standard index (AVI_INDEX_OF_CHUNKS)
  6007. //
  6008.  
  6009.  TAVIStdIndex_Entry = packed record
  6010.    dwOffset: DWORD;      // 32 bit offset to data (points to data, not riff header)
  6011.    dwSize: DWORD;        // 31 bit size of data (does not include size of riff header), bit 31 is deltaframe bit
  6012.  end;
  6013.  
  6014. const
  6015.   AVISTDINDEX_DELTAFRAME = $80000000; // Delta frames have the high bit set;
  6016.   AVISTDINDEX_SIZEMASK = not $80000000;
  6017.  
  6018. type
  6019.   TAVIStdIndex = packed record
  6020.     fcc: FOURCC;           // 'indx' or '##ix'
  6021.     cb: UINT;              // size of this structure
  6022.     wLongsPerEntry: WORD;  // ==2
  6023.     bIndexSubType: BYTE;   // ==0
  6024.     bIndexType: BYTE;      // ==AVI_INDEX_OF_CHUNKS
  6025.     nEntriesInUse: DWORD;  // offset of next unused entry in aIndex
  6026.     dwChunkId: DWORD;      // chunk ID of chunks being indexed, (i.e. RGB8)
  6027.     qwBaseOffset: Int64;    // base offset that all index intries are relative to
  6028.     dwReserved_3: DWORD;
  6029.     aIndex: array[0..2043] of TAVIStdIndex_Entry;
  6030.   end;
  6031.  
  6032. // struct of a time variant standard index (AVI_INDEX_OF_TIMED_CHUNKS)
  6033. //
  6034.   TAVITimedIndex_Entry = packed record
  6035.     dwOffset: DWORD;     // 32 bit offset to data (points to data, not riff header)
  6036.     dwSize: DWORD;       // 31 bit size of data (does not include size of riff header) (high bit is deltaframe bit)
  6037.     dwDuration: DWORD;   // how much time the chunk should be played (in stream ticks)
  6038.   end;
  6039.  
  6040.   TAVITimedIndex = packed record
  6041.     fcc: FOURCC;           // 'indx' or '##ix'
  6042.     cb: UINT;              // size of this structure
  6043.     wLongsPerEntry: WORD;  // ==3
  6044.     bIndexSubType: BYTE;   // ==0
  6045.     bIndexType: BYTE;      // ==AVI_INDEX_OF_TIMED_CHUNKS
  6046.     nEntriesInUse: DWORD;  // offset of next unused entry in aIndex
  6047.     dwChunkId: DWORD;      // chunk ID of chunks being indexed, (i.e. RGB8)
  6048.     qwBaseOffset: Int64;    // base offset that all index intries are relative to
  6049.     dwReserved_3: DWORD;   // must be 0
  6050.     aIndex: array[0..1361] of TAVITimedIndex_Entry;
  6051.     adwTrailingFill: array[0..2733] of DWORD; // to align struct to correct size
  6052.   end;
  6053.  
  6054. // structure of a timecode stream
  6055. //
  6056.   TAVITimeCodeIndex = packed record
  6057.     fcc: FOURCC;                      // 'indx' or '##ix'
  6058.     cb: UINT;                         // size of this structure
  6059.     wLongsPerEntry: WORD;             // ==4
  6060.     bIndexSubType: BYTE;              // ==0
  6061.     bIndexType: BYTE;                 // ==AVI_INDEX_IS_DATA
  6062.     nEntriesInUse: DWORD;             // offset of next unused entry in aIndex
  6063.     dwChunkId: DWORD;                 // 'time'
  6064.     dwReserved: array[0..2] of DWORD; // must be 0
  6065.     aIndex: array[0..0] of TTimeCodeData;
  6066.   end;
  6067.  
  6068. // structure of a timecode discontinuity list (when wLongsPerEntry == 7)
  6069. //
  6070.   TAVITcdlIndex_Entry = packed record
  6071.     dwTick: DWORD;             // stream tick time that maps to this timecode value
  6072.     time: TTimeCode;
  6073.     dwSMPTEflags: DWORD;
  6074.     dwUser: DWORD;
  6075.     szReelId: array[0..11] of Char;
  6076.   end;
  6077.  
  6078.   TAVITcdlIndex = packed record
  6079.     fcc: FOURCC;                      // 'indx' or '##ix'
  6080.     cb: UINT;                         // size of this structure
  6081.     wLongsPerEntry: WORD;             // ==7 (must be 4 or more all 'tcdl' indexes
  6082.     bIndexSubType: BYTE;              // ==0
  6083.     bIndexType: BYTE;                 // ==AVI_INDEX_IS_DATA
  6084.     nEntriesInUse: DWORD;             // offset of next unused entry in aIndex
  6085.     dwChunkId: DWORD;                 // 'tcdl'
  6086.     dwReserved: array[0..2] of DWORD; // must be 0
  6087.     aIndex: array[0..583] of TAVITcdlIndex_Entry;
  6088.     adwTrailingFill: array[0..3511] of DWORD;  // to align struct to correct size
  6089.   end;
  6090.  
  6091.   TAVIFieldIndex_Chunk = packed record
  6092.     fcc: FOURCC;            // 'ix##'
  6093.     cb: DWORD;              // size of this structure
  6094.     wLongsPerEntry: WORD;   // must be 3 (size of each entry in
  6095.                             // aIndex array)
  6096.     bIndexSubType: BYTE;    // AVI_INDEX_2FIELD
  6097.     bIndexType: BYTE;       // AVI_INDEX_OF_CHUNKS
  6098.     nEntriesInUse: DWORD;   //
  6099.     dwChunkId: DWORD;       // '##dc' or '##db'
  6100.     qwBaseOffset: Int64;     // offsets in aIndex array are relative to this
  6101.     dwReserved3: DWORD;     // must be 0
  6102.  
  6103.     aIndex: array[0..0] of packed record
  6104.       dwOffset: DWORD;
  6105.       dwSize: DWORD;          // size of all fields
  6106.       dwOffsetField2: DWORD;  // (bit 31 set for NON-keyframes)
  6107.     end;                      // offset to second field
  6108.   end;
  6109.  
  6110. (*==========================================================================;
  6111.  *
  6112.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  6113.  *
  6114.  *  File:       evcode.h
  6115.  *
  6116.  ***************************************************************************)
  6117.  
  6118. const
  6119. //
  6120. // list of standard Quartz event codes and the expected params
  6121. //
  6122.  
  6123. // Event codes are broken into two groups
  6124. //   -- system event codes
  6125. //   -- extension event codes
  6126. // All system event codes are below EC_USER
  6127.  
  6128.   EC_SYSTEMBASE                        = $00;
  6129.   EC_USER                              = $8000;
  6130.  
  6131.  
  6132. // System-defined event codes
  6133. // ==========================
  6134. //
  6135. // There are three types of system-defined event codes:
  6136. //
  6137. // 1.  Those which are always passed through to the application
  6138. //     (To be collected by calls to GetEvent or within WaitForCompletion.)
  6139. //     (e.g. EC_ERRORABORT, EC_USERABORT.)
  6140. //
  6141. // 2.  Those which are pure internal and will never be passed to
  6142. //     the application.  (e.g. EC_SHUTDOWN)
  6143. //
  6144. // 3.  Those which have default handling.  Default handing implies that
  6145. //     the event is not passed to the application.  However, default
  6146. //     handling may be canceled by calling
  6147. //     IMediaEvent::CancelDefaultHandling.  If the default handling is
  6148. //     cancelled in this way, then the message will be delivered to the
  6149. //     application and the application must action it appropriately.
  6150. //     Default handling can be restored by calling RestoreDefaultHandling.
  6151. //
  6152. // We will refer to these events as application, internal and defaulted
  6153. // events respectively.
  6154. //
  6155. // System-defined events may have interface pointers, BSTR's, etc passed
  6156. // as parameters.  It is therefore essential that, for any message
  6157. // retrieved using GetEvent, a matching call to FreeEventParams is made
  6158. // to ensure that relevant interfaces are released and storage freed.
  6159. // Failure to call FreeEventParams will result in memory leaks, if not
  6160. // worse.
  6161. //
  6162. // Filters sending these messages to the filter graph should not AddRef()
  6163. // any interfaces that they may pass as parameters.  The filter graph
  6164. // manager will AddRef them if required.  E.g. if the event is to be queued
  6165. // for the application or queued to a worker thread.
  6166.  
  6167. // Each event listed below is immediately followed by a parameter list
  6168. // detailing the types of the parameters associated with the message,
  6169. // and an indication of whether the message is an application, internal
  6170. // or defaulted message.  This is then followed by a short description.
  6171. // The use of "void" in the parameter list implies that the parameter is not
  6172. // used.  Such parameters should be zero.
  6173.  
  6174. // Other defined EC_ regions:
  6175. // DVD event codes           0x0100 - 0x0150 (dvdevcod.h)
  6176. // audio device event codes  0x0200 - 0x0250 (audevcod.h)
  6177. // WindowsMedia SDK-originated events 0x0251 - 0x0300 (see below)
  6178.  
  6179.   EC_COMPLETE                          = $01;
  6180. // ( HRESULT, void ) : defaulted (special)
  6181. // Signals the completed playback of a stream within the graph.  This message
  6182. // is sent by renderers when they receive end-of-stream.  The default handling
  6183. // of this message results in a _SINGLE_ EC_COMPLETE being sent to the
  6184. // application when ALL of the individual renderers have signaled EC_COMPLETE
  6185. // to the filter graph.  If the default handing is canceled, the application
  6186. // will see all of the individual EC_COMPLETEs.
  6187.  
  6188.  
  6189.   EC_USERABORT                         = $02;
  6190. // ( void, void ) : application
  6191. // In some sense, the user has requested that playback be terminated.
  6192. // This message is typically sent by renderers that render into a
  6193. // window if the user closes the window into which it was rendering.
  6194. // It is up to the application to decide if playback should actually
  6195. // be stopped.
  6196.  
  6197.  
  6198.   EC_ERRORABORT                        = $03;
  6199. // ( HRESULT, void ) : application
  6200. // Operation aborted because of error
  6201.  
  6202.  
  6203.   EC_TIME                              = $04;
  6204. // ( DWORD, DWORD ) : application
  6205. // The requested reference time occurred.  (This event is currently not used).
  6206. // lParam1 is low dword of ref time, lParam2 is high dword of TRefTime.
  6207.  
  6208.  
  6209.   EC_REPAINT                           = $05;
  6210. // ( IPin * (could be NULL), void ) : defaulted
  6211. // A repaint is required - lParam1 contains the (IPin *) that needs the data
  6212. // to be sent again. Default handling is: if the output pin which the IPin is
  6213. // attached  to supports the IMediaEventSink interface then it will be called
  6214. // with the EC_REPAINT first.  If that fails then normal repaint processing is
  6215. // done by the filter graph.
  6216.  
  6217.  
  6218. // Stream error notifications
  6219.   EC_STREAM_ERROR_STOPPED              = $06;
  6220.   EC_STREAM_ERROR_STILLPLAYING         = $07;
  6221. // ( HRESULT, DWORD ) : application
  6222. // lParam 1 is major code, lParam2 is minor code, either may be zero.
  6223.  
  6224.  
  6225.   EC_ERROR_STILLPLAYING                = $08;
  6226. // ( HRESULT, void ) : application
  6227. // The filter graph manager may issue Run's to the graph asynchronously.
  6228. // If such a Run fails, EC_ERROR_STILLPLAYING is issued to notify the
  6229. // application of the failure.  The state of the underlying filters
  6230. // at such a time will be indeterminate - they will all have been asked
  6231. // to run, but some are almost certainly not.
  6232.  
  6233.  
  6234.   EC_PALETTE_CHANGED                   = $09;
  6235. // ( void, void ) : application
  6236. // notify application that the video palette has changed
  6237.  
  6238.  
  6239.   EC_VIDEO_SIZE_CHANGED                = $0A;
  6240. // ( DWORD, void ) : application
  6241. // Sent by video renderers.
  6242. // Notifies the application that the native video size has changed.
  6243. // LOWORD of the DWORD is the new width, HIWORD is the new height.
  6244.  
  6245.  
  6246.   EC_QUALITY_CHANGE                    = $0B;
  6247. // ( void, void ) : application
  6248. // Notify application that playback degradation has occurred
  6249.  
  6250.  
  6251.   EC_SHUTTING_DOWN                     = $0C;
  6252. // ( void, void ) : internal
  6253. // This message is sent by the filter graph manager to any plug-in
  6254. // distributors which support IMediaEventSink to notify them that
  6255. // the filter graph is starting to shutdown.
  6256.  
  6257.  
  6258.   EC_CLOCK_CHANGED                     = $0D;
  6259. // ( void, void ) : application
  6260. // Notify application that the clock has changed.
  6261. // (i.e. SetSyncSource has been called on the filter graph and has been
  6262. // distributed successfully to the filters in the graph.)
  6263.  
  6264.   EC_PAUSED                            = $0E;
  6265. // ( HRESULT, void ) : application
  6266. // Notify application the previous pause request has completed
  6267.  
  6268.   EC_OPENING_FILE                            = $10;
  6269.   EC_BUFFERING_DATA                    = $11;
  6270. // ( BOOL, void ) : application
  6271. // lParam1 == 1   --> starting to open file or buffer data
  6272. // lParam1 == 0   --> not opening or buffering any more
  6273. // (This event does not appear to be used by ActiveMovie.)
  6274.  
  6275.  
  6276.   EC_FULLSCREEN_LOST                   = $12;
  6277. // ( void, IBaseFilter * ) : application
  6278. // Sent by full screen renderers when switched away from full screen.
  6279. // IBaseFilter may be NULL.
  6280.  
  6281.  
  6282.   EC_ACTIVATE                          = $13;
  6283. // ( BOOL, IBaseFilter * ) : internal
  6284. // Sent by video renderers when they lose or gain activation.
  6285. // lParam1 is set to 1 if gained or 0 if lost
  6286. // lParam2 is the IBaseFilter* for the filter that is sending the message
  6287. // Used for sound follows focus and full-screen switching
  6288.  
  6289.  
  6290.   EC_NEED_RESTART                      = $14;
  6291. // ( void, void ) : defaulted
  6292. // Sent by renderers when they regain a resource (e.g. audio renderer).
  6293. // Causes a restart by Pause/put_Current/Run (if running).
  6294.  
  6295.  
  6296.   EC_WINDOW_DESTROYED                  = $15;
  6297. // ( IBaseFilter *, void ) : internal
  6298. // Sent by video renderers when the window has been destroyed. Handled
  6299. // by the filter graph / distributor telling the resource manager.
  6300. // lParam1 is the IBaseFilter* of the filter whose window is being destroyed
  6301.  
  6302.  
  6303.   EC_DISPLAY_CHANGED                   = $16;
  6304. // ( IPin *, void ) : internal
  6305. // Sent by renderers when they detect a display change. the filter graph
  6306. // will arrange for the graph to be stopped and the pin send in lParam1
  6307. // to be reconnected. by being reconnected it allows a renderer to reset
  6308. // and connect with a more appropriate format for the new display mode
  6309. // lParam1 contains an (IPin *) that should be reconnected by the graph
  6310.  
  6311.  
  6312.   EC_STARVATION                        = $17;
  6313. // ( void, void ) : defaulted
  6314. // Sent by a filter when it detects starvation. Default handling (only when
  6315. // running) is for the graph to be paused until all filters enter the
  6316. // paused state and then run. Normally this would be sent by a parser or source
  6317. // filter when too little data is arriving.
  6318.  
  6319.  
  6320.   EC_OLE_EVENT                       = $18;
  6321. // ( BSTR, BSTR ) : application
  6322. // Sent by a filter to pass a text string to the application.
  6323. // Conventionally, the first string is a type, and the second a parameter.
  6324.  
  6325.  
  6326.   EC_NOTIFY_WINDOW                     = $19;
  6327. // ( HWND, void ) : internal
  6328. // Pass the window handle around during pin connection.
  6329.  
  6330.   EC_STREAM_CONTROL_STOPPED          = $1A;
  6331. // ( IPin * pSender, DWORD dwCookie )
  6332. // Notification that an earlier call to IAMStreamControl::StopAt
  6333. // has now take effect.  Calls to the method can be marked
  6334. // with a cookie which is passed back in the second parameter,
  6335. // allowing applications to easily tie together request
  6336. // and completion notifications.
  6337. //
  6338. // NB: IPin will point to the pin that actioned the Stop.  This
  6339. // may not be the pin that the StopAt was sent to.
  6340.  
  6341.   EC_STREAM_CONTROL_STARTED          = $1B;
  6342. // ( IPin * pSender, DWORD dwCookie )
  6343. // Notification that an earlier call to IAMStreamControl::StartAt
  6344. // has now take effect.  Calls to the method can be marked
  6345. // with a cookie which is passed back in the second parameter,
  6346. // allowing applications to easily tie together request
  6347. // and completion notifications.
  6348. //
  6349. // NB: IPin will point to the pin that actioned the Start.  This
  6350. // may not be the pin that the StartAt was sent to.
  6351.  
  6352.   EC_END_OF_SEGMENT                    = $1C;
  6353. //
  6354. // ( const REFERENCE_TIME *pStreamTimeAtEndOfSegment, DWORD dwSegmentNumber )
  6355. //
  6356. // pStreamTimeAtEndOfSegment
  6357. //     pointer to the accumulated stream clock
  6358. //     time since the start of the segment - this is directly computable
  6359. //     as the sum of the previous and current segment durations (Stop - Start)
  6360. //     and the rate applied to each segment
  6361. //     The source add this time to the time within each segment to get
  6362. //     a total elapsed time
  6363. //
  6364. // dwSegmentNumber
  6365. //     Segment number - starts at 0
  6366. //
  6367. // Notifies that a segment end has been reached when the
  6368. // AM_SEEKING_Segment flags was set for IMediaSeeking::SetPositions
  6369. // Passes in an IMediaSeeking interface to allow the next segment
  6370. // to be defined by the application
  6371.  
  6372.   EC_SEGMENT_STARTED                   = $1D;
  6373. //
  6374. // ( const REFERENCE_TIME *pStreamTimeAtStartOfSegment, DWORD dwSegmentNumber)
  6375. //
  6376. // pStreamTimeAtStartOfSegment
  6377. //     pointer to the accumulated stream clock
  6378. //     time since the start of the segment - this is directly computable
  6379. //     as the sum of the previous segment durations (Stop - Start)
  6380. //     and the rate applied to each segment
  6381. //
  6382. // dwSegmentNumber
  6383. //     Segment number - starts at 0
  6384. //
  6385. // Notifies that a new segment has been started.
  6386. // This is sent synchronously by any entity that will issue
  6387. // EC_END_OF_SEGMENT when a new segment is started
  6388. // (See IMediaSeeking::SetPositions - AM_SEEKING_Segment flag)
  6389. // It is used to compute how many EC_END_OF_SEGMENT notifications
  6390. // to expect at the end of a segment and as a consitency check
  6391.  
  6392.   EC_LENGTH_CHANGED                   = $1E;
  6393.  
  6394.   EC_DEVICE_LOST                      = $1f;
  6395. // (IUnknown, 0)
  6396. //
  6397. // request window notification when the device is available again
  6398. // (through WM_DEVICECHANGED messages registered with
  6399. // RegisterDeviceNotification; see IAMDeviceRemoval interface)
  6400.  
  6401.   EC_STEP_COMPLETE                    = $24;
  6402. // (BOOL bCacelled, void)
  6403. // Step request complete
  6404. // if bCancelled is TRUE the step was cancelled.  This can happen
  6405. // if the application issued some control request or because there
  6406. // was a mode change etc etc
  6407.  
  6408.  
  6409.   EC_SKIP_FRAMES                      = $25;
  6410. // ( nFramesToSkip, void ) : internal
  6411. // Get the filter graph to seek accuratley.
  6412.  
  6413.   EC_TIMECODE_AVAILABLE              =    $30;
  6414. // Sent by filter supporting timecode
  6415. // Param1 has a pointer to the sending object
  6416. // Param2 has the device ID of the sending object
  6417.  
  6418.   EC_EXTDEVICE_MODE_CHANGE          =    $31;
  6419. // Sent by filter supporting IAMExtDevice
  6420. // Param1 has the new mode
  6421. // Param2 has the device ID of the sending object
  6422.  
  6423.   EC_GRAPH_CHANGED                    = $50;
  6424. // Sent by filter to notify interesting graph changes
  6425.  
  6426.   EC_CLOCK_UNSET                      = $51;
  6427. // ( void, void ) : application
  6428. // Used to notify the filter graph to unset the current graph clock.
  6429. // Has the affect of forcing the filter graph to reestablish the graph clock
  6430. // on the next Pause/Run (note that this is only used by ksproxy, when the pin
  6431. // of a clock providing filter is disconnected)
  6432.  
  6433. //------------------------------------------
  6434. //
  6435. // WindowsMedia SDK filter-specific events:
  6436. //
  6437.   EC_WMT_EVENT_BASE  = $0251;
  6438. //
  6439.   EC_WMT_INDEX_EVENT = EC_WMT_EVENT_BASE;
  6440. // WindowsMedia SDK-originated file indexing status, sent by WMSDK-based filters
  6441. //
  6442. // lParam1 is one of the enum WMT_STATUS messages listed below, sent by the WindowsMedia SDK
  6443. // lParam2 is specific to the lParam event
  6444. //
  6445. //     the following WMT_STATUS messages are sent for this event:
  6446. //         WMT_STARTED        - lParam2 is 0
  6447. //         WMT_CLOSED         - lParam2 is 0
  6448. //         WMT_INDEX_PROGRESS - lParam2 is a DWORD containing the progress percent complete
  6449. //
  6450. // end WMSDK-originated events
  6451. //-----------------------------------------
  6452.  
  6453. (*==========================================================================;
  6454.  *
  6455.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  6456.  *
  6457.  *  File:       uuids.h
  6458.  *
  6459.  ***************************************************************************)
  6460.  
  6461. const
  6462.  
  6463. // -- to allow consistent labeling of Media types and subtypes --
  6464.   // ?? GUID_NULL ??
  6465.   GUID_NULL: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($00,$00,$00,$00,$00,$00,$00,$00));
  6466.   MEDIATYPE_NULL: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($00,$00,$00,$00,$00,$00,$00,$00));
  6467.   MEDIASUBTYPE_NULL: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($00,$00,$00,$00,$00,$00,$00,$00));
  6468.  
  6469. // -- Use this subtype if you don't have a use for a subtype for your type
  6470.   MEDIASUBTYPE_None: TGUID = (D1:$E436EB8E;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6471.  
  6472. // -- major types ---
  6473.   MEDIATYPE_Video: TGUID = (D1:$73646976;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6474.   MEDIATYPE_Audio: TGUID = (D1:$73647561;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6475.   MEDIATYPE_Text: TGUID = (D1:$73747874;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6476.   MEDIATYPE_Midi: TGUID = (D1:$7364696D;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6477.   MEDIATYPE_Stream: TGUID = (D1:$E436EB83;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6478.   MEDIATYPE_Interleaved: TGUID = (D1:$73766169;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6479.   MEDIATYPE_File: TGUID = (D1:$656C6966;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6480.   MEDIATYPE_ScriptCommand: TGUID = (D1:$73636D64;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6481.   MEDIATYPE_AUXLine21Data: TGUID = (D1:$670AEA80;D2:$3A82;D3:$11D0;D4:($B7,$9B,$00,$AA,$00,$37,$67,$A7));
  6482.   MEDIATYPE_Timecode: TGUID = (D1:$0482DEE3;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6483.   MEDIATYPE_LMRT : TGUID = (D1:$74726c6d;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6484.   MEDIATYPE_URL_STREAM: TGUID = (D1:$736c7275;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6485.  
  6486. // -- sub types ---
  6487.   MEDIASUBTYPE_CLPL: TGUID = (D1:$4C504C43;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6488.   MEDIASUBTYPE_YUYV: TGUID = (D1:$56595559;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6489.   MEDIASUBTYPE_IYUV: TGUID = (D1:$56555949;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6490.   MEDIASUBTYPE_YVU9: TGUID = (D1:$39555659;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6491.   MEDIASUBTYPE_Y411: TGUID = (D1:$31313459;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6492.   MEDIASUBTYPE_Y41P: TGUID = (D1:$50313459;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6493.   MEDIASUBTYPE_YUY2: TGUID = (D1:$32595559;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6494.   MEDIASUBTYPE_YVYU: TGUID = (D1:$55595659;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6495.   MEDIASUBTYPE_UYVY: TGUID = (D1:$59565955;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6496.   MEDIASUBTYPE_Y211: TGUID = (D1:$31313259;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6497.   MEDIASUBTYPE_YV12: TGUID = (D1:$32315659;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6498.   MEDIASUBTYPE_CLJR: TGUID = (D1:$524A4C43;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6499.   MEDIASUBTYPE_IF09: TGUID = (D1:$39304649;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6500.   MEDIASUBTYPE_CPLA: TGUID = (D1:$414C5043;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6501.   MEDIASUBTYPE_MJPG: TGUID = (D1:$47504A4D;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6502.   MEDIASUBTYPE_TVMJ: TGUID = (D1:$4A4D5654;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6503.   MEDIASUBTYPE_WAKE: TGUID = (D1:$454B4157;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6504.   MEDIASUBTYPE_CFCC: TGUID = (D1:$43434643;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6505.   MEDIASUBTYPE_IJPG: TGUID = (D1:$47504A49;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6506.   MEDIASUBTYPE_Plum: TGUID = (D1:$6D756C50;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6507.   MEDIASUBTYPE_DVCS: TGUID = (D1:$53435644;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6508.   MEDIASUBTYPE_DVSD: TGUID = (D1:$44535644;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6509.   MEDIASUBTYPE_MDVF: TGUID = (D1:$4656444D;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6510.   MEDIASUBTYPE_RGB1: TGUID = (D1:$E436EB78;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6511.   MEDIASUBTYPE_RGB4: TGUID = (D1:$E436EB79;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6512.   MEDIASUBTYPE_RGB8: TGUID = (D1:$E436EB7A;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6513.   MEDIASUBTYPE_RGB565: TGUID = (D1:$E436EB7B;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6514.   MEDIASUBTYPE_RGB555: TGUID = (D1:$E436EB7C;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6515.   MEDIASUBTYPE_RGB24: TGUID = (D1:$E436EB7D;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6516.   MEDIASUBTYPE_RGB32:  TGUID = (D1:$E436EB7E;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6517.   MEDIASUBTYPE_ARGB32: TGUID = (D1:$773c9ac0;D2:$3274;D3:$11d0;D4:($b7,$24,$00,$aa,$00,$6c,$1a,$1 ));
  6518.   MEDIASUBTYPE_Overlay: TGUID = (D1:$E436EB7F;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6519.   MEDIASUBTYPE_MPEG1Packet: TGUID = (D1:$E436EB80;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6520.   MEDIASUBTYPE_MPEG1Payload: TGUID = (D1:$E436EB81;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6521.   MEDIASUBTYPE_MPEG1AudioPayload: TGUID = (D1:$00000050;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6522.   MEDIATYPE_MPEG1SystemStream: TGUID = (D1:$E436EB82;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6523.   MEDIASUBTYPE_MPEG1System: TGUID = (D1:$E436EB84;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6524.   MEDIASUBTYPE_MPEG1VideoCD: TGUID = (D1:$E436EB85;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6525.   MEDIASUBTYPE_MPEG1Video: TGUID = (D1:$E436EB86;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6526.   MEDIASUBTYPE_MPEG1Audio: TGUID = (D1:$E436EB87;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6527.   MEDIASUBTYPE_Avi: TGUID = (D1:$E436EB88;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6528.   MEDIASUBTYPE_Asf: TGUID = (D1:$3db80f90;D2:$9412;D3:$11d1;D4:($ad,$ed,$00,$00,$f8,$75,$4b,$99));
  6529.   MEDIASUBTYPE_QTMovie: TGUID = (D1:$E436EB89;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6530.   MEDIASUBTYPE_QTRpza: TGUID = (D1:$617A7072;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6531.   MEDIASUBTYPE_QTSmc: TGUID = (D1:$20636D73;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6532.   MEDIASUBTYPE_QTRle: TGUID = (D1:$20656C72;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6533.   MEDIASUBTYPE_QTJpeg: TGUID = (D1:$6765706A;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6534.   MEDIASUBTYPE_PCMAudio_Obsolete: TGUID = (D1:$E436EB8A;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6535.   MEDIASUBTYPE_PCM: TGUID = (D1:$00000001;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6536.   MEDIASUBTYPE_WAVE: TGUID = (D1:$E436EB8B;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6537.   MEDIASUBTYPE_AU: TGUID = (D1:$E436EB8C;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6538.   MEDIASUBTYPE_AIFF: TGUID = (D1:$E436EB8D;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6539.   MEDIASUBTYPE_dvsd_: TGUID = (D1:$64737664;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6540.   MEDIASUBTYPE_dvhd: TGUID = (D1:$64687664;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6541.   MEDIASUBTYPE_dvsl: TGUID = (D1:$6C737664;D2:$0000;D3:$0010;D4:($80,$00,$00,$AA,$00,$38,$9B,$71));
  6542.   MEDIASUBTYPE_Line21_BytePair: TGUID = (D1:$6E8D4A22;D2:$310C;D3:$11D0;D4:($B7,$9A,$00,$AA,$00,$37,$67,$A7));
  6543.   MEDIASUBTYPE_Line21_GOPPacket: TGUID = (D1:$6E8D4A23;D2:$310C;D3:$11D0;D4:($B7,$9A,$00,$AA,$00,$37,$67,$A7));
  6544.   MEDIASUBTYPE_Line21_VBIRawData: TGUID = (D1:$6E8D4A24;D2:$310C;D3:$11D0;D4:($B7,$9A,$00,$AA,$00,$37,$67,$A7));
  6545.   MEDIASUBTYPE_DRM_Audio: TGUID = (D1:$00000009;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6546.   MEDIASUBTYPE_IEEE_FLOAT: TGUID = (D1:$00000003;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6547.   MEDIASUBTYPE_DOLBY_AC3_SPDIF: TGUID = (D1:$00000092;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6548.   MEDIASUBTYPE_RAW_SPORT: TGUID = (D1:$00000240;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6549.   MEDIASUBTYPE_SPDIF_TAG_241h: TGUID = (D1:$00000241;D2:$0000;D3:$0010;D4:($80,$00,$00,$aa,$00,$38,$9b,$71));
  6550.  
  6551. // DirectShow DSS definitions
  6552.  
  6553.   MEDIASUBTYPE_DssVideo: TGUID = (D1:$A0AF4F81;D2:$E163;D3:$11D0;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6554.   MEDIASUBTYPE_DssAudio: TGUID = (D1:$A0AF4F82;D2:$E163;D3:$11D0;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6555.   MEDIASUBTYPE_VPVideo: TGUID = (D1:$5A9B6A40;D2:$1A22;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6556.   MEDIASUBTYPE_VPVBI: TGUID = (D1:$5A9B6A41;D2:$1A22;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6557.  
  6558. //--- dxmedia (the cutlist source filter)
  6559.   CLSID_SimpleCutList: TGUID = (D1:$A5EA8D30;D2:$253D;D3:$11D1;D4:($B3,$F1,$00,$AA,$00,$37,$61,$C5));
  6560.   CLSID_VideoFileClip: TGUID = (D1:$A5EA8D31;D2:$253D;D3:$11D1;D4:($B3,$F1,$00,$AA,$00,$37,$61,$C5));
  6561.   CLSID_AudioFileClip: TGUID = (D1:$A5EA8D32;D2:$253D;D3:$11D1;D4:($B3,$F1,$00,$AA,$00,$37,$61,$C5));
  6562.   CLSID_CutListCacheMemory: TGUID = (D1:$A5EA8D33;D2:$253D;D3:$11D1;D4:($B3,$F1,$00,$AA,$00,$37,$61,$C5));
  6563. //--- end cut list stuff
  6564.   CLSID_CaptureGraphBuilder: TGUID = (D1:$BF87B6E0;D2:$8C27;D3:$11D0;D4:($B3,$F0,$00,$AA,$00,$37,$61,$C5));
  6565.   CLSID_CaptureGraphBuilder2: TGUID = (D1:$BF87B6E1;D2:$8C27;D3:$11d0;D4:($B3,$F0,$00,$AA,$00,$37,$61,$C5));
  6566.   CLSID_ProtoFilterGraph: TGUID = (D1:$E436EBB0;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6567.   CLSID_SystemClock: TGUID = (D1:$E436EBB1;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6568.   CLSID_FilterMapper: TGUID = (D1:$E436EBB2;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6569.   CLSID_FilterGraph: TGUID = (D1:$E436EBB3;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6570.   CLSID_FilterGraphNoThread: TGUID = (D1:$E436EBB8;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6571.   CLSID_MPEG1Doc: TGUID = (D1:$E4BBD160;D2:$4269;D3:$11CE;D4:($83,$8D,$00,$AA,$00,$55,$59,$5A));
  6572.   CLSID_FileSource: TGUID = (D1:$701722E0;D2:$8AE3;D3:$11CE;D4:($A8,$5C,$00,$AA,$00,$2F,$EA,$B5));
  6573.   CLSID_MPEG1PacketPlayer: TGUID = (D1:$26C25940;D2:$4CA9;D3:$11CE;D4:($A8,$28,$00,$AA,$00,$2F,$EA,$B5));
  6574.   CLSID_MPEG1Splitter: TGUID = (D1:$336475D0;D2:$942A;D3:$11CE;D4:($A8,$70,$00,$AA,$00,$2F,$EA,$B5));
  6575.   CLSID_CMpegVideoCodec: TGUID = (D1:$FEB50740;D2:$7BEF;D3:$11CE;D4:($9B,$D9,$00,$00,$E2,$02,$59,$9C));
  6576.   CLSID_CMpegAudioCodec: TGUID = (D1:$4A2286E0;D2:$7BEF;D3:$11CE;D4:($9B,$D9,$00,$00,$E2,$02,$59,$9C));
  6577.   CLSID_TextRender: TGUID = (D1:$E30629D3;D2:$27E5;D3:$11CE;D4:($87,$5D,$00,$60,$8C,$B7,$80,$66));
  6578.  
  6579.   CLSID_InfTee: TGUID = (D1:$F8388A40;D2:$D5BB;D3:$11D0;D4:($BE,$5A,$00,$80,$C7,$06,$56,$8E));
  6580.   CLSID_AviSplitter: TGUID = (D1:$1B544C20;D2:$FD0B;D3:$11CE;D4:($8C,$63,$00,$AA,$00,$44,$B5,$1E));
  6581.   CLSID_AviReader: TGUID = (D1:$1B544C21;D2:$FD0B;D3:$11CE;D4:($8C,$63,$00,$AA,$00,$44,$B5,$1E));
  6582.   CLSID_VfwCapture: TGUID = (D1:$1B544C22;D2:$FD0B;D3:$11CE;D4:($8C,$63,$00,$AA,$00,$44,$B5,$1E));
  6583.   CLSID_CaptureProperties: TGUID = (D1:$1B544C22;D2:$FD0B;D3:$11CE;D4:($8C,$63,$00,$AA,$00,$44,$B5,$1F));
  6584.   CLSID_FGControl: TGUID = (D1:$E436EBB4;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6585.   CLSID_MOVReader: TGUID = (D1:$44584800;D2:$F8EE;D3:$11CE;D4:($B2,$D4,$00,$DD,$01,$10,$1B,$85));
  6586.   CLSID_QuickTimeParser: TGUID = (D1:$d51bd5a0;D2:$7548;D3:$11cf;D4:($a5,$20,$00,$80,$c7,$7e,$f5,$8a));
  6587.   CLSID_QTDec: TGUID = (D1:$fdfe9681;D2:$74a3;D3:$11d0;D4:($af,$a7,$00,$aa,$00,$b6,$7a,$42));
  6588.   CLSID_AVIDoc: TGUID = (D1:$D3588AB0;D2:$0781;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  6589. //---dxmedia
  6590.   CLSID_AVIDocWriter: TGUID = (D1:$D3588AB1;D2:$0781;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  6591. //---
  6592.   CLSID_VideoRenderer: TGUID = (D1:$70E102B0;D2:$5556;D3:$11CE;D4:($97,$C0,$00,$AA,$00,$55,$59,$5A));
  6593.   CLSID_Colour: TGUID = (D1:$1643E180;D2:$90F5;D3:$11CE;D4:($97,$D5,$00,$AA,$00,$55,$59,$5A));
  6594.   CLSID_Dither: TGUID = (D1:$1DA08500;D2:$9EDC;D3:$11CF;D4:($BC,$10,$00,$AA,$00,$AC,$74,$F6));
  6595.   CLSID_ModexRenderer: TGUID = (D1:$07167665;D2:$5011;D3:$11CF;D4:($BF,$33,$00,$AA,$00,$55,$59,$5A));
  6596.   CLSID_AudioRender: TGUID = (D1:$E30629D1;D2:$27E5;D3:$11CE;D4:($87,$5D,$00,$60,$8C,$B7,$80,$66));
  6597.   CLSID_AudioProperties: TGUID = (D1:$05589FAF;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6598.  
  6599.   CLSID_DSoundRender: TGUID = (D1:$79376820;D2:$07D0;D3:$11CF;D4:($A2,$4D,$00,$20,$AF,$D7,$97,$67));
  6600.   CLSID_AudioRecord: TGUID = (D1:$E30629D2;D2:$27E5;D3:$11CE;D4:($87,$5D,$00,$60,$8C,$B7,$80,$66));
  6601.   CLSID_AudioInputMixerProperties: TGUID = (D1:$2ca8ca52;D2:$3c3f;D3:$11d2;D4:($b7,$3d,$00,$c0,$4f,$b6,$bd,$3d));
  6602.   CLSID_AVIDec: TGUID = (D1:$CF49D4E0;D2:$1115;D3:$11CE;D4:($B0,$3A,$00,$20,$AF,$0B,$A7,$70));
  6603.   CLSID_AVIDraw: TGUID = (D1:$a888df60;D2:$1e90;D3:$11cf;D4:($ac,$98,$00,$aa,$00,$4c,$f,$a9));
  6604.   CLSID_ACMWrapper: TGUID = (D1:$6A08CF80;D2:$0E18;D3:$11CF;D4:($A2,$4D,$00,$20,$AF,$D7,$97,$67));
  6605.   CLSID_AsyncReader: TGUID = (D1:$E436EBB5;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6606.   CLSID_URLReader: TGUID = (D1:$E436EBB6;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6607.   CLSID_PersistMonikerPID: TGUID = (D1:$E436EBB7;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70));
  6608.   CLSID_AMovie: TGUID = (D1:$5F2759C0;D2:$7685;D3:$11CF;D4:($8B,$23,$00,$80,$5F,$6C,$EF,$60));
  6609.   CLSID_AVICo: TGUID = (D1:$D76E2820;D2:$1563;D3:$11CF;D4:($AC,$98,$00,$AA,$00,$4C,$0F,$A9));
  6610.   CLSID_FileWriter: TGUID = (D1:$8596E5F0;D2:$0DA5;D3:$11D0;D4:($BD,$21,$00,$A0,$C9,$11,$CE,$86));
  6611.  
  6612.   CLSID_AviDest: TGUID = (D1:$E2510970;D2:$F137;D3:$11CE;D4:($8B,$67,$00,$AA,$00,$A3,$F1,$A6));
  6613.   CLSID_AviMuxProptyPage: TGUID = (D1:$C647B5C0;D2:$157C;D3:$11D0;D4:($BD,$23,$00,$A0,$C9,$11,$CE,$86));
  6614.   CLSID_AviMuxProptyPage1: TGUID = (D1:$0A9AE910;D2:$85C0;D3:$11D0;D4:($BD,$42,$00,$A0,$C9,$11,$CE,$86));
  6615.   CLSID_AVIMIDIRender: TGUID = (D1:$07B65360;D2:$C445;D3:$11CE;D4:($AF,$DE,$00,$AA,$00,$6C,$14,$F4));
  6616.   CLSID_WMAsfReader: TGUID = (D1:$187463a0;D2:$5bb7;D3:$11d3;D4:($ac,$be,$00,$80,$c7,$5e,$24,$6e));
  6617.   CLSID_WMAsfWriter: TGUID = (D1:$7c23220e;D2:$55bb;D3:$11d3;D4:($8b,$16,$00,$c0,$4f,$b6,$bd,$3d));
  6618.   CLSID_MPEG2Demultiplexer: TGUID = (D1:$afb6c280;D2:$2c41;D3:$11d3;D4:($8a,$60,$00,$00,$f8,$1e,$0e,$4a));
  6619.   CLSID_MMSPLITTER: TGUID = (D1:$3ae86b20;D2:$7be8;D3:$11d1;D4:($ab,$e6,$00,$a0,$c9,$05,$f3,$75));
  6620.  
  6621.   CLSID_DVVideoCodec: TGUID = (D1:$B1B77C00;D2:$C3E4;D3:$11CF;D4:($AF,$79,$00,$AA,$00,$B6,$7A,$42));
  6622.   CLSID_DVVideoEnc: TGUID = (D1:$13AA3650;D2:$BB6F;D3:$11D0;D4:($AF,$B9,$00,$AA,$00,$B6,$7A,$42));
  6623.   CLSID_DVSplitter: TGUID = (D1:$4EB31670;D2:$9FC6;D3:$11CF;D4:($AF,$6E,$00,$AA,$00,$B6,$7A,$42));
  6624.   CLSID_DVMux: TGUID = (D1:$129D7E40;D2:$C10D;D3:$11D0;D4:($AF,$B9,$00,$AA,$00,$B6,$7A,$42));
  6625.   CLSID_SeekingPassThru: TGUID = (D1:$060AF76C;D2:$68DD;D3:$11D0;D4:($8F,$C1,$00,$C0,$4F,$D9,$18,$9D));
  6626.   CLSID_Line21Decoder: TGUID = (D1:$6E8D4A20;D2:$310C;D3:$11D0;D4:($B7,$9A,$00,$AA,$00,$37,$67,$A7));
  6627.   CLSID_OverlayMixer: TGUID = (D1:$CD8743A1;D2:$3736;D3:$11D0;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  6628.   CLSID_VBISurfaces: TGUID = (D1:$814B9800;D2:$1C88;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6629.  
  6630. // pnp objects and categories
  6631.   CLSID_SystemDeviceEnum: TGUID = (D1:$62BE5D10;D2:$60EB;D3:$11D0;D4:($BD,$3B,$00,$A0,$C9,$11,$CE,$86));
  6632.   CLSID_CDeviceMoniker: TGUID = (D1:$4315D437;D2:$5B8C;D3:$11D0;D4:($BD,$3B,$00,$A0,$C9,$11,$CE,$86));
  6633.   CLSID_VideoInputDeviceCategory: TGUID = (D1:$860BB310;D2:$5D01;D3:$11D0;D4:($BD,$3B,$00,$A0,$C9,$11,$CE,$86));
  6634.   CLSID_CVidCapClassManager: TGUID = (D1:$860BB310;D2:$5D01;D3:$11D0;D4:($BD,$3B,$00,$A0,$C9,$11,$CE,$86));
  6635.   CLSID_LegacyAmFilterCategory: TGUID = (D1:$083863F1;D2:$70DE;D3:$11D0;D4:($BD,$40,$00,$A0,$C9,$11,$CE,$86));
  6636.   CLSID_CQzFilterClassManager: TGUID = (D1:$083863F1;D2:$70DE;D3:$11D0;D4:($BD,$40,$00,$A0,$C9,$11,$CE,$86));
  6637.   CLSID_VideoCompressorCategory: TGUID = (D1:$33D9A760;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6638.   CLSID_CIcmCoClassManager: TGUID = (D1:$33D9A760;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6639.   CLSID_AudioCompressorCategory: TGUID = (D1:$33D9A761;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6640.   CLSID_CAcmCoClassManager: TGUID = (D1:$33D9A761;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6641.   CLSID_AudioInputDeviceCategory: TGUID = (D1:$33D9A762;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6642.   CLSID_CWaveinClassManager: TGUID = (D1:$33D9A762;D2:$90C8;D3:$11D0;D4:($BD,$43,$00,$A0,$C9,$11,$CE,$86));
  6643.   CLSID_AudioRendererCategory: TGUID = (D1:$E0F158E1;D2:$CB04;D3:$11D0;D4:($BD,$4E,$00,$A0,$C9,$11,$CE,$86));
  6644.   CLSID_CWaveOutClassManager: TGUID = (D1:$E0F158E1;D2:$CB04;D3:$11D0;D4:($BD,$4E,$00,$A0,$C9,$11,$CE,$86));
  6645.   CLSID_MidiRendererCategory: TGUID = (D1:$4EFE2452;D2:$168A;D3:$11D1;D4:($BC,$76,$00,$C0,$4F,$B9,$45,$3B));
  6646.   CLSID_CMidiOutClassManager: TGUID = (D1:$4EFE2452;D2:$168A;D3:$11D1;D4:($BC,$76,$00,$C0,$4F,$B9,$45,$3B));
  6647.   CLSID_TransmitCategory: TGUID = (D1:$cc7bfb41;D2:$f175;D3:$11d1;D4:($a3,$92,$00,$e0,$29,$1f,$39,$59));
  6648.   CLSID_DeviceControlCategory: TGUID = (D1:$cc7bfb46;D2:$f175;D3:$11d1;D4:($a3,$92,$00,$e0,$29,$1f,$39,$59));
  6649.   CLSID_ActiveMovieCategories: TGUID = (D1:$DA4E3DA0;D2:$D07D;D3:$11D0;D4:($BD,$50,$00,$A0,$C9,$11,$CE,$86));
  6650.   CLSID_DVDHWDecodersCategory: TGUID = (D1:$2721AE20;D2:$7E70;D3:$11D0;D4:($A5,$D6,$28,$DB,$04,$C1,$00,$00));
  6651.   CLSID_FilterMapper2: TGUID = (D1:$CDA42200;D2:$BD88;D3:$11D0;D4:($BD,$4E,$00,$A0,$C9,$11,$CE,$86));
  6652.   CLSID_MemoryAllocator: TGUID = (D1:$1E651CC0;D2:$B199;D3:$11D0;D4:($82,$12,$00,$C0,$4F,$C3,$2C,$45));
  6653.   CLSID_MediaPropertyBag: TGUID = (D1:$CDBD8D00;D2:$C193;D3:$11D0;D4:($BD,$4E,$00,$A0,$C9,$11,$CE,$86));
  6654.   CLSID_DvdGraphBuilder: TGUID = (D1:$FCC152B7;D2:$F372;D3:$11D0;D4:($8E,$00,$00,$C0,$4F,$D7,$C0,$8B));
  6655.   CLSID_DVDNavigator: TGUID = (D1:$9B8C4620;D2:$2C1A;D3:$11D0;D4:($84,$93,$00,$A0,$24,$38,$AD,$48));
  6656.   CLSID_DVDState: TGUID = (D1:$f963c5cf;D2:$a659;D3:$4a93;D4:($96,$38,$ca,$f3,$cd,$27,$7d,$13));
  6657.   CLSID_SmartTee: TGUID = (D1:$cc58e280;D2:$8aa1;D3:$11d1;D4:($b3,$f1,$00,$aa,$00,$37,$61,$c5));
  6658.  
  6659. // -- format types ---
  6660.   FORMAT_None: TGUID = (D1:$0F6417D6;D2:$C318;D3:$11D0;D4:($A4,$3F,$00,$A0,$C9,$22,$31,$96));
  6661.   FORMAT_VideoInfo: TGUID = (D1:$05589F80;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6662.   FORMAT_VideoInfo2: TGUID = (D1:$F72A76A0;D2:$EB0A;D3:$11D0;D4:($AC,$E4,$00,$00,$C0,$CC,$16,$BA));
  6663.   FORMAT_WaveFormatEx: TGUID = (D1:$05589F81;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6664.   FORMAT_MPEGVideo: TGUID = (D1:$05589F82;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6665.   FORMAT_MPEGStreams: TGUID = (D1:$05589F83;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6666.   FORMAT_DvInfo: TGUID = (D1:$05589F84;D2:$C356;D3:$11CE;D4:($BF,$01,$00,$AA,$00,$55,$59,$5A));
  6667.  
  6668.  
  6669. // -- Video related GUIDs ---
  6670.   CLSID_DirectDrawProperties: TGUID = (D1:$944D4C00;D2:$DD52;D3:$11CE;D4:($BF,$0E,$00,$AA,$00,$55,$59,$5A));
  6671.   CLSID_PerformanceProperties: TGUID = (D1:$59CE6880;D2:$ACF8;D3:$11CF;D4:($B5,$6E,$00,$80,$C7,$C4,$B6,$8A));
  6672.   CLSID_QualityProperties: TGUID = (D1:$418AFB70;D2:$F8B8;D3:$11CE;D4:($AA,$C6,$00,$20,$AF,$0B,$99,$A3));
  6673.   CLSID_VPObject: TGUID = (D1:$CE292861;D2:$FC88;D3:$11D0;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  6674.   IID_IVPObject: TGUID = (D1:$CE292862;D2:$FC88;D3:$11D0;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  6675.   IID_IVPControl: TGUID = (D1:$25DF12C1;D2:$3DE0;D3:$11D1;D4:($9E,$69,$00,$C0,$4F,$D7,$C1,$5B));
  6676.   CLSID_VPVBIObject: TGUID = (D1:$814B9801;D2:$1C88;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6677.   IID_IVPVBIObject: TGUID = (D1:$814B9802;D2:$1C88;D3:$11D1;D4:($BA,$D9,$00,$60,$97,$44,$11,$1A));
  6678.  
  6679.   CLSID_ModexProperties: TGUID = (D1:$0618AA30;D2:$6BC4;D3:$11CF;D4:($BF,$36,$00,$AA,$00,$55,$59,$5A));
  6680.  
  6681. // DV decoder property
  6682.   CLSID_DVDecPropertiesPage: TGUID = (D1:$101193C0;D2:$0BFE;D3:$11D0;D4:($AF,$91,$00,$AA,$00,$B6,$7A,$42));
  6683.  
  6684. // DV encoder property
  6685.   CLSID_DVEncPropertiesPage: TGUID = (D1:$4150F050;D2:$BB6F;D3:$11D0;D4:($AF,$B9,$00,$AA,$00,$B6,$7A,$42));
  6686.  
  6687. // DV Muxer property
  6688.   CLSID_DVMuxPropertyPage: TGUID = (D1:$4DB880E0;D2:$C10D;D3:$11D0;D4:($AF,$B9,$00,$AA,$00,$B6,$7A,$42));
  6689.  
  6690.  
  6691. // -- Analog video related GUIDs ---
  6692.  
  6693.  
  6694. // -- format types ---
  6695.   FORMAT_AnalogVideo: TGUID = (D1:$0482DDE0;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6696.  
  6697.   MEDIATYPE_AnalogVideo: TGUID = (D1:$0482DDE1;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6698.   MEDIASUBTYPE_AnalogVideo_NTSC_M: TGUID = (D1:$0482DDE2;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6699.   MEDIASUBTYPE_AnalogVideo_PAL_B: TGUID = (D1:$0482DDE5;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6700.   MEDIASUBTYPE_AnalogVideo_PAL_D: TGUID = (D1:$0482DDE6;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6701.   MEDIASUBTYPE_AnalogVideo_PAL_G: TGUID = (D1:$0482DDE7;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6702.   MEDIASUBTYPE_AnalogVideo_PAL_H: TGUID = (D1:$0482DDE8;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6703.   MEDIASUBTYPE_AnalogVideo_PAL_I: TGUID = (D1:$0482DDE9;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6704.   MEDIASUBTYPE_AnalogVideo_PAL_M: TGUID = (D1:$0482DDEA;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6705.   MEDIASUBTYPE_AnalogVideo_PAL_N : TGUID = (D1:$0482DDEB;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6706.   MEDIASUBTYPE_AnalogVideo_PAL_N_COMBO: TGUID = (D1:$482ddec;D2:$7817;D3:$11cf;D4:($8a,$3,$00,$aa,$00,$6e,$cb,$65));
  6707.  
  6708. // -- Analog Video subtypes, SECAM
  6709.   MEDIASUBTYPE_AnalogVideo_SECAM_B: TGUID = (D1:$0482DDF0;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6710.   MEDIASUBTYPE_AnalogVideo_SECAM_D: TGUID = (D1:$0482DDF1;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6711.   MEDIASUBTYPE_AnalogVideo_SECAM_G: TGUID = (D1:$0482DDF2;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6712.   MEDIASUBTYPE_AnalogVideo_SECAM_H: TGUID = (D1:$0482DDF3;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6713.   MEDIASUBTYPE_AnalogVideo_SECAM_K: TGUID = (D1:$0482DDF4;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6714.   MEDIASUBTYPE_AnalogVideo_SECAM_K1: TGUID = (D1:$0482DDF5;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6715.   MEDIASUBTYPE_AnalogVideo_SECAM_L: TGUID = (D1:$0482DDF6;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6716.  
  6717.  
  6718. // --  External audio related GUIDs ---
  6719.  
  6720. // -- major types, Analog Audio
  6721.   MEDIATYPE_AnalogAudio: TGUID = (D1:$0482DEE1;D2:$7817;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6722.  
  6723. // -- Well known time format GUIDs ---
  6724.   TIME_FORMAT_NONE: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($00,$00,$00,$00,$00,$00,$00,$00));
  6725.   TIME_FORMAT_FRAME: TGUID = (D1:$7B785570;D2:$8C82;D3:$11CF;D4:($BC,$0C,$00,$AA,$00,$AC,$74,$F6));
  6726.   TIME_FORMAT_BYTE: TGUID = (D1:$7B785571;D2:$8C82;D3:$11CF;D4:($BC,$0C,$00,$AA,$00,$AC,$74,$F6));
  6727.   TIME_FORMAT_SAMPLE: TGUID = (D1:$7B785572;D2:$8C82;D3:$11CF;D4:($BC,$0C,$00,$AA,$00,$AC,$74,$F6));
  6728.   TIME_FORMAT_FIELD: TGUID = (D1:$7B785573;D2:$8C82;D3:$11CF;D4:($BC,$0C,$00,$AA,$00,$AC,$74,$F6));
  6729.   TIME_FORMAT_MEDIA_TIME: TGUID = (D1:$7B785574;D2:$8C82;D3:$11CF;D4:($BC,$0C,$00,$AA,$00,$AC,$74,$F6));
  6730.  
  6731. // for IKsPropertySet
  6732.   AMPROPSETID_Pin: TGUID = (D1:$9B00F101;D2:$1567;D3:$11D1;D4:($B3,$F1,$00,$AA,$00,$37,$61,$C5));
  6733.   PIN_CATEGORY_CAPTURE: TGUID = (D1:$FB6C4281;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6734.   PIN_CATEGORY_PREVIEW: TGUID = (D1:$FB6C4282;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6735.   PIN_CATEGORY_ANALOGVIDEOIN: TGUID = (D1:$FB6C4283;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6736.   PIN_CATEGORY_VBI: TGUID = (D1:$FB6C4284;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6737.   PIN_CATEGORY_VIDEOPORT: TGUID = (D1:$FB6C4285;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6738.   PIN_CATEGORY_NABTS: TGUID = (D1:$FB6C4286;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6739.   PIN_CATEGORY_EDS: TGUID = (D1:$FB6C4287;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6740.   PIN_CATEGORY_TELETEXT: TGUID = (D1:$FB6C4288;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6741.   PIN_CATEGORY_CC: TGUID = (D1:$FB6C4289;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6742.   PIN_CATEGORY_STILL: TGUID = (D1:$FB6C428A;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6743.   PIN_CATEGORY_TIMECODE: TGUID = (D1:$FB6C428B;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6744.   PIN_CATEGORY_VIDEOPORT_VBI: TGUID = (D1:$FB6C428C;D2:$0353;D3:$11D1;D4:($90,$5F,$00,$00,$C0,$CC,$16,$BA));
  6745.  
  6746. // the following special GUIDS are used by ICaptureGraphBuilder::FindInterface
  6747.   LOOK_UPSTREAM_ONLY:   TGUID = (D1:$ac798be0;D2:$98e3;D3:$11d1;D4:($b3,$f1,$0,$aa,$0,$37,$61,$c5));
  6748.   LOOK_DOWNSTREAM_ONLY: TGUID = (D1:$ac798be1;D2:$98e3;D3:$11d1;D4:($b3,$f1,$0,$aa,$0,$37,$61,$c5));
  6749.  
  6750. // -------------------------------------------------------------------------
  6751. // KSProxy GUIDS
  6752. // -------------------------------------------------------------------------
  6753.  
  6754.   CLSID_TVTunerFilterPropertyPage: TGUID = (D1:$266EEE41;D2:$6C63;D3:$11CF;D4:($8A,$03,$00,$AA,$00,$6E,$CB,$65));
  6755.   CLSID_CrossbarFilterPropertyPage: TGUID = (D1:$71F96461;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6756.   CLSID_TVAudioFilterPropertyPage: TGUID = (D1:$71F96463;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6757.   CLSID_VideoProcAmpPropertyPage: TGUID = (D1:$71F96464;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6758.   CLSID_CameraControlPropertyPage: TGUID = (D1:$71F96465;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6759.   CLSID_AnalogVideoDecoderPropertyPage: TGUID = (D1:$71F96466;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6760.   CLSID_VideoStreamConfigPropertyPage: TGUID = (D1:$71F96467;D2:$78F3;D3:$11D0;D4:($A1,$8C,$00,$A0,$C9,$11,$89,$56));
  6761.   CLSID_AudioRendererAdvancedProperties: TGUID = (D1:$37e92a92;D2:$d9aa;D3:$11d2;D4:($bf,$84,$8e,$f2,$b1,$55,$5a,$ed));
  6762.  
  6763. // -------------------------------------------------------------------------
  6764. // VMRender GUIDS
  6765. // -------------------------------------------------------------------------
  6766. CLSID_VideoMixingRenderer: TGUID = (D1:$B87BEB7B;D2:$8D29;D3:$423f;D4:($AE,$4D,$65,$82,$C1,$01,$75,$AC));
  6767.  
  6768. // -------------------------------------------------------------------------
  6769. // BDA Network Provider GUIDS
  6770. // -------------------------------------------------------------------------
  6771. CLSID_ATSCNetworkProvider    : TGUID = (D1:$0dad2fdd;D2:$5fd7;D3:$11d3;D4:($8f,$50,$00,$c0,$4f,$79,$71,$e2));
  6772. CLSID_ATSCNetworkPropertyPage: TGUID = (D1:$e3444d16;D2:$5ac4;D3:$4386;D4:($88,$df,$13,$fd,$23,$0e,$1d,$da));
  6773. CLSID_DVBSNetworkProvider    : TGUID = (D1:$fa4b375a;D2:$45b4;D3:$4d45;D4:($84,$40,$26,$39,$57,$b1,$16,$23));
  6774.  
  6775. (*==========================================================================;
  6776.  *
  6777.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  6778.  *
  6779.  *  File:       ksuuids.h
  6780.  *
  6781.  ***************************************************************************)
  6782. // contains the GUIDs for the MediaType type, subtype fields and format types
  6783. // for DVD/MPEG2 media types.
  6784.  
  6785. const
  6786. // --- MPEG 2 definitions ---
  6787.   MEDIATYPE_MPEG2_PACK: TGUID     = (D1:$36523B13;D2:$8EE5;D3:$11d1;D4:($8C,$A3,$00,$60,$B0,$57,$66,$4A));
  6788.   MEDIATYPE_MPEG2_PES: TGUID      = (D1:$e06d8020;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6789.   MEDIATYPE_CONTROL: TGUID        = (D1:$e06d8021;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6790.   MEDIASUBTYPE_MPEG2_VIDEO: TGUID = (D1:$e06d8026;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6791.  
  6792. // use MPEG2VIDEOINFO (defined below) with FORMAT_MPEG2_VIDEO
  6793.   FORMAT_MPEG2_VIDEO: TGUID = (D1:$e06d80e3;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6794.  
  6795. // MPEG2 Other subtypes
  6796.   MEDIASUBTYPE_MPEG2_PROGRAM: TGUID   = (D1:$e06d8022;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$05f,$6c,$bb,$ea));
  6797.   MEDIASUBTYPE_MPEG2_TRANSPORT: TGUID = (D1:$e06d8023;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$05f,$6c,$bb,$ea));
  6798.   MEDIASUBTYPE_MPEG2_AUDIO: TGUID = (D1:$E06D802B;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6799.   MEDIASUBTYPE_DOLBY_AC3: TGUID = (D1:$E06D802C;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6800.   MEDIASUBTYPE_DVD_SUBPICTURE: TGUID = (D1:$E06D802D;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6801.   MEDIASUBTYPE_DVD_LPCM_AUDIO: TGUID = (D1:$E06D8032;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6802.   MEDIASUBTYPE_DTS: TGUID  = (D1:$e06d8033;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6803.   MEDIASUBTYPE_SDDS: TGUID = (D1:$e06d8034;D2:$db46;D3:$11cf;D4:($b4,$d1,$00,$80,$5f,$6c,$bb,$ea));
  6804.  
  6805. // DVD-related mediatypes
  6806.   MEDIATYPE_DVD_ENCRYPTED_PACK: TGUID = (D1:$ED0B916A;D2:$044D;D3:$11D1;D4:($AA,$78,$00,$C0,$004F,$C3,$1D,$60));
  6807.   MEDIATYPE_DVD_NAVIGATION: TGUID = (D1:$E06D802E;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6808.   MEDIASUBTYPE_DVD_NAVIGATION_PCI: TGUID = (D1:$E06D802F;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6809.   MEDIASUBTYPE_DVD_NAVIGATION_DSI: TGUID = (D1:$E06D8030;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6810.   MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER: TGUID = (D1:$E06D8031;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6811.  
  6812. //
  6813. // DVD - MPEG2/AC3-related Formats
  6814. //
  6815.  
  6816.   FORMAT_MPEG2Video: TGUID = (D1:$E06D80E3;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6817.   FORMAT_DolbyAC3: TGUID = (D1:$E06D80E4;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6818.   FORMAT_MPEG2Audio: TGUID = (D1:$E06D80E5;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6819.   FORMAT_DVD_LPCMAudio: TGUID = (D1:$E06D80E6;D2:$DB46;D3:$11CF;D4:($B4,$D1,$00,$80,$005F,$6C,$BB,$EA));
  6820.  
  6821. //
  6822. // KS Property Set Id (to communicate with the WDM Proxy filter) -- from
  6823. // ksmedia.h of WDM DDK.
  6824. //
  6825.  
  6826.   AM_KSPROPSETID_AC3: TGUID = (D1:$BFABE720;D2:$6E1F;D3:$11D0;D4:($BC,$F2,$44,$45,$53,$54,$00,$00));
  6827.   AM_KSPROPSETID_DvdSubPic: TGUID = (D1:$AC390460;D2:$43AF;D3:$11D0;D4:($BD,$6A,$00,$35,$05,$C1,$03,$A9));
  6828.   AM_KSPROPSETID_CopyProt: TGUID = (D1:$0E8A0A40;D2:$6AEF;D3:$11D0;D4:($9E,$D0,$00,$A0,$24,$CA,$19,$B3));
  6829.   AM_KSPROPSETID_TSRateChange: TGUID = (D1:$A503C5C0;D2:$1D1D;D3:$11D1;D4:($AD,$80,$44,$45,$53,$54,$00,$00));
  6830.   AM_KSPROPSETID_DVD_RateChange: TGUID = (D1:$3577eb09;D2:$9582;D3:$477f;D4:($b2,$9c,$b0,$c4,$52,$a4,$ff,$9a));
  6831.   AM_KSPROPSETID_DvdKaraoke: TGUID = (D1:$ae4720ae;D2:$aa71;D3:$42d8;D4:($b8,$2a,$ff,$fd,$f5,$8b,$76,$fd));
  6832.   AM_KSPROPSETID_FrameStep: TGUID = (D1:$c830acbd;D2:$ab07;D3:$492f;D4:($88,$52,$45,$b6,$98,$7c,$29,$79));
  6833. //
  6834. // KS categories from ks.h and ksmedia.h
  6835. //
  6836. //
  6837.  
  6838.   AM_KSCATEGORY_CAPTURE: TGUID = (D1:$65E8773D;D2:$8F56;D3:$11D0;D4:($A3,$B9,$00,$A0,$C9,$22,$31,$96));
  6839.   AM_KSCATEGORY_RENDER: TGUID = (D1:$65E8773E;D2:$8F56;D3:$11D0;D4:($A3,$B9,$00,$A0,$C9,$22,$31,$96));
  6840.   AM_KSCATEGORY_DATACOMPRESSOR: TGUID = (D1:$1E84C900;D2:$7E70;D3:$11D0;D4:($A5,$D6,$28,$DB,$04,$C1,$00,$00));
  6841.   AM_KSCATEGORY_AUDIO: TGUID = (D1:$6994AD04;D2:$93EF;D3:$11D0;D4:($A3,$CC,$00,$A0,$C9,$22,$31,$96));
  6842.   AM_KSCATEGORY_VIDEO: TGUID = (D1:$6994AD05;D2:$93EF;D3:$11D0;D4:($A3,$CC,$00,$A0,$C9,$22,$31,$96));
  6843.   AM_KSCATEGORY_TVTUNER: TGUID = (D1:$A799A800;D2:$A46D;D3:$11D0;D4:($A1,$8C,$00,$A0,$24,$01,$DC,$D4));
  6844.   AM_KSCATEGORY_CROSSBAR: TGUID = (D1:$A799A801;D2:$A46D;D3:$11D0;D4:($A1,$8C,$00,$A0,$24,$01,$DC,$D4));
  6845.   AM_KSCATEGORY_TVAUDIO: TGUID = (D1:$A799A802;D2:$A46D;D3:$11D0;D4:($A1,$8C,$00,$A0,$24,$01,$DC,$D4));
  6846.   AM_KSCATEGORY_VBICODEC: TGUID = (D1:$07dad660;D2:$22f1;D3:$11d1;D4:($a9,$f4,$00,$c0,$4f,$bb,$de,$8f));
  6847.   AM_KSCATEGORY_SPLITTER: TGUID = (D1:$0A4252A0;D2:$7E70;D3:$11D0;D4:($A5,$D6,$28,$DB,$04,$C1,$00,$00));
  6848.  
  6849. //
  6850. // guids needed to support IKsPin interface
  6851. //
  6852. //
  6853.   IID_IKsInterfaceHandler: TGUID = (D1:$D3ABC7E0;D2:$9A61;D3:$11D0;D4:($A4,$0D,$00,$A0,$C9,$22,$31,$96));
  6854.   IID_IKsDataTypeHandler:  TGUID = (D1:$5FFBAA02;D2:$49A3;D3:$11D0;D4:($9F,$36,$00,$AA,$00,$A2,$16,$A1));
  6855.   IID_IKsPin: TGUID = (D1:$B61178D1;D2:$A2D9;D3:$11CF;D4:($9E,$53,$00,$AA,$00,$A2,$16,$A1));
  6856.   IID_IKsControl:    TGUID = (D1:$28F54685;D2:$06FD;D3:$11D2;D4:($B2,$7A,$00,$A0,$C9,$22,$31,$96));
  6857.   IID_IKsPinFactory: TGUID = (D1:$CD5EBE6B;D2:$8B6E;D3:$11D1;D4:($8A,$E0,$00,$A0,$C9,$22,$31,$96));
  6858.   AM_INTERFACESETID_Standard: TGUID = (D1:$1A8766A0;D2:$62CE;D3:$11CF;D4:($A5,$D6,$28,$DB,$04,$C1,$00,$00));
  6859.  
  6860.  
  6861. //------------------------------------------------------------------------------
  6862. // File: DXVA.h
  6863. // Desc: DirectX Video Acceleration header file.
  6864. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  6865. //------------------------------------------------------------------------------
  6866.  
  6867. const
  6868. DXVA_ModeNone     : TGUID = (D1:$1b81be00;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6869. DXVA_ModeH261_A   : TGUID = (D1:$1b81be01;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6870. DXVA_ModeH261_B   : TGUID = (D1:$1b81be02;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6871. DXVA_ModeH263_A   : TGUID = (D1:$1b81be03;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6872. DXVA_ModeH263_B   : TGUID = (D1:$1b81be04;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6873. DXVA_ModeH263_C   : TGUID = (D1:$1b81be05;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6874. DXVA_ModeH263_D   : TGUID = (D1:$1b81be06;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6875. DXVA_ModeH263_E   : TGUID = (D1:$1b81be07;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6876. DXVA_ModeH263_F   : TGUID = (D1:$1b81be08;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6877. DXVA_ModeMPEG1_A  : TGUID = (D1:$1b81be09;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6878. DXVA_ModeMPEG2_A  : TGUID = (D1:$1b81be0A;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6879. DXVA_ModeMPEG2_B  : TGUID = (D1:$1b81be0B;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6880. DXVA_ModeMPEG2_C  : TGUID = (D1:$1b81be0C;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6881. DXVA_ModeMPEG2_D  : TGUID = (D1:$1b81be0D;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6882.  
  6883. DXVA_NoEncrypt    : TGUID = (D1:$1b81beD0;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6884. DXVA_EncryptProt1 : TGUID = (D1:$1b81beD1;D2:$a0c7;D3:$11d3;D4:($b9,$84,$00,$c0,$4f,$2e,$73,$c5));
  6885.  
  6886. DXVA_RESTRICTED_MODE_UNRESTRICTED =       $FFFF;
  6887. DXVA_RESTRICTED_MODE_H261_A       =       1;
  6888. DXVA_RESTRICTED_MODE_H261_B       =       2;
  6889. DXVA_RESTRICTED_MODE_H263_A       =       3;
  6890. DXVA_RESTRICTED_MODE_H263_B       =       4;
  6891. DXVA_RESTRICTED_MODE_H263_C       =       5;
  6892. DXVA_RESTRICTED_MODE_H263_D       =       6;
  6893. DXVA_RESTRICTED_MODE_H263_E       =       7;
  6894. DXVA_RESTRICTED_MODE_H263_F       =       8;
  6895. DXVA_RESTRICTED_MODE_MPEG1_A      =       9;
  6896. DXVA_RESTRICTED_MODE_MPEG2_A      =       $A;
  6897. DXVA_RESTRICTED_MODE_MPEG2_B      =       $B;
  6898. DXVA_RESTRICTED_MODE_MPEG2_C      =       $C;
  6899. DXVA_RESTRICTED_MODE_MPEG2_D      =       $D;
  6900.  
  6901. DXVA_COMPBUFFER_TYPE_THAT_IS_NOT_USED   = 0;
  6902. DXVA_PICTURE_DECODE_BUFFER              = 1;
  6903. DXVA_MACROBLOCK_CONTROL_BUFFER          = 2;
  6904. DXVA_RESIDUAL_DIFFERENCE_BUFFER         = 3;
  6905. DXVA_DEBLOCKING_CONTROL_BUFFER          = 4;
  6906. DXVA_INVERSE_QUANTIZATION_MATRIX_BUFFER = 5;
  6907. DXVA_SLICE_CONTROL_BUFFER               = 6;
  6908. DXVA_BITSTREAM_DATA_BUFFER              = 7;
  6909. DXVA_AYUV_BUFFER                        = 8;
  6910. DXVA_IA44_SURFACE_BUFFER                = 9;
  6911. DXVA_DPXD_SURFACE_BUFFER                = 10;
  6912. DXVA_HIGHLIGHT_BUFFER                   = 11;
  6913. DXVA_DCCMD_SURFACE_BUFFER               = 12;
  6914. DXVA_ALPHA_BLEND_COMBINATION_BUFFER     = 13;
  6915. DXVA_PICTURE_RESAMPLE_BUFFER            = 14;
  6916. DXVA_READ_BACK_BUFFER                   = 15;
  6917.  
  6918. DXVA_NUM_TYPES_COMP_BUFFERS             = 16;
  6919.  
  6920. // values for bDXVA_Func
  6921. DXVA_PICTURE_DECODING_FUNCTION        = 1;
  6922. DXVA_ALPHA_BLEND_DATA_LOAD_FUNCTION   = 2;
  6923. DXVA_ALPHA_BLEND_COMBINATION_FUNCTION = 3;
  6924. DXVA_PICTURE_RESAMPLE_FUNCTION        = 4;
  6925.  
  6926. // values returned from Execute command in absence of read-back
  6927. DXVA_EXECUTE_RETURN_OK                 = 0;
  6928. DXVA_EXECUTE_RETURN_DATA_ERROR_MINOR   = 1;
  6929. DXVA_EXECUTE_RETURN_DATA_ERROR_SIGNIF  = 2;
  6930. DXVA_EXECUTE_RETURN_DATA_ERROR_SEVERE  = 3;
  6931. DXVA_EXECUTE_RETURN_OTHER_ERROR_SEVERE = 4;
  6932.  
  6933.  
  6934. //#pragma pack(push, BeforeDXVApacking, 1)
  6935.  
  6936. type
  6937. TDXVA_ConnectMode = record
  6938.    guidMode        : TGUID;
  6939.    wRestrictedMode : WORD;
  6940.    end;
  6941. PDXVA_ConnectMode = ^TDXVA_ConnectMode;
  6942.  
  6943. TDXVA_ConfigQueryOrReplyFunc  = DWORD;
  6944. PDXVA_ConfigQueryOrReplyFunc = ^DWORD;
  6945.  
  6946. const
  6947. DXVA_QUERYORREPLYFUNCFLAG_DECODER_PROBE_QUERY    = $FFFFF1;
  6948. DXVA_QUERYORREPLYFUNCFLAG_DECODER_LOCK_QUERY     = $FFFFF5;
  6949. DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_COPY    = $FFFFF8;
  6950. DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_PLUS    = $FFFFF9;
  6951. DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_OK_COPY     = $FFFFFC;
  6952. DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_FALSE_PLUS = $FFFFFB;
  6953. DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_FALSE_PLUS  = $FFFFFF;
  6954.  
  6955. {
  6956. #define readDXVA_QueryOrReplyFuncFlag(ptr)        ((*(ptr)) >> 8)
  6957. #define readDXVA_QueryOrReplyFuncFlag_ACCEL(ptr)  (((*(ptr)) >> 11) & 1)
  6958. #define readDXVA_QueryOrReplyFuncFlag_LOCK(ptr)   (((*(ptr)) >> 10) & 1)
  6959. #define readDXVA_QueryOrReplyFuncFlag_BAD(ptr)    (((*(ptr)) >>  9) & 1)
  6960. #define readDXVA_QueryOrReplyFuncFlag_PLUS(ptr)   (((*(ptr)) >>  8) & 1)
  6961. #define readDXVA_QueryOrReplyFuncFunc(ptr)        ((*(ptr)) & 0xFF)
  6962. #define writeDXVA_QueryOrReplyFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  6963. #define setDXVA_QueryOrReplyFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  6964. #define setDXVA_QueryOrReplyFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  6965. }
  6966.  
  6967. type
  6968. TDXVA_EncryptProtocolFunc = DWORD;
  6969. PDXVA_EncryptProtocolFunc = ^DWORD;
  6970.  
  6971. const
  6972. DXVA_ENCRYPTPROTOCOLFUNCFLAG_HOST  = $FFFF00;
  6973. DXVA_ENCRYPTPROTOCOLFUNCFLAG_ACCEL = $FFFF08;
  6974.  
  6975. {
  6976. #define readDXVA_EncryptProtocolFuncFlag(ptr)        ((*(ptr)) >> 8)
  6977. #define readDXVA_EncryptProtocolFuncFlag_ACCEL(ptr)  (((*(ptr)) >> 11) & 1)
  6978. #define readDXVA_EncryptProtocolFuncFunc(ptr)        ((*(ptr)) & 0xFF)
  6979. #define writeDXVA_EncryptProtocolFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  6980. #define setDXVA_EncryptProtocolFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  6981. #define setDXVA_EncryptProtocolFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  6982. }
  6983.  
  6984. type
  6985. TDXVA_EncryptProtocolHeader = record
  6986.      dwFunction          : TDXVA_EncryptProtocolFunc;
  6987.  
  6988.      ReservedBits        : array [0..2] of LongWord;
  6989.  
  6990.      guidEncryptProtocol : TGUID;
  6991.  
  6992.      end;
  6993.  
  6994. PDXVA_EncryptProtocolHeader = ^TDXVA_EncryptProtocolHeader;
  6995.  
  6996. TDXVA_ConfigPictureDecode = record
  6997.   // Operation Indicated
  6998.   dwFunction: TDXVA_ConfigQueryOrReplyFunc;
  6999.   // Alignment
  7000.   dwReservedBits : array[0..2] of DWORD;
  7001.   // Encryption GUIDs
  7002.   guidConfigBitstreamEncryption  : TGUID;
  7003.   guidConfigMBcontrolEncryption  : TGUID;
  7004.   guidConfigResidDiffEncryption  : TGUID;
  7005.   // Bitstream Processing Indicator
  7006.   bConfigBitstreamRaw            : BYTE;
  7007.   // Macroblock Control Config
  7008.   bConfigMBcontrolRasterOrder    : BYTE;
  7009.   // Host Resid Diff Config
  7010.   bConfigResidDiffHost           : BYTE;
  7011.   bConfigSpatialResid8           : BYTE;
  7012.   bConfigResid8Subtraction       : BYTE;
  7013.   bConfigSpatialHost8or9Clipping : BYTE;
  7014.   bConfigSpatialResidInterleaved : BYTE;
  7015.   bConfigIntraResidUnsigned      : BYTE;
  7016.   // Accelerator Resid Diff Config
  7017.   bConfigResidDiffAccelerator    : BYTE;
  7018.   bConfigHostInverseScan         : BYTE;
  7019.   bConfigSpecificIDCT            : BYTE;
  7020.   bConfig4GroupedCoefs           : BYTE;
  7021.   end;
  7022. PDXVA_ConfigPictureDecode = ^TDXVA_ConfigPictureDecode;
  7023.  
  7024.  
  7025. // Picture Decoding Parameters
  7026.  
  7027. TDXVA_PictureParameters = record
  7028.      wDecodedPictureIndex          : WORD;
  7029.  
  7030.      wDeblockedPictureIndex        : WORD;
  7031.  
  7032.      wForwardRefPictureIndex       : WORD;
  7033.  
  7034.      wBackwardRefPictureIndex      : WORD;
  7035.  
  7036.      wPicWidthInMBminus1           : WORD;
  7037.  
  7038.      wPicHeightInMBminus1          : WORD;
  7039.  
  7040.      bMacroblockWidthMinus1        : BYTE;
  7041.  
  7042.      bMacroblockHeightMinus1       : BYTE;
  7043.  
  7044.      bBlockWidthMinus1             : BYTE;
  7045.  
  7046.      bBlockHeightMinus1            : BYTE;
  7047.  
  7048.      bBPPminus1                    : BYTE;
  7049.  
  7050.      bPicStructure                 : BYTE;
  7051.  
  7052.      bSecondField                  : BYTE;
  7053.  
  7054.      bPicIntra                     : BYTE;
  7055.  
  7056.      bPicBackwardPrediction        : BYTE;
  7057.  
  7058.      bBidirectionalAveragingMode   : BYTE;
  7059.  
  7060.      bMVprecisionAndChromaRelation : BYTE;
  7061.  
  7062.      bChromaFormat                 : BYTE;
  7063.  
  7064.      bPicScanFixed                 : BYTE;
  7065.  
  7066.      bPicScanMethod                : BYTE;
  7067.  
  7068.      bPicReadbackRequests          : BYTE;
  7069.  
  7070.      bRcontrol                     : BYTE;
  7071.  
  7072.      bPicSpatialResid8             : BYTE;
  7073.  
  7074.      bPicOverflowBlocks            : BYTE;
  7075.  
  7076.      bPicExtrapolation             : BYTE;
  7077.  
  7078.      bPicDeblocked                 : BYTE;
  7079.  
  7080.      bPicDeblockConfined           : BYTE;
  7081.  
  7082.      bPic4MVallowed                : BYTE;
  7083.  
  7084.      bPicOBMC                      : BYTE;
  7085.  
  7086.      bPicBinPB                     : BYTE;
  7087.  
  7088.      bMV_RPS                       : BYTE;
  7089.  
  7090.      bReservedBits                 : BYTE;
  7091.  
  7092.      wBitstreamFcodes              : WORD;
  7093.  
  7094.      wBitstreamPCEelements         : WORD;
  7095.  
  7096.      bBitstreamConcealmentNeed     : BYTE;
  7097.  
  7098.      bBitstreamConcealmentMethod   : BYTE;
  7099.  
  7100.      end;
  7101.  
  7102. PDXVA_PictureParameters = ^TDXVA_PictureParameters;
  7103.  
  7104. // Picture Resampling
  7105. TDXVA_PicResample = record
  7106.      wPicResampleSourcePicIndex  : WORD;
  7107.  
  7108.      wPicResampleDestPicIndex    : WORD;
  7109.  
  7110.      wPicResampleRcontrol        : WORD;
  7111.  
  7112.      bPicResampleExtrapWidth     : BYTE;
  7113.  
  7114.      bPicResampleExtrapHeight    : BYTE;
  7115.  
  7116.      dwPicResampleSourceWidth    : DWORD;
  7117.  
  7118.      dwPicResampleSourceHeight   : DWORD;
  7119.  
  7120.      dwPicResampleDestWidth      : DWORD;
  7121.  
  7122.      dwPicResampleDestHeight     : DWORD;
  7123.  
  7124.      dwPicResampleFullDestWidth  : DWORD;
  7125.  
  7126.      dwPicResampleFullDestHeight : DWORD;
  7127.  
  7128.      end;
  7129.  
  7130. PDXVA_PicResample = ^TDXVA_PicResample;
  7131.  
  7132. const
  7133. DXVA_CHROMA_FORMAT_420 = 1;
  7134. DXVA_CHROMA_FORMAT_422 = 2;
  7135. DXVA_CHROMA_FORMAT_444 = 3;
  7136.  
  7137. DXVA_PICTURE_STRUCTURE_TOP_FIELD    = 1;
  7138. DXVA_PICTURE_STRUCTURE_BOTTOM_FIELD = 2;
  7139. DXVA_PICTURE_STRUCTURE_FRAME        = 3;
  7140.  
  7141. DXVA_BIDIRECTIONAL_AVERAGING_MPEG2_ROUND = 0;
  7142. DXVA_BIDIRECTIONAL_AVERAGING_H263_TRUNC  = 1;
  7143.  
  7144. DXVA_MV_PRECISION_AND_CHROMA_RELATION_MPEG2 = 0;
  7145. DXVA_MV_PRECISION_AND_CHROMA_RELATION_H263  = 1;
  7146. DXVA_MV_PRECISION_AND_CHROMA_RELATION_H261  = 2;
  7147.  
  7148. DXVA_SCAN_METHOD_ZIG_ZAG              = 0;
  7149. DXVA_SCAN_METHOD_ALTERNATE_VERTICAL   = 1;
  7150. DXVA_SCAN_METHOD_ALTERNATE_HORIZONTAL = 2;
  7151. DXVA_SCAN_METHOD_ARBITRARY            = 3;
  7152.  
  7153. DXVA_BITSTREAM_CONCEALMENT_NEED_UNLIKELY = 0;
  7154. DXVA_BITSTREAM_CONCEALMENT_NEED_MILD     = 1;
  7155. DXVA_BITSTREAM_CONCEALMENT_NEED_LIKELY   = 2;
  7156. DXVA_BITSTREAM_CONCEALMENT_NEED_SEVERE   = 3;
  7157.  
  7158. DXVA_BITSTREAM_CONCEALMENT_METHOD_UNSPECIFIED = 0;
  7159. DXVA_BITSTREAM_CONCEALMENT_METHOD_INTRA       = 1;
  7160. DXVA_BITSTREAM_CONCEALMENT_METHOD_FORWARD     = 2;
  7161. DXVA_BITSTREAM_CONCEALMENT_METHOD_BACKWARD    = 3;
  7162.  
  7163.  
  7164. // Buffer Description Data
  7165. Type
  7166. TDXVA_BufferDescription = record
  7167.  
  7168.      dwTypeIndex      : DWORD;
  7169.  
  7170.      dwBufferIndex    : DWORD;
  7171.  
  7172.      dwDataOffset     : DWORD;
  7173.  
  7174.      dwDataSize       : DWORD;
  7175.  
  7176.      dwFirstMBaddress : DWORD;
  7177.  
  7178.      dwNumMBsInBuffer : DWORD;
  7179.  
  7180.      dwWidth          : DWORD;
  7181.  
  7182.      dwHeight         : DWORD;
  7183.  
  7184.      dwStride         : DWORD;
  7185.  
  7186.      dwReservedBits   : DWORD;
  7187.  
  7188.      end;
  7189.  
  7190. PDXVA_BufferDescription = ^TDXVA_BufferDescription;
  7191.  
  7192.  
  7193. // Off-Host IDCT Coefficient Data Structures
  7194.  
  7195. TDXVA_TCoef4Group = record
  7196.      TCoefIDX   : array [0..3] of BYTE;
  7197.  
  7198.      TCoefValue : array [0..3] of smallint;
  7199.  
  7200.      end;
  7201.  
  7202. PDXVA_TCoef4Group = ^TDXVA_TCoef4Group;
  7203.  
  7204.  
  7205. TDXVA_TCoefSingle = record
  7206.  
  7207.      wIndexWithEOB : WORD;
  7208.  
  7209.      TCoefValue    : smallint;
  7210.  
  7211.      end;
  7212.  
  7213. PDXVA_TCoefSingle = ^TDXVA_TCoefSingle;
  7214.  
  7215. // Macros for Reading EOB and Index Values
  7216. {
  7217. #define readDXVA_TCoefSingleIDX(ptr) ((ptr)->wIndexWithEOB >> 1)
  7218. #define readDXVA_TCoefSingleEOB(ptr) ((ptr)->wIndexWithEOB & 1)
  7219. }
  7220. // Macro for Writing EOB and Index Values
  7221. {
  7222. #define writeDXVA_TCoefSingleIndexWithEOB(ptr, idx, eob) ((ptr)->wIndexWithEOB = ((idx) << 1) | (eob))
  7223. #define setDXVA_TCoefSingleIDX(ptr, idx) ((ptr)->wIndexWithEOB |= ((idx) << 1))
  7224. #define setDXVA_TCoefSingleEOB(ptr)      ((ptr)->wIndexWithEOB |= 1)
  7225. }
  7226. // Spatial-Domain Residual Difference Blocks
  7227. const
  7228. DXVA_USUAL_BLOCK_WIDTH  = 8;
  7229. DXVA_USUAL_BLOCK_HEIGHT = 8;
  7230. DXVA_USUAL_BLOCK_SIZE   = (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT);
  7231.  
  7232. type
  7233. TDXVA_Sample16 = array[0..DXVA_USUAL_BLOCK_SIZE-1] of smallint;
  7234. TDXVA_Sample8  = array[0..DXVA_USUAL_BLOCK_SIZE-1] of Shortint;
  7235.  
  7236. // Deblocking Filter Control Structure
  7237. TDXVA_DeblockingEdgeControl = BYTE;
  7238. PDXVA_DeblockingEdgeControl= ^BYTE;
  7239.  
  7240. // Macros for Reading STRENGTH and FilterOn
  7241. {
  7242. #define readDXVA_EdgeFilterStrength(ptr) ((*(ptr)) >> 1)
  7243. #define readDXVA_EdgeFilterOn(ptr)       ((*(ptr)) & 1)
  7244. }
  7245. // Macro for Writing STRENGTH and FilterOn
  7246. {
  7247. #define writeDXVA_DeblockingEdgeControl(ptr, str, fon) ((*(ptr)) = ((str) << 1) | (fon))
  7248. #define setDXVA_EdgeFilterStrength(ptr, str)           ((*(ptr)) |= ((str) << 1))
  7249. #define setDXVA_EdgeFilterOn(ptr)                      ((*(ptr)) |= 1)
  7250. }
  7251.  
  7252. // Macroblock Control Command Data Structures */
  7253. TDXVA_MVvalue = record
  7254.      horz,vert : smallint;
  7255.  
  7256.      end;
  7257.  
  7258. PDXVA_MVvalue = ^TDXVA_MVvalue;
  7259.  
  7260. // Inverse Quantization Matrices
  7261. TDXVA_QmatrixData = record
  7262.      bNewQmatrix : array [0..3] of BYTE;
  7263.  
  7264.      (* intra Y, inter Y, intra chroma, inter chroma *)
  7265.  
  7266.      Qmatrix : array [0..3,0..(DXVA_USUAL_BLOCK_WIDTH*DXVA_USUAL_BLOCK_HEIGHT)-1] of WORD;
  7267.  
  7268.      end;
  7269.  
  7270. PDXVA_QmatrixData = ^TDXVA_QmatrixData;
  7271.  
  7272. // Slice Control Buffer Data
  7273. TDXVA_SliceInfo = record
  7274.      wHorizontalPosition : WORD;
  7275.  
  7276.      wVerticalPosition : WORD;
  7277.  
  7278.      dwSliceBitsInBuffer : LongWord;
  7279.  
  7280.      dwSliceDataLocation : LongWord;
  7281.  
  7282.      bStartCodeBitOffset : BYTE;
  7283.  
  7284.      bReservedBits : BYTE;
  7285.  
  7286.      wMBbitOffset : WORD;
  7287.  
  7288.      wNumberMBsInSlice : WORD;
  7289.  
  7290.      wQuantizerScaleCode : WORD;
  7291.  
  7292.      wBadSliceChopping : WORD;
  7293.  
  7294.      end;
  7295.  
  7296. PDXVA_SliceInfo = ^TDXVA_SliceInfo;
  7297.  
  7298. const
  7299. DXVA_NumMV_OBMC_off_BinPBwith4MV_off = 4;
  7300. DXVA_NumMV_OBMC_off_BinPBwith4MV_on  = (4+1);
  7301. DXVA_NumMV_OBMC_on__BinPB_off        = (10);
  7302. DXVA_NumMV_OBMC_on__BinPB_on         = (11); // not current standards
  7303.  
  7304. DXVA_NumBlocksPerMB_420 = (4+2+0);
  7305. DXVA_NumBlocksPerMB_422 = (4+2+2);
  7306. DXVA_NumBlocksPerMB_444 = (4+4+4);
  7307.  
  7308. // Basic form for I pictures 
  7309. // Host Residual Differences
  7310. type
  7311. TDXVA_MBctrl_I_HostResidDiff_1 = record
  7312.      wMBaddress : WORD;
  7313.  
  7314.      wMBtype : WORD;
  7315.  
  7316.      dwMB_SNL : LongWord;
  7317.  
  7318.      wPatternCode : WORD;
  7319.  
  7320.      wPC_Overflow : WORD;
  7321.  
  7322.      // zero if not overflow format
  7323.  
  7324.      dwReservedBits2 : LongWord;
  7325.  
  7326.      end;
  7327.  
  7328. // Basic form for I pictures
  7329. // Off-Host IDCT, 4:2:0 sampling
  7330. TDXVA_MBctrl_I_OffHostIDCT_1 = record
  7331.      wMBaddress : WORD;
  7332.  
  7333.      wMBtype : WORD;
  7334.  
  7335.      dwMB_SNL : LongWord;
  7336.  
  7337.      wPatternCode : WORD;
  7338.  
  7339.      bNumCoef : array [0..DXVA_NumBlocksPerMB_420-1] of BYTE;
  7340.  
  7341.      end;
  7342.  
  7343. // Basic form for P and B pictures
  7344. // Should also be used for concealment MVs in MPEG-2 I pictures
  7345. // Without OBMC, without BinPB and 4MV together, without MV RPS
  7346. // Host Residual Differences
  7347. TDXVA_MBctrl_P_HostResidDiff_1 = record
  7348.      wMBaddress : WORD;
  7349.  
  7350.      wMBtype : WORD;
  7351.  
  7352.      dwMB_SNL : LongWord;
  7353.  
  7354.      wPatternCode : WORD;
  7355.  
  7356.      wPC_Overflow : WORD;
  7357.  
  7358.      // zero if not overflow format
  7359.  
  7360.      dwReservedBits2 : LongWord;
  7361.  
  7362.      MVector : array [0..DXVA_NumMV_OBMC_off_BinPBwith4MV_off-1] of TDXVA_MVvalue;
  7363.  
  7364.      end;
  7365.  
  7366. // Basic form for P and B pictures
  7367. // Without OBMC, without BinPB and 4MV together, without MV RPS
  7368. // Off-Host IDCT, 4:2:0 sampling
  7369. TDXVA_MBctrl_P_OffHostIDCT_1 = record
  7370.      wMBaddress : WORD;
  7371.  
  7372.      wMBtype : WORD;
  7373.  
  7374.      dwMB_SNL : LongWord;
  7375.  
  7376.      wPatternCode : WORD;
  7377.  
  7378.      bNumCoef : array [0..DXVA_NumBlocksPerMB_420-1] of BYTE;
  7379.  
  7380.      MVector : array [0..DXVA_NumMV_OBMC_off_BinPBwith4MV_off-1] of TDXVA_MVvalue;
  7381.  
  7382.      end;
  7383.  
  7384. // How to load alpha blending graphic data
  7385. TDXVA_ConfigAlphaLoad = record
  7386.   // Operation Indicated
  7387.   dwFunction: TDXVA_ConfigQueryOrReplyFunc ;
  7388.   // Alignment
  7389.   dwReservedBits: array[0..2] of DWORD;
  7390.   bConfigDataType: BYTE;
  7391.   end;
  7392. PDXVA_ConfigAlphaLoad = ^TDXVA_ConfigAlphaLoad;
  7393.  
  7394. const
  7395. DXVA_CONFIG_DATA_TYPE_IA44 = 0;
  7396. DXVA_CONFIG_DATA_TYPE_AI44 = 1;
  7397. DXVA_CONFIG_DATA_TYPE_DPXD = 2;
  7398. DXVA_CONFIG_DATA_TYPE_AYUV = 3;
  7399.  
  7400.  
  7401. // How to combine alpha blending graphic data
  7402. type
  7403. TDXVA_ConfigAlphaCombine = record
  7404.   // Operation Indicated
  7405.   dwFunction: TDXVA_ConfigQueryOrReplyFunc;
  7406.   // Alignment
  7407.   dwReservedBits: array[0..2] of DWORD;
  7408.   bConfigBlendType: BYTE;
  7409.   bConfigPictureResizing: BYTE;
  7410.   bConfigOnlyUsePicDestRectArea: BYTE;
  7411.   bConfigGraphicResizing: BYTE;
  7412.   bConfigWholePlaneAlpha: BYTE;
  7413.   end;
  7414. PDXVA_ConfigAlphaCombine = ^TDXVA_ConfigAlphaCombine;
  7415.  
  7416. const
  7417. DXVA_CONFIG_BLEND_TYPE_FRONT_BUFFER  = 0;
  7418. DXVA_CONFIG_BLEND_TYPE_BACK_HARDWARE = 1;
  7419.  
  7420. // AYUV sample for 16-entry YUV palette or graphic surface
  7421. type
  7422. TDXVA_AYUVsample = record
  7423.    bSampleAlpha8, bY_Value, bCbValue, bCrValue: BYTE;
  7424.    end;
  7425. PDXVA_AYUVsample = ^TDXVA_AYUVsample;
  7426.  
  7427. // Macros for IA44 alpha blending surface samples
  7428. DXVA_IA44sample   = BYTE;
  7429. PDXVA_IA44sample = ^BYTE;
  7430.  
  7431. {
  7432. #define readDXVA_IA44index(ptr) (((*(ptr)) & 0xF0) >> 4)
  7433. #define readDXVA_IA44alpha(ptr)  ((*(ptr)) & 0x0F)
  7434. #define writeDXVA_IA44(ptr, idx, alpha) ((*(ptr)) = (((idx) << 4) | (alpha)))
  7435. #define setDXVA_IA44index(ptr, idx)    ((*(ptr)) |= ((idx) << 4))
  7436. #define setDXVA_IA44alpha(ptr, alpha)  ((*(ptr)) |= (alpha))
  7437. }
  7438. // Macros for AI44 alpha blending surface samples
  7439. DXVA_AI44sample   = BYTE;
  7440. PDXVA_AI44sample = ^BYTE;
  7441. {
  7442. #define readDXVA_AI44index(ptr)  ((*(ptr)) & 0x0F)
  7443. #define readDXVA_AI44alpha(ptr) (((*(ptr)) & 0xF0) >> 4)
  7444. #define writeDXVA_AI44(ptr, idx, alpha) ((*(ptr)) = (((alpha) << 4) | (idx)))
  7445. #define setDXVA_AI44index(ptr, idx)    ((*(ptr)) |= (idx))
  7446. #define setDXVA_AI44alpha(ptr, alpha)  ((*(ptr)) |= ((alpha) << 4))
  7447. }
  7448.  
  7449. // Highlight data structure
  7450. TDXVA_Highlight = record
  7451.      wHighlightActive : WORD;
  7452.  
  7453.      wHighlightIndices : WORD;
  7454.  
  7455.      wHighlightAlphas : WORD;
  7456.  
  7457.      HighlightRect : TRect;
  7458.  
  7459.      end;
  7460.  
  7461. PDXVA_Highlight = ^TDXVA_Highlight;
  7462.  
  7463. DXVA_DPXD    = BYTE;
  7464. PDXVA_DPXD  = ^BYTE;
  7465. DXVA_DCCMD   = WORD;
  7466. PDXVA_DCCMD = ^WORD;
  7467.  
  7468. // Alpha blend combination
  7469. TDXVA_BlendCombination = record
  7470.   wPictureSourceIndex      : WORD;
  7471.   wBlendedDestinationIndex : WORD;
  7472.   PictureSourceRect16thPel : TRECT;
  7473.   PictureDestinationRect   : TRECT;
  7474.   GraphicSourceRect        : TRECT;
  7475.   GraphicDestinationRect   : TRECT;
  7476.   wBlendDelay              : WORD;
  7477.   bBlendOn                 : BYTE;
  7478.   bWholePlaneAlpha         : BYTE;
  7479.   OutsideYUVcolor          : TDXVA_AYUVsample;
  7480.   end;
  7481. PDXVA_BlendCombination = ^TDXVA_BlendCombination;
  7482.  
  7483.  
  7484. // Encryption Protocol #1 Data Structure
  7485. const
  7486. DXVA_MAX_URIsize = 1024;
  7487.  
  7488. type
  7489. TDXVA_EncryptProt1Data_Sign512_Accel512 = record
  7490.      header : TDXVA_EncryptProtocolHeader;
  7491.  
  7492.      dwSigningModulusSize : LongWord;           // equal to 64
  7493.  
  7494.      SigningModulusValue : array [0..63] of BYTE;
  7495.  
  7496.      dwSigningExponentSize : LongWord;          // equal to 64
  7497.  
  7498.      SigningExponentValue : array [0..63] of BYTE;
  7499.  
  7500.      dwAccelModulusSize : LongWord;             // equal to 64
  7501.  
  7502.      AccelModulusValue : array [0..63] of BYTE;
  7503.  
  7504.      dwAccelExponentSize : LongWord;            // equal to 64
  7505.  
  7506.      AccelExponentValue : array [0..63] of BYTE;
  7507.  
  7508.      dwEncryptionFrequency : LongWord;
  7509.  
  7510.      dwURIsize : LongWord;
  7511.  
  7512.      URIstring : array [0..DXVA_MAX_URIsize-1] of WideChar;
  7513.  
  7514.      Signature : array [0..63] of BYTE;
  7515.  
  7516.      end;
  7517. PDXVA_EncryptProt1Data_Sign512_Accel512 = ^TDXVA_EncryptProt1Data_Sign512_Accel512;
  7518.  
  7519. //#pragma pack(push, 16)
  7520.  
  7521. PDXVA_MBctrl_I_HostResidDiff_1 = ^TDXVA_MBctrl_I_HostResidDiff_1;
  7522. PDXVA_MBctrl_I_OffHostIDCT_1   = ^TDXVA_MBctrl_I_OffHostIDCT_1;
  7523. PDXVA_MBctrl_P_HostResidDiff_1 = ^TDXVA_MBctrl_P_HostResidDiff_1;
  7524. PDXVA_MBctrl_P_OffHostIDCT_1   = ^TDXVA_MBctrl_P_OffHostIDCT_1;
  7525.  
  7526. //#pragma pack(pop)
  7527.  
  7528. //
  7529. // Other forms of pictures are constructed in the obvious way
  7530. // from the above by adjusting the number of residual difference
  7531. // blocks, the number of motion vectors per macroblock, etc.
  7532. //
  7533. {
  7534. #define readDXVA_MBskipsFollowing(ptr)       (((ptr)->dwMB_SNL & 0xFF000000) >> 24)
  7535. #define readDXVA_MBdataLocation(ptr)         (((ptr)->dwMB_SNL & 0x00FFFFFF))
  7536.  
  7537. #define writeDXVA_MB_SNL(ptr, skips, dloc)   ((ptr)->dwMB_SNL = (((skips) << 24) | (dloc)))
  7538. #define setDXVA_MBskipsFollowing(ptr, skips) ((ptr)->dwMB_SNL |= ((skips) << 24))
  7539. #define setDXVA_MBdataLocation(ptr, dloc)    ((ptr)->dwMB_SNL |= (dloc))
  7540.  
  7541. #define readDXVA_MvertFieldSel_3(ptr)    (((ptr)->wMBtype & 0x8000) >> 15)
  7542. #define readDXVA_MvertFieldSel_2(ptr)    (((ptr)->wMBtype & 0x4000) >> 14)
  7543. #define readDXVA_MvertFieldSel_1(ptr)    (((ptr)->wMBtype & 0x2000) >> 13)
  7544. #define readDXVA_MvertFieldSel_0(ptr)    (((ptr)->wMBtype & 0x1000) >> 12)
  7545. #define readDXVA_ReservedBits(ptr)       (((ptr)->wMBtype & 0x0800) >> 11)
  7546. #define readDXVA_HostResidDiff(ptr)      (((ptr)->wMBtype & 0x0400) >> 10)
  7547. #define readDXVA_MotionType(ptr)         (((ptr)->wMBtype & 0x0300) >>  8)
  7548. #define readDXVA_MBscanMethod(ptr)       (((ptr)->wMBtype & 0x00C0) >>  6)
  7549. #define readDXVA_FieldResidual(ptr)      (((ptr)->wMBtype & 0x0020) >>  5)
  7550. #define readDXVA_H261LoopFilter(ptr)     (((ptr)->wMBtype & 0x0010) >>  4)
  7551. #define readDXVA_Motion4MV(ptr)          (((ptr)->wMBtype & 0x0008) >>  3)
  7552. #define readDXVA_MotionBackward(ptr)     (((ptr)->wMBtype & 0x0004) >>  2)
  7553. #define readDXVA_MotionForward(ptr)      (((ptr)->wMBtype & 0x0002) >>  1)
  7554. #define readDXVA_IntraMacroblock(ptr)    (((ptr)->wMBtype & 0x0001))
  7555.  
  7556. #define setDXVA_MvertFieldSel_3(ptr)     ((ptr)->wMBtype |= 0x8000)
  7557. #define setDXVA_MvertFieldSel_2(ptr)     ((ptr)->wMBtype |= 0x4000)
  7558. #define setDXVA_MvertFieldSel_1(ptr)     ((ptr)->wMBtype |= 0x2000)
  7559. #define setDXVA_MvertFieldSel_0(ptr)     ((ptr)->wMBtype |= 0x1000)
  7560. #define setDXVA_ReservedBits(ptr)        ((ptr)->wMBtype |= 0x0800)
  7561. #define setDXVA_HostResidDiff(ptr)       ((ptr)->wMBtype |= 0x0400)
  7562. #define setDXVA_MotionType(ptr, value)   ((ptr)->wMBtype |= ((value) << 8))
  7563. #define setDXVA_MBscanMethod(ptr, value) ((ptr)->wMBtype |= ((value) << 6))
  7564. #define setDXVA_FieldResidual(ptr)       ((ptr)->wMBtype |= 0x0020)
  7565. #define setDXVA_H261LoopFilter(ptr)      ((ptr)->wMBtype |= 0x0010)
  7566. #define setDXVA_Motion4MV(ptr)           ((ptr)->wMBtype |= 0x0008)
  7567. #define setDXVA_MotionBackward(ptr)      ((ptr)->wMBtype |= 0x0004)
  7568. #define setDXVA_MotionForward(ptr)       ((ptr)->wMBtype |= 0x0002)
  7569. #define setDXVA_IntraMacroblock(ptr)     ((ptr)->wMBtype |= 0x0001)
  7570.  
  7571. #define readDXVA_Y___0coded(ptr)        (((ptr)->wPatternCode & 0x0800) >> 11)
  7572. #define readDXVA_Y___1coded(ptr)        (((ptr)->wPatternCode & 0x0400) >> 10)
  7573. #define readDXVA_Y___2coded(ptr)        (((ptr)->wPatternCode & 0x0200) >>  9)
  7574. #define readDXVA_Y___3coded(ptr)        (((ptr)->wPatternCode & 0x0100) >>  8)
  7575. #define readDXVA_Cb__4coded(ptr)        (((ptr)->wPatternCode & 0x0080) >>  7)
  7576. #define readDXVA_Cr__5coded(ptr)        (((ptr)->wPatternCode & 0x0040) >>  6)
  7577. #define readDXVA_Cb__6coded(ptr)        (((ptr)->wPatternCode & 0x0020) >>  5)
  7578. #define readDXVA_Cr__7coded(ptr)        (((ptr)->wPatternCode & 0x0010) >>  4)
  7579. #define readDXVA_Cb__8coded(ptr)        (((ptr)->wPatternCode & 0x0008) >>  3)
  7580. #define readDXVA_Cb__9coded(ptr)        (((ptr)->wPatternCode & 0x0004) >>  2)
  7581. #define readDXVA_Cr_10coded(ptr)        (((ptr)->wPatternCode & 0x0002) >>  1)
  7582. #define readDXVA_Cr_11coded(ptr)        (((ptr)->wPatternCode & 0x0001))
  7583.  
  7584. #define readDXVA_Y___0oflow(ptr)        (((ptr)->wPC_Overflow & 0x0800) >> 11)
  7585. #define readDXVA_Y___1oflow(ptr)        (((ptr)->wPC_Overflow & 0x0400) >> 10)
  7586. #define readDXVA_Y___2oflow(ptr)        (((ptr)->wPC_Overflow & 0x0200) >>  9)
  7587. #define readDXVA_Y___3oflow(ptr)        (((ptr)->wPC_Overflow & 0x0100) >>  8)
  7588. #define readDXVA_Cb__4oflow(ptr)        (((ptr)->wPC_Overflow & 0x0080) >>  7)
  7589. #define readDXVA_Cr__5oflow(ptr)        (((ptr)->wPC_Overflow & 0x0040) >>  6)
  7590. #define readDXVA_Cb__6oflow(ptr)        (((ptr)->wPC_Overflow & 0x0020) >>  5)
  7591. #define readDXVA_Cr__7oflow(ptr)        (((ptr)->wPC_Overflow & 0x0010) >>  4)
  7592. #define readDXVA_Cb__8oflow(ptr)        (((ptr)->wPC_Overflow & 0x0008) >>  3)
  7593. #define readDXVA_Cb__9oflow(ptr)        (((ptr)->wPC_Overflow & 0x0004) >>  2)
  7594. #define readDXVA_Cr_10oflow(ptr)        (((ptr)->wPC_Overflow & 0x0002) >>  1)
  7595. #define readDXVA_Cr_11oflow(ptr)        (((ptr)->wPC_Overflow & 0x0001))
  7596. }
  7597. //#pragma pack(pop, BeforeDXVApacking)
  7598.  
  7599. //------------------------------------------------------------------------------
  7600. // File: AMVA.h
  7601. // Desc: DirectShowMotionComp include file.
  7602. // Copyright (c) 1997 - 2000, Microsoft Corporation.  All rights reserved.
  7603. //------------------------------------------------------------------------------
  7604.  
  7605. const
  7606. AMVA_TYPEINDEX_OUTPUTFRAME = $FFFFFFFF;
  7607.  
  7608. //  Flags for QueryRenderStatus
  7609. AMVA_QUERYRENDERSTATUSF_READ = $00000001;  // Query for read
  7610.                                            // set this bit to 0
  7611.                                            // if query for update
  7612. type
  7613. TAMVAUncompBufferInfo = record
  7614.     dwMinNumSurfaces    : DWORD                   ; // IN   min number of surfaces to be allocated
  7615.     dwMaxNumSurfaces    : DWORD                   ; // IN   max number of surfaces to be allocated
  7616.     ddUncompPixelFormat : TDDPixelFormat          ; // IN   pixel format of surfaces to be allocated
  7617.     end;
  7618. PAMVAUncompBufferInfo = ^TAMVAUncompBufferInfo;
  7619.  
  7620. TAMVAUncompDataInfo = record
  7621.     dwUncompWidth       : DWORD                   ; // [in]     width of uncompressed data
  7622.     dwUncompHeight      : DWORD                   ; // [in]     height of uncompressed data
  7623.     ddUncompPixelFormat : TDDPixelFormat      ; // [in]     pixel-format of uncompressed data
  7624.     end;
  7625. PAMVAUncompDataInfo = ^TAMVAUncompDataInfo;
  7626.  
  7627. TAMVAInternalMemInfo = record
  7628.     dwScratchMemAlloc : DWORD ; // [out]    amount of scratch memory will the hal allocate for its private use
  7629.     end;
  7630. PAMVAInternalMemInfo = ^TAMVAInternalMemInfo;
  7631.  
  7632. TAMVACompBufferInfo = record
  7633.     dwNumCompBuffers  : DWORD                   ; // [out]    number of buffers reqd for compressed data
  7634.     dwWidthToCreate   : DWORD                   ; // [out]    Width of surface to create
  7635.     dwHeightToCreate  : DWORD                   ; // [out]    Height of surface to create
  7636.     dwBytesToAllocate : DWORD                   ; // [out]    Total number of bytes used by each surface
  7637.     ddCompCaps        : TDDSCAPS2               ; // [out]    caps to create surfaces to store compressed data
  7638.     ddPixelFormat     : TDDPixelFormat          ; // [out]    fourcc to create surfaces to store compressed data
  7639.     end;
  7640. PAMVACompBufferInfo = ^TAMVACompBufferInfo;
  7641.  
  7642. // Note that you are NOT allowed to store any pointer in pMiscData
  7643. TAMVABeginFrameInfo = record
  7644.     dwDestSurfaceIndex : DWORD   ; // IN  destination buffer in which to decoding this frame
  7645.     pInputData         : pointer ; // IN  pointer to misc data
  7646.     dwSizeInputData    : DWORD   ; // IN  size of other misc data to begin frame
  7647.     pOutputData        : pointer ; // OUT pointer to data which the VGA is going to fill
  7648.     dwSizeOutputData   : DWORD   ; // IN  size of data which the VGA is going to fill
  7649.     end;
  7650. PAMVABeginFrameInfo = ^TAMVABeginFrameInfo;
  7651.  
  7652. // Note that you are NOT allowed to store any pointer in pMiscData
  7653. TAMVAEndFrameInfo = record
  7654.     dwSizeMiscData : DWORD  ; // [in]     size of other misc data to begin frame
  7655.     pMiscData      : pointer; // [in]     pointer to misc data
  7656.     end;
  7657. PAMVAEndFrameInfo = ^TAMVAEndFrameInfo;
  7658.  
  7659. TAMVABUFFERINFO = record
  7660.     dwTypeIndex   : DWORD; // [in]    Type of buffer
  7661.     dwBufferIndex : DWORD; // [in]    Buffer index
  7662.     dwDataOffset  : DWORD; // [in]    offset of relevant data from the beginning of buffer
  7663.     dwDataSize    : DWORD; // [in]    size of relevant data
  7664.     end;
  7665. PAMVABUFFERINFO = ^TAMVABUFFERINFO;
  7666.  
  7667. //------------------------------------------------------------------------------
  7668. // File: videoacc.h
  7669. // Desc: DirectX Video Acceleration interfaces
  7670. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  7671. //------------------------------------------------------------------------------
  7672.  
  7673. const
  7674. IID_IAMVideoAcceleratorNotify : TGUID = '{256A6A21-FBAD-11d1-82BF-00A0C9696C8F}';
  7675. IID_IAMVideoAccelerator       : TGUID = '{256A6A22-FBAD-11d1-82BF-00A0C9696C8F}';
  7676.  
  7677. type
  7678.   IAMVideoAcceleratorNotify = interface(IUnknown)
  7679.     ['{256A6A21-FBAD-11d1-82BF-00A0C9696C8F}']
  7680.     // IAMVideoAcceleratorNotify methods
  7681.     function GetUncompSurfacesInfo(const pGuid: TGUID; var pUncompBufferInfo: PAMVAUncompBufferInfo): HRESULT; stdcall;
  7682.     function SetUncompSurfacesInfo(dwActualUncompSurfacesAllocated: DWORD): HRESULT; stdcall;
  7683.     function GetCreateVideoAcceleratorData(const pGuid: TGUID; out pdwSizeMiscData: PDWORD; out ppMiscData: pointer): HRESULT; stdcall;
  7684.     end;
  7685. //lookat
  7686.   IAMVideoAccelerator = interface(IUnknown)
  7687.     ['{256A6A22-FBAD-11d1-82BF-00A0C9696C8F}']
  7688.     // IAMVideoAccelerator methods
  7689.     function GetVideoAcceleratorGUIDs(var pdwNumGuidsSupported: PDWORD; var pGuidsSupported: PGUID): HRESULT; stdcall;
  7690.     function GetUncompFormatsSupported(const pGuid: TGUID; var pdwNumFormatsSupported: PDWORD;
  7691.              var pFormatsSupported: PDDPixelFormat): HRESULT; stdcall;
  7692.     function GetInternalMemInfo(const pGuid: TGUID; const pamvaUncompDataInfo: TAMVAUncompDataInfo;
  7693.              var pamvaInternalMemInfo: PAMVAInternalMemInfo): HRESULT; stdcall;
  7694.     function GetCompBufferInfo(const pGuid: TGUID; const pamvaUncompDataInfo: TAMVAUncompDataInfo ;
  7695.              var pdwNumTypesCompBuffers: PDWORD; out pamvaCompBufferInfo: PAMVACompBufferInfo): HRESULT; stdcall;
  7696.     function GetInternalCompBufferInfo(var pdwNumTypesCompBuffers: PDWORD; out pamvaCompBufferInfo: PAMVACompBufferInfo): HRESULT; stdcall;
  7697.     function BeginFrame(const amvaBeginFrameInfo: TAMVABeginFrameInfo): HRESULT; stdcall;
  7698.     function EndFrame(const pEndFrameInfo: TAMVAEndFrameInfo): HRESULT; stdcall;
  7699.     function GetBuffer(dwTypeIndex, dwBufferIndex: DWORD; bReadOnly: BOOL; out ppBuffer; out lpStride: LONGINT): HRESULT; stdcall;
  7700.     function ReleaseBuffer(dwTypeIndex, dwBufferIndex: DWORD): HRESULT; stdcall;
  7701.     function Execute(dwFunction: DWORD; lpPrivateInputData : pointer; cbPrivateInputData: DWORD;
  7702.              lpPrivateOutputDat: pointer; cbPrivateOutputData, dwNumBuffers: DWORD;
  7703.              const pamvaBufferInfo: TAMVABUFFERINFO): HRESULT; stdcall;
  7704.     function QueryRenderStatus(dwTypeIndex, dwBufferIndex, dwFlags: DWORD): HRESULT; stdcall;
  7705.     function DisplayFrame(dwFlipToIndex: DWORD; pMediaSample: IMediaSample): HRESULT; stdcall;
  7706.     end;
  7707.  
  7708. //------------------------------------------------------------------------------
  7709. // File: BDATypes.h
  7710. //
  7711. // Desc: Typedefs and enums needed by both the WDM drivers and the user mode
  7712. //       COM interfaces.
  7713. //
  7714. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  7715. //------------------------------------------------------------------------------
  7716.  
  7717.  
  7718. // Utility Macros
  7719. const
  7720. MIN_DIMENSION = 1;
  7721. NATURAL       = 4;
  7722. CACHE_LINE    = 128;
  7723. PAGE          = 4096;
  7724. //#define ALIGN( pointer, size) (((ULONG)(pointer) + (ULONG)(size) - 1) & ~((ULONG)(size) - 1))
  7725. //#define BDA_STRING_CONST(x)   {sizeof(L##x)-2, sizeof(L##x), L##x}
  7726.  
  7727. //===========================================================================
  7728. //
  7729. //  BDA Topology Structures
  7730. //
  7731. //===========================================================================
  7732. type
  7733.   PBDA_TEMPLATE_CONNECTION = ^TBDA_TEMPLATE_CONNECTION;
  7734.   TBDA_TEMPLATE_CONNECTION = record
  7735.     FromNodeType    : ULONG;
  7736.     FromNodePinType : ULONG;
  7737.     ToNodeType      : ULONG;
  7738.     ToNodePinType   : ULONG;
  7739.   end;
  7740.  
  7741.   PBDA_TEMPLATE_PIN_JOINT = ^TBDA_TEMPLATE_PIN_JOINT;
  7742.   TBDA_TEMPLATE_PIN_JOINT = record
  7743.     uliTemplateConnection : ULONG;
  7744.     ulcInstancesMax       : ULONG;
  7745.   end;
  7746.  
  7747.  
  7748. //===========================================================================
  7749. //  BDA Events
  7750. //===========================================================================
  7751. //  In-band Event IDs
  7752.   PBDA_EVENT_ID = ^TBDA_EVENT_ID;
  7753.   TBDA_EVENT_ID = (
  7754.     BDA_EVENT_SIGNAL_LOSS,
  7755.     BDA_EVENT_SIGNAL_LOCK,
  7756.     BDA_EVENT_DATA_START,
  7757.     BDA_EVENT_DATA_STOP,
  7758.     BDA_EVENT_CHANNEL_ACQUIRED,
  7759.     BDA_EVENT_CHANNEL_LOST,
  7760.     BDA_EVENT_CHANNEL_SOURCE_CHANGED,
  7761.     BDA_EVENT_CHANNEL_ACTIVATED,
  7762.     BDA_EVENT_CHANNEL_DEACTIVATED,
  7763.     BDA_EVENT_SUBCHANNEL_ACQUIRED,
  7764.     BDA_EVENT_SUBCHANNEL_LOST,
  7765.     BDA_EVENT_SUBCHANNEL_SOURCE_CHANGED,
  7766.     BDA_EVENT_SUBCHANNEL_ACTIVATED,
  7767.     BDA_EVENT_SUBCHANNEL_DEACTIVATED,
  7768.     BDA_EVENT_ACCESS_GRANTED,
  7769.     BDA_EVENT_ACCESS_DENIED,
  7770.     BDA_EVENT_OFFER_EXTENDED,
  7771.     BDA_EVENT_PURCHASE_COMPLETED,
  7772.     BDA_EVENT_SMART_CARD_INSERTED,
  7773.     BDA_EVENT_SMART_CARD_REMOVED
  7774.     );
  7775.  
  7776.  
  7777. //===========================================================================
  7778. //
  7779. //  KSSTREAM_HEADER extensions for BDA
  7780. //
  7781. //===========================================================================
  7782.  
  7783.   PKS_BDA_FRAME_INFO = ^TKS_BDA_FRAME_INFO;
  7784.   TKS_BDA_FRAME_INFO = record
  7785.     ExtendedHeaderSize : ULONG; // Size of this extended header
  7786.     dwFrameFlags       : DWORD;
  7787.     ulEvent            : ULONG;
  7788.     ulChannelNumber    : ULONG;
  7789.     ulSubchannelNumber : ULONG;
  7790.     ulReason           : ULONG;
  7791.   end;
  7792.  
  7793. //------------------------------------------------------------
  7794. //  BDA Network Ethernet Filter Property Set
  7795. // {71985F43-1CA1-11d3-9CC8-00C04F7971E0}
  7796.  
  7797.   PBDA_ETHERNET_ADDRESS = ^TBDA_ETHERNET_ADDRESS;
  7798.   TBDA_ETHERNET_ADDRESS = record
  7799.     rgbAddress : array[0..5] of BYTE;
  7800.   end;
  7801.  
  7802.   PBDA_ETHERNET_ADDRESS_LIST = ^TBDA_ETHERNET_ADDRESS_LIST;
  7803.   TBDA_ETHERNET_ADDRESS_LIST = record
  7804.     ulcAddresses : ULONG;
  7805.     rgAddressl : array[0..MIN_DIMENSION-1] of TBDA_ETHERNET_ADDRESS;
  7806.   end;
  7807.  
  7808.   PBDA_MULTICAST_MODE = ^TBDA_MULTICAST_MODE;
  7809.   TBDA_MULTICAST_MODE = (
  7810.     BDA_PROMISCUOUS_MULTICAST,
  7811.     BDA_FILTERED_MULTICAST,
  7812.     BDA_NO_MULTICAST
  7813.   );
  7814.  
  7815. //------------------------------------------------------------
  7816. //  BDA Network IPv4 Filter Property Set
  7817. // {71985F44-1CA1-11d3-9CC8-00C04F7971E0}
  7818.  
  7819.   PBDA_IPv4_ADDRESS = ^TBDA_IPv4_ADDRESS;
  7820.   TBDA_IPv4_ADDRESS = record
  7821.     rgbAddress : array[0..3] of BYTE;
  7822.     end;
  7823.  
  7824.   PBDA_IPv4_ADDRESS_LIST = ^TBDA_IPv4_ADDRESS_LIST;
  7825.   TBDA_IPv4_ADDRESS_LIST = record
  7826.     ulcAddresses : ULONG;
  7827.     rgAddressl   : array[0..MIN_DIMENSION-1] of TBDA_IPv4_ADDRESS;
  7828.   end;
  7829.  
  7830. //------------------------------------------------------------
  7831. //  BDA Network IPv4 Filter Property Set
  7832. // {E1785A74-2A23-4fb3-9245-A8F88017EF33}
  7833.  
  7834.   PBDA_IPv6_ADDRESS = ^TBDA_IPv6_ADDRESS;
  7835.   TBDA_IPv6_ADDRESS = record
  7836.     rgbAddress : array[0..5] of BYTE;
  7837.   end;
  7838.  
  7839.   PBDA_IPv6_ADDRESS_LIST = ^TBDA_IPv6_ADDRESS_LIST;
  7840.   TBDA_IPv6_ADDRESS_LIST = record
  7841.     ulcAddresses : ULONG;
  7842.     rgAddressl   : array [0..MIN_DIMENSION-1] of TBDA_IPv6_ADDRESS;
  7843.   end;
  7844.  
  7845. //------------------------------------------------------------
  7846. //  BDA Signal Property Set
  7847. //  {D2F1644B-B409-11d2-BC69-00A0C9EE9E16}
  7848.  
  7849.   PBDA_SIGNAL_STATE = ^TBDA_SIGNAL_STATE;
  7850.   TBDA_SIGNAL_STATE = (
  7851.     BDA_SIGNAL_UNAVAILABLE,
  7852.     BDA_SIGNAL_INACTIVE,
  7853.     BDA_SIGNAL_ACTIVE
  7854.   );
  7855.  
  7856. //------------------------------------------------------------
  7857. //  BDA Change Sync Method Set
  7858. // {FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}
  7859.  
  7860.   PBDA_CHANGE_STATE = ^TBDA_CHANGE_STATE;
  7861.   TBDA_CHANGE_STATE = (
  7862.     BDA_CHANGES_COMPLETE,
  7863.     BDA_CHANGES_PENDING
  7864.     );
  7865.  
  7866. //------------------------------------------------------------
  7867. //  BDA Device Configuration Method Set
  7868. // {71985F45-1CA1-11d3-9CC8-00C04F7971E0}
  7869.  
  7870. //------------------------------------------------------------
  7871. //  BDA Topology Property Set
  7872. // {A14EE835-0A23-11d3-9CC7-00C04F7971E0}
  7873.  
  7874.   PBDANODE_DESCRIPTOR = ^TBDANODE_DESCRIPTOR;
  7875.   TBDANODE_DESCRIPTOR = record
  7876.     ulBdaNodeType : ULONG;  // The node type as it is used
  7877.                             // in the BDA template topology
  7878.     guidFunction  : TGUID;  // GUID from BdaMedia.h describing
  7879.                             // the node's function (e.g.
  7880.                             // KSNODE_BDA_RF_TUNER)
  7881.     guidName      : TGUID;  // GUID that can be use to look up
  7882.                             // a displayable name for the node.
  7883.   end;
  7884.  
  7885. //------------------------------------------------------------
  7886. //  BDA Void Transform Property Set
  7887. // {71985F46-1CA1-11d3-9CC8-00C04F7971E0}
  7888.  
  7889. //------------------------------------------------------------
  7890. //  BDA Null Transform Property Set
  7891. // {DDF15B0D-BD25-11d2-9CA0-00C04F7971E0}
  7892.  
  7893. //------------------------------------------------------------
  7894. //  BDA Frequency Filter Property Set
  7895. // {71985F47-1CA1-11d3-9CC8-00C04F7971E0}
  7896.  
  7897. //------------------------------------------------------------
  7898. //  BDA Autodemodulate Property Set
  7899. // {DDF15B12-BD25-11d2-9CA0-00C04F7971E0}
  7900.  
  7901. //------------------------------------------------------------
  7902. //  BDA PmtProcessor Property Set
  7903. // {516B99C5-971C-4aaf-B3F3-D9FDA8A15E16}
  7904.  
  7905.   PBDA_PMT = ^TBDA_PMT;
  7906.   TBDA_PMT = record
  7907.     ulTableID         : ULONG;
  7908.     ulcbSectionLength : ULONG;
  7909.     argbSectionData   : array[0..MIN_DIMENSION-1] of ULONG;
  7910.   end;
  7911.  
  7912. //------------------------------------------------------------
  7913. //  BDA Descriptor Property Set
  7914. // {DE6A1C9E-87DF-48aa-95AA-289B7AA4F49F}
  7915.  
  7916.   PBDA_CAT_DESCRIPTOR = ^TBDA_CAT_DESCRIPTOR;
  7917.   TBDA_CAT_DESCRIPTOR = record
  7918.     ulTag      : ULONG;
  7919.     ulcbLength : ULONG;
  7920.     argbData   : array[0..MIN_DIMENSION-1] of ULONG;
  7921.   end;
  7922.  
  7923.   PBDA_ES_DESCRIPTOR = ^TBDA_ES_DESCRIPTOR;
  7924.   TBDA_ES_DESCRIPTOR = record
  7925.     ulProgramNum : ULONG;
  7926.     ulContentPID : ULONG;
  7927.     ulTag        : ULONG;
  7928.     ulcbLength   : ULONG;
  7929.     argbData     : array[0..MIN_DIMENSION-1] of ULONG;
  7930.   end;
  7931.  
  7932.   PBDA_PROGRAM_DESCRIPTOR = ^TBDA_PROGRAM_DESCRIPTOR;
  7933.   TBDA_PROGRAM_DESCRIPTOR = record
  7934.     ulProgramNum : ULONG;
  7935.     ulTag        : ULONG;
  7936.     ulcbLength   : ULONG;
  7937.     argbData     : array[0..MIN_DIMENSION-1] of ULONG;
  7938.   end;
  7939.  
  7940. //------------------------------------------------------------
  7941. //  BDA EsMap Property Set
  7942. // {FA14A8B3-6068-48ef-96DD-53010B985A7D}
  7943.  
  7944.   PBDA_ES_MAP_STATE = ^TBDA_ES_MAP_STATE;
  7945.   TBDA_ES_MAP_STATE = (
  7946.     ES_MAP_STATE_GOOD_FLOW,
  7947.     ES_MAP_STATE_NO_CONTENT,
  7948.     ES_MAP_STATE_NO_ECM,
  7949.     ES_MAP_STATE_BAD_MAP
  7950.   );
  7951.  
  7952.   PBDA_ES_MAP = ^TBDA_ES_MAP;
  7953.   TBDA_ES_MAP = record
  7954.     ulContentPID : ULONG;
  7955.     ulProgramNum : ULONG;
  7956.     ulStreamType : ULONG;
  7957.     mapState     : TBDA_ES_MAP_STATE;
  7958.   end;
  7959.  
  7960.  
  7961. //------------------------------------------------------------
  7962. //  BDA PID Filter Property Set
  7963. // {D0A67D65-08DF-4fec-8533-E5B550410B85}
  7964.  
  7965. //---------------------------------------------------------------------
  7966. // From IEnumPIDMap interface
  7967. //---------------------------------------------------------------------
  7968.  
  7969.   TMEDIA_SAMPLE_CONTENT = (
  7970.     MEDIA_TRANSPORT_PACKET,         //  complete TS packet e.g. pass-through mode
  7971.     MEDIA_ELEMENTARY_STREAM,        //  PES payloads; audio/video only
  7972.     MEDIA_MPEG2_PSI,                //  PAT, PMT, CAT, Private
  7973.     MEDIA_TRANSPORT_PAYLOAD         //  gathered TS packet payloads (PES packets, etc...)
  7974.   );
  7975.  
  7976.   TPID_MAP = record
  7977.     ulPID              : ULONG;
  7978.     MediaSampleContent : TMEDIA_SAMPLE_CONTENT;
  7979.   end;
  7980.  
  7981.   PBDA_PID_MAP = ^TBDA_PID_MAP;
  7982.   TBDA_PID_MAP = record
  7983.     MediaSampleContent : TMEDIA_SAMPLE_CONTENT;
  7984.     ulcPIDs            : ULONG;
  7985.     aulPIDs            : array[0..MIN_DIMENSION-1] of ULONG;
  7986.   end;
  7987.  
  7988.   PBDA_PID_UNMAP = ^TBDA_PID_UNMAP;
  7989.   TBDA_PID_UNMAP = record
  7990.     ulcPIDs : ULONG;
  7991.     aulPIDs : array[0..MIN_DIMENSION-1] of ULONG;
  7992.   end;
  7993.  
  7994. //------------------------------------------------------------
  7995. //  BDA CA Property Set
  7996. // {B0693766-5278-4ec6-B9E1-3CE40560EF5A}
  7997.  
  7998.   PBDA_CA_MODULE_UI = ^ TBDA_CA_MODULE_UI;
  7999.   TBDA_CA_MODULE_UI = record
  8000.     ulFormat : ULONG;
  8001.     ulbcDesc : ULONG;
  8002.     ulDesc   : array[0..MIN_DIMENSION-1] of ULONG;
  8003.   end;
  8004.  
  8005. //------------------------------------------------------------
  8006. //  BDA CA Event Set
  8007. // {488C4CCC-B768-4129-8EB1-B00A071F9068}
  8008.  
  8009. //=============================================================
  8010. //
  8011. //
  8012. //  BDA Tuning Model enumerations
  8013. //
  8014. //
  8015. //=============================================================
  8016.  
  8017. // system type for particular DVB Tuning Space instance
  8018.   TDVBSystemType = (
  8019.     DVB_Cable,
  8020.     DVB_Terrestrial,
  8021.     DVB_Satellite
  8022.   );
  8023. //------------------------------------------------------------
  8024. //  BDA Channel Tune Request
  8025.  
  8026. //V1_ENUM
  8027. const
  8028.     BDA_UNDEFINED_CHANNEL = -1;
  8029.  
  8030. //------------------------------------------------------------
  8031. //  BDA Component(substream)
  8032. type
  8033.   TComponentCategory = TOleEnum;
  8034. const
  8035.     CategoryNotSet = -1;
  8036.     CategoryOther  = 0;
  8037.     CategoryVideo  = 1;
  8038.     CategoryAudio  = 2;
  8039.     CategoryText   = 3;
  8040.     CategoryData   = 4;
  8041.  
  8042. // Component Status
  8043. type
  8044. TComponentStatus = (
  8045.     StatusActive,
  8046.     StatusInactive,
  8047.     StatusUnavailable
  8048.     );
  8049.  
  8050. //------------------------------------------------------------
  8051. //
  8052. //  BDA MPEG2 Component Type
  8053. //
  8054. // from the MPEG2 specification
  8055.   TMPEG2StreamType = TOleEnum;
  8056. const
  8057.     BDA_UNITIALIZED_MPEG2STREAMTYPE = -1;
  8058.     Reserved1                       = $0;
  8059.     ISO_IEC_11172_2_VIDEO           = Reserved1 + 1;
  8060.     ISO_IEC_13818_2_VIDEO           = ISO_IEC_11172_2_VIDEO + 1;
  8061.     ISO_IEC_11172_3_AUDIO           = ISO_IEC_13818_2_VIDEO + 1;
  8062.     ISO_IEC_13818_3_AUDIO           = ISO_IEC_11172_3_AUDIO + 1;
  8063.     ISO_IEC_13818_1_PRIVATE_SECTION = ISO_IEC_13818_3_AUDIO + 1;
  8064.     ISO_IEC_13818_1_PES             = ISO_IEC_13818_1_PRIVATE_SECTION + 1;
  8065.     ISO_IEC_13522_MHEG              = ISO_IEC_13818_1_PES + 1;
  8066.     ANNEX_A_DSM_CC                  = ISO_IEC_13522_MHEG + 1;
  8067.     ITU_T_REC_H_222_1               = ANNEX_A_DSM_CC + 1;
  8068.     ISO_IEC_13818_6_TYPE_A          = ITU_T_REC_H_222_1 + 1;
  8069.     ISO_IEC_13818_6_TYPE_B          = ISO_IEC_13818_6_TYPE_A + 1;
  8070.     ISO_IEC_13818_6_TYPE_C          = ISO_IEC_13818_6_TYPE_B + 1;
  8071.     ISO_IEC_13818_6_TYPE_D          = ISO_IEC_13818_6_TYPE_C + 1;
  8072.     ISO_IEC_13818_1_AUXILIARY       = ISO_IEC_13818_6_TYPE_D + 1;
  8073.     ISO_IEC_13818_1_RESERVED        = ISO_IEC_13818_1_AUXILIARY + 1;
  8074.     USER_PRIVATE                    = ISO_IEC_13818_1_RESERVED + 1;
  8075.  
  8076. //------------------------------------------------------------
  8077. //
  8078. //  BDA ATSC Component Type
  8079. //
  8080. //
  8081. // ATSC made AC3 Audio a descriptor instead of
  8082. // defining a user private stream type.
  8083. //enum ATSCComponentTypeFlags {
  8084.     // bit flags for various component type properties
  8085.     ATSCCT_AC3 = $00000001;
  8086.  
  8087. //------------------------------------------------------------
  8088. //  BDA Locators
  8089.  
  8090. type
  8091.   TBinaryConvolutionCodeRate = TOleEnum;
  8092. const
  8093.     BDA_BCC_RATE_NOT_SET     = -1;
  8094.     BDA_BCC_RATE_NOT_DEFINED = 0;
  8095.     BDA_BCC_RATE_1_2         = 1;  // 1/2
  8096.     BDA_BCC_RATE_2_3         = 2;  // 2/3
  8097.     BDA_BCC_RATE_3_4         = 3;  // 3/4
  8098.     BDA_BCC_RATE_3_5         = 4;
  8099.     BDA_BCC_RATE_4_5         = 5;
  8100.     BDA_BCC_RATE_5_6         = 6;  // 5/6
  8101.     BDA_BCC_RATE_5_11        = 7;
  8102.     BDA_BCC_RATE_7_8         = 8;  // 7/8
  8103.     BDA_BCC_RATE_MAX         = 9;
  8104.  
  8105. type
  8106.   TFECMethod = TOleEnum;
  8107. const
  8108.     BDA_FEC_METHOD_NOT_SET     = -1;
  8109.     BDA_FEC_METHOD_NOT_DEFINED = 0;
  8110.     BDA_FEC_VITERBI            = 1; // FEC is a Viterbi Binary Convolution.
  8111.     BDA_FEC_RS_204_188         = 2; // The FEC is Reed-Solomon 204/188 (outer FEC)
  8112.     BDA_FEC_MAX                = 3;
  8113.  
  8114. type
  8115.   TModulationType = TOleEnum;
  8116. const
  8117.     BDA_MOD_NOT_SET          = -1;
  8118.     BDA_MOD_NOT_DEFINED      = 0;
  8119.     BDA_MOD_16QAM            = 1;
  8120.     BDA_MOD_32QAM            = 2;
  8121.     BDA_MOD_64QAM            = 3;
  8122.     BDA_MOD_80QAM            = 4;
  8123.     BDA_MOD_96QAM            = 5;
  8124.     BDA_MOD_112QAM           = 6;
  8125.     BDA_MOD_128QAM           = 7;
  8126.     BDA_MOD_160QAM           = 8;
  8127.     BDA_MOD_192QAM           = 9;
  8128.     BDA_MOD_224QAM           = 10;
  8129.     BDA_MOD_256QAM           = 11;
  8130.     BDA_MOD_320QAM           = 12;
  8131.     BDA_MOD_384QAM           = 13;
  8132.     BDA_MOD_448QAM           = 14;
  8133.     BDA_MOD_512QAM           = 15;
  8134.     BDA_MOD_640QAM           = 16;
  8135.     BDA_MOD_768QAM           = 17;
  8136.     BDA_MOD_896QAM           = 18;
  8137.     BDA_MOD_1024QAM          = 19;
  8138.     BDA_MOD_QPSK             = 20;
  8139.     BDA_MOD_BPSK             = 21;
  8140.     BDA_MOD_OQPSK            = 22;
  8141.     BDA_MOD_8VSB             = 23;
  8142.     BDA_MOD_16VSB            = 24;
  8143.     BDA_MOD_ANALOG_AMPLITUDE = 25; // std am
  8144.     BDA_MOD_ANALOG_FREQUENCY = 26; // std fm
  8145.     BDA_MOD_MAX              = 27;
  8146.  
  8147. Type
  8148.   TSpectralInversion = TOleEnum;
  8149. const
  8150.     BDA_SPECTRAL_INVERSION_NOT_SET     = -1;
  8151.     BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0;
  8152.     BDA_SPECTRAL_INVERSION_AUTOMATIC   = 1;
  8153.     BDA_SPECTRAL_INVERSION_NORMAL      = 2;
  8154.     BDA_SPECTRAL_INVERSION_INVERTED    = 3;
  8155.     BDA_SPECTRAL_INVERSION_MAX         = 4;
  8156.  
  8157. Type
  8158.   TPolarisation = TOleEnum;
  8159. const
  8160.     BDA_POLARISATION_NOT_SET     = -1;
  8161.     BDA_POLARISATION_NOT_DEFINED = 0;
  8162.     BDA_POLARISATION_LINEAR_H    = 1; // Linear horizontal polarisation
  8163.     BDA_POLARISATION_LINEAR_V    = 2; // Linear vertical polarisation
  8164.     BDA_POLARISATION_CIRCULAR_L  = 3; // Circular left polarisation
  8165.     BDA_POLARISATION_CIRCULAR_R  = 4; // Circular right polarisation
  8166.     BDA_POLARISATION_MAX         = 5;
  8167.  
  8168. type
  8169.   TGuardInterval = TOleEnum;
  8170. const
  8171.     BDA_GUARD_NOT_SET     = -1;
  8172.     BDA_GUARD_NOT_DEFINED = 0;
  8173.     BDA_GUARD_1_32        = 1; // Guard interval is 1/32
  8174.     BDA_GUARD_1_16        = 2; // Guard interval is 1/16
  8175.     BDA_GUARD_1_8         = 3; // Guard interval is 1/8
  8176.     BDA_GUARD_1_4         = 4; // Guard interval is 1/4
  8177.     BDA_GUARD_MAX         = 5;
  8178.  
  8179. type
  8180.   THierarchyAlpha = TOleEnum;
  8181. const
  8182.     BDA_HALPHA_NOT_SET     = -1;
  8183.     BDA_HALPHA_NOT_DEFINED = 0;
  8184.     BDA_HALPHA_1           = 1; // Hierarchy alpha is 1.
  8185.     BDA_HALPHA_2           = 2; // Hierarchy alpha is 2.
  8186.     BDA_HALPHA_4           = 3; // Hierarchy alpha is 4.
  8187.     BDA_HALPHA_MAX         = 4;
  8188.  
  8189. type
  8190.   TTransmissionMode = TOleEnum;
  8191. const
  8192.     BDA_XMIT_MODE_NOT_SET     = -1;
  8193.     BDA_XMIT_MODE_NOT_DEFINED = 0;
  8194.     BDA_XMIT_MODE_2K          = 1; // Transmission uses 1705 carriers (use a 2K FFT)
  8195.     BDA_XMIT_MODE_8K          = 2; // Transmission uses 6817 carriers (use an 8K FFT)
  8196.     BDA_XMIT_MODE_MAX         = 3;
  8197.  
  8198.  
  8199. //------------------------------------------------------------------------------
  8200. // File: Regbag.h
  8201. // Desc: part of Tuner library 
  8202. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  8203. //------------------------------------------------------------------------------
  8204.  
  8205. const
  8206. IID_ICreatePropBagOnRegKey : TGUID = '{8A674B48-1F63-11d3-B64C-00C04F79498E}';
  8207.  
  8208. type
  8209.   ICreatePropBagOnRegKey = interface(IUnknown)
  8210.     ['{8A674B48-1F63-11d3-B64C-00C04F79498E}']
  8211.     function Create(hkey: HKEY; subkey: POleStr; ulOptions, samDesired: DWORD;
  8212.              const iid: TGUID; out ppBag): HRESULT; stdcall;
  8213.     end;
  8214.  
  8215. //------------------------------------------------------------------------------
  8216. // File: Tuner.h
  8217. // Desc: Tuner library
  8218. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  8219. //------------------------------------------------------------------------------
  8220.  
  8221.  
  8222. const
  8223. IID_ITuningSpaces            : TGUID = '{901284E4-33FE-4b69-8D63-634A596F3756}';
  8224. IID_ITuningSpaceContainer    : TGUID = '{5B692E84-E2F1-11d2-9493-00C04F72D980}';
  8225. IID_ITuningSpace             : TGUID = '{061C6E30-E622-11d2-9493-00C04F72D980}';
  8226. IID_IEnumTuningSpaces        : TGUID = '{8B8EB248-FC2B-11d2-9D8C-00C04F72D980}';
  8227. IID_IDVBTuningSpace          : TGUID = '{ADA0B268-3B19-4e5b-ACC4-49F852BE13BA}';
  8228. IID_IAnalogTVTuningSpace     : TGUID = '{2A6E293C-2595-11d3-B64C-00C04F79498E}';
  8229. IID_IATSCTuningSpace         : TGUID = '{0369B4E2-45B6-11d3-B650-00C04F79498E}';
  8230. IID_IAnalogRadioTuningSpace  : TGUID = '{2A6E293B-2595-11d3-B64C-00C04F79498E}';
  8231. IID_ITuneRequest             : TGUID = '{07DDC146-FC3D-11d2-9D8C-00C04F72D980}';
  8232. IID_IChannelTuneRequest      : TGUID = '{0369B4E0-45B6-11d3-B650-00C04F79498E}';
  8233. IID_IATSCChannelTuneRequest  : TGUID = '{0369B4E1-45B6-11d3-B650-00C04F79498E}';
  8234. IID_IDVBTuneRequest          : TGUID = '{0D6F567E-A636-42bb-83BA-CE4C1704AFA2}';
  8235. IID_ITuner                   : TGUID = '{28C52640-018A-11d3-9D8E-00C04F72D980}';
  8236. IID_IScanningTuner           : TGUID = '{1DFD0A5C-0284-11d3-9D8E-00C04F72D980}';
  8237. IID_ITunerEvents             : TGUID = '{68481420-0280-11d3-9D8E-00C04F72D980}';
  8238. IID_ISignalEvents            : TGUID = '{85E2439E-0E23-11d3-9D8E-00C04F72D980}';
  8239. IID_IComponentType           : TGUID = '{6A340DC0-0311-11d3-9D8E-00C04F72D980}';
  8240. IID_ILanguageComponentType   : TGUID = '{B874C8BA-0FA2-11d3-9D8E-00C04F72D980}';
  8241. IID_IMPEG2ComponentType      : TGUID = '{2C073D84-B51C-48c9-AA9F-68971E1F6E38}';
  8242. IID_IATSCComponentType       : TGUID = '{FC189E4D-7BD4-4125-B3B3-3A76A332CC96}';
  8243. IID_IEnumComponentTypes      : TGUID = '{8A674B4A-1F63-11d3-B64C-00C04F79498E}';
  8244. IID_IComponentTypes          : TGUID = '{0DC13D4A-0313-11d3-9D8E-00C04F72D980}';
  8245. IID_IComponent               : TGUID = '{1A5576FC-0E19-11d3-9D8E-00C04F72D980}';
  8246. IID_IMPEG2Component          : TGUID = '{1493E353-1EB6-473c-802D-8E6B8EC9D2A9}';
  8247. IID_IEnumComponents          : TGUID = '{2A6E2939-2595-11d3-B64C-00C04F79498E}';
  8248. IID_IComponents              : TGUID = '{FCD01846-0E19-11d3-9D8E-00C04F72D980}';
  8249. IID_ILocator                 : TGUID = '{286D7F89-760C-4F89-80C4-66841D2507AA}';
  8250. IID_IATSCLocator             : TGUID = '{BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF}';
  8251. IID_IDVBTLocator             : TGUID = '{8664DA16-DDA2-42ac-926A-C18F9127C302}';
  8252. IID_IDVBSLocator             : TGUID = '{3D7C353C-0D04-45f1-A742-F97CC1188DC8}';
  8253. IID_IDVBCLocator             : TGUID = '{6E42F36E-1DD2-43c4-9F78-69D25AE39034}';
  8254.  
  8255. CLSID_SystemTuningSpaces     : TGUID = '{D02AAC50-027E-11d3-9D8E-00C04F72D980}';
  8256. CLSID_TuningSpace            : TGUID = '{5FFDC5E6-B83A-4b55-B6E8-C69E765FE9DB}';
  8257. CLSID_ATSCTuningSpace        : TGUID = '{A2E30750-6C3D-11d3-B653-00C04F79498E}';
  8258. CLSID_AnalogRadioTuningSpace : TGUID = '{8A674B4C-1F63-11d3-B64C-00C04F79498E}';
  8259. CLSID_AnalogTVTuningSpace    : TGUID = '{8A674B4D-1F63-11d3-B64C-00C04F79498E}';
  8260. CLSID_DVBTuningSpace         : TGUID = '{C6B14B32-76AA-4a86-A7AC-5C79AAF58DA7}';
  8261. CLSID_ComponentTypes         : TGUID = '{A1A2B1C4-0E3A-11d3-9D8E-00C04F72D980}';
  8262. CLSID_ComponentType          : TGUID = '{823535A0-0318-11d3-9D8E-00C04F72D980}';
  8263. CLSID_LanguageComponentType  : TGUID = '{1BE49F30-0E1B-11d3-9D8E-00C04F72D980}';
  8264. CLSID_MPEG2ComponentType     : TGUID = '{418008F3-CF67-4668-9628-10DC52BE1D08}';
  8265. CLSID_ATSCComponentType      : TGUID = '{A8DCF3D5-0780-4ef4-8A83-2CFFAACB8ACE}';
  8266. CLSID_Components             : TGUID = '{809B6661-94C4-49e6-B6EC-3F0F862215AA}';
  8267. CLSID_Component              : TGUID = '{59DC47A8-116C-11d3-9D8E-00C04F72D980}';
  8268. CLSID_MPEG2Component         : TGUID = '{055CB2D7-2969-45cd-914B-76890722F112}';
  8269. CLSID_TuneRequest            : TGUID = '{B46E0D38-AB35-4a06-A137-70576B01B39F}';
  8270. CLSID_ChannelTuneRequest     : TGUID = '{0369B4E5-45B6-11d3-B650-00C04F79498E}';
  8271. CLSID_ATSCChannelTuneRequest : TGUID = '{0369B4E6-45B6-11d3-B650-00C04F79498E}';
  8272. CLSID_Locator                : TGUID = '{0888C883-AC4F-4943-B516-2C38D9B34562}';
  8273. CLSID_ATSCLocator            : TGUID = '{8872FF1B-98FA-4d7a-8D93-C9F1055F85BB}';
  8274. CLSID_DVBTLocator            : TGUID = '{9CD64701-BDF3-4d14-8E03-F12983D86664}';
  8275. CLSID_DVBSLocator            : TGUID = '{1DF7D126-4050-47f0-A7CF-4C4CA9241333}';
  8276. CLSID_DVBCLocator            : TGUID = '{C531D9FD-9685-4028-8B68-6E1232079F1E}';
  8277. CLSID_DVBTuneRequest         : TGUID = '{15D6504A-5494-499c-886C-973C9E53B9F1}';
  8278. CLSID_CreatePropBagOnRegKey  : TGUID = '{8A674B49-1F63-11d3-B64C-00C04F79498E}';
  8279.  
  8280.         DISPID_TUNER_TS_UNIQUENAME                    = 1;
  8281.     DISPID_TUNER_TS_FRIENDLYNAME                    = 2;
  8282.     DISPID_TUNER_TS_CLSID                            = 3;
  8283.     DISPID_TUNER_TS_NETWORKTYPE                    = 4;
  8284.     DISPID_TUNER_TS__NETWORKTYPE                    = 5;
  8285.     DISPID_TUNER_TS_CREATETUNEREQUEST            = 6;
  8286.     DISPID_TUNER_TS_ENUMCATEGORYGUIDS            = 7;
  8287.     DISPID_TUNER_TS_ENUMDEVICEMONIKERS            = 8;
  8288.     DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES    = 9;
  8289.     DISPID_TUNER_TS_FREQMAP                            = 10;
  8290.     DISPID_TUNER_TS_DEFLOCATOR                    = 11;
  8291.     DISPID_TUNER_TS_CLONE                            = 12;
  8292.     DISPID_TUNER_TR_TUNINGSPACE                    = 1;
  8293.     DISPID_TUNER_TR_COMPONENTS                    = 2;
  8294.     DISPID_TUNER_TR_CLONE                            = 3;
  8295.     DISPID_TUNER_TR_LOCATOR                            = 4;
  8296.     DISPID_TUNER_CT_CATEGORY                    = 1;
  8297.     DISPID_TUNER_CT_MEDIAMAJORTYPE                    = 2;
  8298.     DISPID_TUNER_CT__MEDIAMAJORTYPE                    = 3;
  8299.     DISPID_TUNER_CT_MEDIASUBTYPE                    = 4;
  8300.     DISPID_TUNER_CT__MEDIASUBTYPE                    = 5;
  8301.     DISPID_TUNER_CT_MEDIAFORMATTYPE                    = 6;
  8302.     DISPID_TUNER_CT__MEDIAFORMATTYPE            = 7;
  8303.     DISPID_TUNER_CT_MEDIATYPE                    = 8;
  8304.     DISPID_TUNER_CT_CLONE                            = 9;
  8305.     DISPID_TUNER_LCT_LANGID                            = 100;
  8306.     DISPID_TUNER_MP2CT_TYPE                            = 200;
  8307.     DISPID_TUNER_ATSCCT_FLAGS                    = 300;
  8308.     DISPID_TUNER_L_CARRFREQ                            = 1;
  8309.     DISPID_TUNER_L_INNERFECMETHOD                    = 2;
  8310.     DISPID_TUNER_L_INNERFECRATE                    = 3;
  8311.     DISPID_TUNER_L_OUTERFECMETHOD                    = 4;
  8312.     DISPID_TUNER_L_OUTERFECRATE                    = 5;
  8313.     DISPID_TUNER_L_MOD                            = 6;
  8314.     DISPID_TUNER_L_SYMRATE                            = 7;
  8315.     DISPID_TUNER_L_CLONE                            = 8;
  8316.     DISPID_TUNER_L_ATSC_PHYS_CHANNEL            = 201;
  8317.     DISPID_TUNER_L_ATSC_TSID                    = 202;
  8318.     DISPID_TUNER_L_DVBT_BANDWIDTH                    = 301;
  8319.     DISPID_TUNER_L_DVBT_LPINNERFECMETHOD            = 302;
  8320.     DISPID_TUNER_L_DVBT_LPINNERFECRATE            = 303;
  8321.     DISPID_TUNER_L_DVBT_GUARDINTERVAL            = 304;
  8322.     DISPID_TUNER_L_DVBT_HALPHA                    = 305;
  8323.     DISPID_TUNER_L_DVBT_TRANSMISSIONMODE            = 306;
  8324.     DISPID_TUNER_L_DVBT_INUSE                    = 307;
  8325.     DISPID_TUNER_L_DVBS_POLARISATION            = 401;
  8326.     DISPID_TUNER_L_DVBS_WEST                    = 402;
  8327.     DISPID_TUNER_L_DVBS_ORBITAL                    = 403;
  8328.     DISPID_TUNER_L_DVBS_AZIMUTH                    = 404;
  8329.     DISPID_TUNER_L_DVBS_ELEVATION                    = 405;
  8330.     DISPID_TUNER_C_TYPE                            = 1;
  8331.     DISPID_TUNER_C_STATUS                            = 2;
  8332.     DISPID_TUNER_C_LANGID                            = 3;
  8333.     DISPID_TUNER_C_DESCRIPTION                    = 4;
  8334.     DISPID_TUNER_C_CLONE                            = 5;
  8335.     DISPID_TUNER_C_MP2_PID                            = 101;
  8336.     DISPID_TUNER_C_MP2_PCRPID                    = 102;
  8337.     DISPID_TUNER_C_MP2_PROGNO                    = 103;
  8338.     DISPID_TUNER_TS_DVB_SYSTEMTYPE                    = 101;
  8339.     DISPID_TUNER_TS_AR_MINFREQUENCY                    = 101;
  8340.     DISPID_TUNER_TS_AR_MAXFREQUENCY                    = 102;
  8341.     DISPID_TUNER_TS_AR_STEP                            = 103;
  8342.     DISPID_TUNER_TS_ATV_MINCHANNEL                    = 101;
  8343.     DISPID_TUNER_TS_ATV_MAXCHANNEL                    = 102;
  8344.     DISPID_TUNER_TS_ATV_INPUTTYPE                    = 103;
  8345.     DISPID_TUNER_TS_ATV_COUNTRYCODE                    = 104;
  8346.     DISPID_TUNER_TS_ATSC_MINMINORCHANNEL            = 201;
  8347.     DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL            = 202;
  8348.     DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL            = 203;
  8349.     DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL            = 204;
  8350.     DISPID_CHTUNER_ATVAC_CHANNEL                    = 101;
  8351.     DISPID_CHTUNER_ATVDC_SYSTEM                    = 101;
  8352.     DISPID_CHTUNER_ATVDC_CONTENT                    = 102;
  8353.     DISPID_CHTUNER_CTR_CHANNEL                    = 101;
  8354.     DISPID_CHTUNER_ACTR_MINOR_CHANNEL            = 201;
  8355.     DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID            = 101;
  8356.     DISPID_DVBTUNER_DVBC_PID                     = 102;
  8357.     DISPID_DVBTUNER_DVBC_TAG                    = 103;
  8358.     DISPID_DVBTUNER_DVBC_COMPONENTTYPE            = 104;
  8359.     DISPID_DVBTUNER_ONID                            = 101;
  8360.     DISPID_DVBTUNER_TSID                            = 102;
  8361.     DISPID_DVBTUNER_SID                            = 103;
  8362.  
  8363. type
  8364.   ITuningSpace = interface;
  8365.   IEnumTuningSpaces = interface;
  8366.  
  8367.   ITuningSpaces = interface(IDispatch)
  8368.     ['{901284E4-33FE-4b69-8D63-634A596F3756}']
  8369.     function get_Count(out Count: longint): HRESULT; stdcall;
  8370.     function get__NewEnum(out NewEnum: IEnumVARIANT): HRESULT; stdcall;
  8371.     function get_Item(varIndex: OLEVARIANT; out TuningSpace: ITuningSpace): HRESULT; stdcall;
  8372.     function get_EnumTuningSpaces(out NewEnum: IEnumTuningSpaces): HRESULT; stdcall;
  8373.   end;
  8374.  
  8375.   ITuningSpaceContainer = interface(IDispatch)
  8376.     ['{5B692E84-E2F1-11d2-9493-00C04F72D980}']
  8377.     function get_Count(out Count: longint): HRESULT; stdcall;
  8378.     function get__NewEnum(out NewEnum: IEnumVARIANT): HRESULT; stdcall;
  8379.     function get_Item(varIndex: OLEVARIANT; out TuningSpace: ITuningSpace): HRESULT; stdcall;
  8380.     function put_Item(varIndex: OLEVARIANT; TuningSpace: ITuningSpace): HRESULT; stdcall;
  8381.     function TuningSpacesForCLSID(SpaceCLSID: widestring; out NewColl: ITuningSpaces): HRESULT; stdcall;
  8382.     function _TuningSpacesForCLSID(const SpaceCLSID: TGUID; out NewColl: ITuningSpaces): HRESULT; stdcall;
  8383.     function TuningSpacesForName(Name: WideString; out NewColl: ITuningSpaces): HRESULT; stdcall;
  8384.     function FindID(TuningSpace: ITuningSpace; out ID: longint): HRESULT; stdcall;
  8385.     function Add(TuningSpace: ITuningSpace; out NewIndex: OLEVARIANT): HRESULT; stdcall;
  8386.     function get_EnumTuningSpaces(out ppEnum: IEnumTuningSpaces): HRESULT; stdcall;
  8387.     function Remove(Index: OLEVARIANT): HRESULT; stdcall;
  8388.     function get_MaxCount(out MaxCount: longint): HRESULT; stdcall;
  8389.     function put_MaxCount(MaxCount: longint): HRESULT; stdcall;
  8390.    end;
  8391.  
  8392.   ITuneRequest = interface;
  8393.   IComponentTypes = interface;
  8394.   ILocator = interface;
  8395.  
  8396.   ITuningSpace = interface(IDispatch)
  8397.     ['{061C6E30-E622-11d2-9493-00C04F72D980}']
  8398.     function get_UniqueName(out Name: WideString): HRESULT; stdcall;
  8399.     function put_UniqueName(Name: WideString): HRESULT; stdcall;
  8400.     function get_FriendlyName(out Name: WideString): HRESULT; stdcall;
  8401.     function put_FriendlyName: HRESULT; stdcall;
  8402.     function get_CLSID(out SpaceCLSID: WideString): HRESULT; stdcall;
  8403.     function get_NetworkType(out NetworkTypeGuid: WideString): HRESULT; stdcall;
  8404.     function put_NetworkType(NetworkTypeGuid: WideString): HRESULT; stdcall;
  8405.     function get__NetworkType(out NetworkTypeGuid: WideString): HRESULT; stdcall;
  8406.     function put__NetworkType(const NetworkTypeGuid: WideString): HRESULT; stdcall;
  8407.     function CreateTuneRequest(out TuneRequest: ITuneRequest): HRESULT; stdcall;
  8408.     function EnumCategoryGUIDs(out ppEnum: IEnumGUID): HRESULT; stdcall;
  8409.     function EnumDeviceMonikers(out ppEnum: IEnumMoniker): HRESULT; stdcall;
  8410.     function get_DefaultPreferredComponentTypes(out ComponentTypes: IComponentTypes): HRESULT; stdcall;
  8411.     function put_DefaultPreferredComponentTypes(NewComponentTypes: IComponentTypes): HRESULT; stdcall;
  8412.     function get_FrequencyMapping(out pMapping: WideString): HRESULT; stdcall;
  8413.     function put_FrequencyMapping(Mapping: WideString): HRESULT; stdcall;
  8414.     function get_DefaultLocator(out LocatorVal: ILocator): HRESULT; stdcall;
  8415.     function put_DefaultLocator(LocatorVal: ILocator): HRESULT; stdcall;
  8416.     function Clone(out NewTS: ITuningSpace): HRESULT; stdcall;
  8417.    end;
  8418.  
  8419.   IEnumTuningSpaces = interface(IUnknown)
  8420.     ['{8B8EB248-FC2B-11d2-9D8C-00C04F72D980}']
  8421.     function Next(celt: ULONG; out rgelt: ITuningSpace; out pceltFetched: ULONG): HRESULT; stdcall;
  8422.     function Skip(celt: ULONG): HRESULT; stdcall;
  8423.     function Reset: HRESULT; stdcall;
  8424.     function Clone(out ppEnum: IEnumTuningSpaces): HRESULT; stdcall;
  8425.    end;
  8426.  
  8427.   IDVBTuningSpace = interface(ITuningSpace)
  8428.     ['{ADA0B268-3B19-4e5b-ACC4-49F852BE13BA}']
  8429.     function get_SystemType(out SysType: TDVBSystemType): HRESULT; stdcall;
  8430.     function put_SystemType(SysType: TDVBSystemType): HRESULT; stdcall;
  8431.    end;
  8432.  
  8433.   IAnalogTVTuningSpace = interface(ITuningSpace)
  8434.     ['{2A6E293C-2595-11d3-B64C-00C04F79498E}']
  8435.     function get_MinChannel(out MinChannelVal: longint): HRESULT; stdcall;
  8436.     function put_MinChannel(NewMinChannelVal: longint): HRESULT; stdcall;
  8437.     function get_MaxChannel(out MaxChannelVal: longint): HRESULT; stdcall;
  8438.     function put_MaxChannel(NewMaxChannelVal: longint): HRESULT; stdcall;
  8439.     function get_InputType(out InputTypeVal: TTunerInputType): HRESULT; stdcall;
  8440.     function put_InputType(NewInputTypeVal: TTunerInputType): HRESULT; stdcall;
  8441.     function get_CountryCode(out CountryCodeVal: longint): HRESULT; stdcall;
  8442.     function put_CountryCode(NewCountryCodeVal: longint): HRESULT; stdcall;
  8443.    end;
  8444.  
  8445.   IATSCTuningSpace = interface(IAnalogTVTuningSpace)
  8446.     ['{0369B4E2-45B6-11d3-B650-00C04F79498E}']
  8447.     function get_MinMinorChannel(out MinMinorChannelVal: longint): HRESULT; stdcall;
  8448.     function put_MinMinorChannel(NewMinMinorChannelVal: longint): HRESULT; stdcall;
  8449.     function get_MaxMinorChannel(out MaxMinorChannelVal: longint): HRESULT; stdcall;
  8450.     function put_MaxMinorChannel(NewMaxMinorChannelVal: longint): HRESULT; stdcall;
  8451.     function get_MinPhysicalChannel(out MinPhysicalChannelVal: longint): HRESULT; stdcall;
  8452.     function put_MinPhysicalChannel(NewMinPhysicalChannelVal: longint): HRESULT; stdcall;
  8453.     function get_MaxPhysicalChannel(out MaxPhysicalChannelVal: longint): HRESULT; stdcall;
  8454.     function put_MaxPhysicalChannel(NewMaxPhysicalChannelVal: longint): HRESULT; stdcall;
  8455.    end;
  8456.  
  8457.   IAnalogRadioTuningSpace = interface(ITuningSpace)
  8458.     ['{2A6E293B-2595-11d3-B64C-00C04F79498E}']
  8459.     function get_MinFrequency(out MinFrequencyVal: longint): HRESULT; stdcall;
  8460.     function put_MinFrequency(NewMinFrequencyVal: longint): HRESULT; stdcall;
  8461.     function get_MaxFrequency(out MaxFrequencyVal: longint): HRESULT; stdcall;
  8462.     function put_MaxFrequency(NewMaxFrequencyVal: longint): HRESULT; stdcall;
  8463.     function get_Step(out StepVal: longint): HRESULT; stdcall;
  8464.     function put_Step(NewStepVal: longint): HRESULT; stdcall;
  8465.    end;
  8466.  
  8467.   IComponents = interface;
  8468.  
  8469.   ITuneRequest = interface(IDispatch)
  8470.     ['{07DDC146-FC3D-11d2-9D8C-00C04F72D980}']
  8471.     function get_TuningSpace(out TuningSpace: ITuningSpace): HRESULT; stdcall;
  8472.     function get_Components(out Components: IComponents): HRESULT; stdcall;
  8473.     function Clone(out NewTuneRequest: ITuneRequest): HRESULT; stdcall;
  8474.     function get_Locator(out Locator: ILocator): HRESULT; stdcall;
  8475.     function put_Locator(Locator: ILocator): HRESULT; stdcall;
  8476.    end;
  8477.  
  8478.   IChannelTuneRequest = interface(ITuneRequest)
  8479.     ['{0369B4E0-45B6-11d3-B650-00C04F79498E}']
  8480.     function get_Channel(out Channel: longint): HRESULT; stdcall;
  8481.     function put_Channel(Channel: longint): HRESULT; stdcall;
  8482.    end;
  8483.  
  8484.   IATSCChannelTuneRequest = interface(IChannelTuneRequest)
  8485.     ['{0369B4E1-45B6-11d3-B650-00C04F79498E}']
  8486.     function get_MinorChannel(out MinorChannel: longint): HRESULT; stdcall;
  8487.     function put_MinorChannel(MinorChannel: longint): HRESULT; stdcall;
  8488.    end;
  8489.  
  8490.   IDVBTuneRequest = interface(ITuneRequest)
  8491.     ['{0D6F567E-A636-42bb-83BA-CE4C1704AFA2}']
  8492.     function get_ONID(out ONID: longint): HRESULT; stdcall;
  8493.     function put_ONID(ONID: longint): HRESULT; stdcall;
  8494.     function get_TSID(out TSID: longint): HRESULT; stdcall;
  8495.     function put_TSID(TSID: longint): HRESULT; stdcall;
  8496.     function get_SID(out SID: longint): HRESULT; stdcall;
  8497.     function put_SID(SID: longint): HRESULT; stdcall;
  8498.    end;
  8499.  
  8500.   ITuner = interface(IUnknown)
  8501.     ['{28C52640-018A-11d3-9D8E-00C04F72D980}']
  8502.     function get_TuningSpace(out TuningSpace: ITuningSpace): HRESULT; stdcall;
  8503.     function put_TuningSpace(TuningSpace: ITuningSpace): HRESULT; stdcall;
  8504.     function EnumTuningSpaces(out ppEnum: IEnumTuningSpaces): HRESULT; stdcall;
  8505.     function get_TuneRequest(out TuneRequest: ITuneRequest): HRESULT; stdcall;
  8506.     function put_TuneRequest(TuneRequest: ITuneRequest): HRESULT; stdcall;
  8507.     function Validate(TuneRequest: ITuneRequest): HRESULT; stdcall;
  8508.     function get_PreferredComponentTypes(out ComponentTypes: IComponentTypes): HRESULT; stdcall;
  8509.     function put_PreferredComponentTypes(ComponentTypes: IComponentTypes): HRESULT; stdcall;
  8510.     function get_SignalStrength(out Strength: longint): HRESULT; stdcall;
  8511.     function TriggerSignalEvents(Interval: longint): HRESULT; stdcall;
  8512.    end;
  8513.  
  8514.   IScanningTuner = interface(ITuner)
  8515.     ['{1DFD0A5C-0284-11d3-9D8E-00C04F72D980}']
  8516.     function SeekUp: HRESULT; stdcall;
  8517.     function SeekDown: HRESULT; stdcall;
  8518.     function ScanUp(MillisecondsPause: longint): HRESULT; stdcall;
  8519.     function ScanDown(MillisecondsPause: longint): HRESULT; stdcall;
  8520.     function AutoProgram: HRESULT; stdcall;
  8521.    end;
  8522.  
  8523.   ITunerEvents = interface(IUnknown)
  8524.     ['{68481420-0280-11d3-9D8E-00C04F72D980}']
  8525.     function OnTune(Request: ITuneRequest; Strength: longint): HRESULT; stdcall;
  8526.    end;
  8527.  
  8528.   ISignalEvents = interface(IUnknown)
  8529.     ['{85E2439E-0E23-11d3-9D8E-00C04F72D980}']
  8530.     function OnSignal(out Strength: longint): HRESULT; stdcall;
  8531.    end;
  8532.  
  8533.   IComponentType = interface(IDispatch)
  8534.     ['{6A340DC0-0311-11d3-9D8E-00C04F72D980}']
  8535.     function get_Category(out Category: TComponentCategory): HRESULT; stdcall;
  8536.     function put_Category(Category: TComponentCategory): HRESULT; stdcall;
  8537.     function get_MediaMajorType(out MediaMajorType: WideString): HRESULT; stdcall;
  8538.     function put_MediaMajorType(MediaMajorType: WideString): HRESULT; stdcall;
  8539.     function get__MediaMajorType(out MediaMajorTypeGuid: TGUID): HRESULT; stdcall;
  8540.     function put__MediaMajorType(const MediaMajorTypeGuid: TGUID): HRESULT; stdcall;
  8541.     function get_MediaSubType(out MediaSubType: WideString): HRESULT; stdcall;
  8542.     function put_MediaSubType(MediaSubType: WideString): HRESULT; stdcall;
  8543.     function get__MediaSubType(out MediaSubTypeGuid: TGUID): HRESULT; stdcall;
  8544.     function put__MediaSubType(const MediaSubTypeGuid: TGUID): HRESULT; stdcall;
  8545.     function get_MediaFormatType(out MediaFormatType: WideString): HRESULT; stdcall;
  8546.     function put_MediaFormatType(MediaFormatType: WideString): HRESULT; stdcall;
  8547.     function get__MediaFormatType(out MediaFormatTypeGuid: TGUID): HRESULT; stdcall;
  8548.     function put__MediaFormatType(const MediaFormatTypeGuid: TGUID): HRESULT; stdcall;
  8549.     function get_MediaType(out MediaType: TAM_MEDIA_TYPE): HRESULT; stdcall;
  8550.     function put_MediaType(MediaType: TAM_MEDIA_TYPE): HRESULT; stdcall;
  8551.     function Clone(out NewCT: IComponentType): HRESULT; stdcall;
  8552.    end;
  8553.  
  8554.   ILanguageComponentType = interface(IComponentType)
  8555.     ['{B874C8BA-0FA2-11d3-9D8E-00C04F72D980}']
  8556.     function get_LangID(out LangID: longint): HRESULT; stdcall;
  8557.     function put_LangID(LangID: longint): HRESULT; stdcall;
  8558.    end;
  8559.  
  8560.   IMPEG2ComponentType = interface(ILanguageComponentType)
  8561.     ['{2C073D84-B51C-48c9-AA9F-68971E1F6E38}']
  8562.     function get_StreamType(out MP2StreamType: TMPEG2StreamType): HRESULT; stdcall;
  8563.     function put_StreamType(MP2StreamType: TMPEG2StreamType): HRESULT; stdcall;
  8564.    end;
  8565.  
  8566.   IATSCComponentType = interface(IMPEG2ComponentType)
  8567.     ['{FC189E4D-7BD4-4125-B3B3-3A76A332CC96}']
  8568.     function get_Flags(out Flags: longint): HRESULT; stdcall;
  8569.     function put_Flags(Flags: longint): HRESULT; stdcall;
  8570.    end;
  8571.  
  8572.   IEnumComponentTypes = interface(IUnknown)
  8573.     ['{8A674B4A-1F63-11d3-B64C-00C04F79498E}']
  8574.     function Next(celt: ULONG; out rgelt: IComponentType; out pceltFetched: ULONG): HRESULT; stdcall;
  8575.     function Skip(celt: ULONG): HRESULT; stdcall;
  8576.     function Reset: HRESULT; stdcall;
  8577.     function Clone(out ppEnum: IEnumComponentTypes): HRESULT; stdcall;
  8578.    end;
  8579.  
  8580.   IComponentTypes = interface(IDispatch)
  8581.     ['{0DC13D4A-0313-11d3-9D8E-00C04F72D980}']
  8582.     function get_Count(out Count: longint): HRESULT; stdcall;
  8583.     function get__NewEnum(out ppNewEnum: IEnumVARIANT): HRESULT; stdcall;
  8584.     function EnumComponentTypes(out ppNewEnum: IEnumComponentTypes): HRESULT; stdcall;
  8585.     function get_Item(Index: OLEVARIANT; out ComponentType: IComponentType): HRESULT; stdcall;
  8586.     function put_Item(Index: OLEVARIANT; ComponentType: IComponentType): HRESULT; stdcall;
  8587.     function Add(ComponentType: IComponentType; out NewIndex: OLEVARIANT): HRESULT; stdcall;
  8588.     function Remove(Index: OLEVARIANT): HRESULT; stdcall;
  8589.     function Clone(out NewList: IComponentTypes): HRESULT; stdcall;
  8590.    end;
  8591.  
  8592.   IComponent = interface(IDispatch)
  8593.     ['{1A5576FC-0E19-11d3-9D8E-00C04F72D980}']
  8594.     function get_Type(out CT: IComponentType): HRESULT; stdcall;
  8595.     function put_Type(CT: IComponentType): HRESULT; stdcall;
  8596.     function get_DescLangID(out LangID: longint): HRESULT; stdcall;
  8597.     function put_DescLangID(LangID: longint): HRESULT; stdcall;
  8598.     function get_Status(out Status: TComponentStatus): HRESULT; stdcall;
  8599.     function put_Status(Status: TComponentStatus): HRESULT; stdcall;
  8600.     function get_Description(out Description: WideString): HRESULT; stdcall;
  8601.     function put_Description(Description: WideString): HRESULT; stdcall;
  8602.     function Clone(out NewComponent: IComponent): HRESULT; stdcall;
  8603.    end;
  8604.  
  8605.   IMPEG2Component = interface(IComponent)
  8606.     ['{1493E353-1EB6-473c-802D-8E6B8EC9D2A9}']
  8607.     function get_PID(out PID: longint): HRESULT; stdcall;
  8608.     function put_PID(PID: longint): HRESULT; stdcall;
  8609.     function get_PCRPID(out PCRPID: longint): HRESULT; stdcall;
  8610.     function put_PCRPID(PCRPID: longint): HRESULT; stdcall;
  8611.     function get_ProgramNumber(out ProgramNumber: longint): HRESULT; stdcall;
  8612.     function put_ProgramNumber(ProgramNumber: longint): HRESULT; stdcall;
  8613.    end;
  8614.  
  8615.   IEnumComponents = interface(IUnknown)
  8616.     ['{2A6E2939-2595-11d3-B64C-00C04F79498E}']
  8617.     function Next(celt: ULONG; out rgelt: IComponent; out pceltFetched: ULONG): HRESULT; stdcall;
  8618.     function Skip(celt: ULONG): HRESULT; stdcall;
  8619.     function Reset: HRESULT; stdcall;
  8620.     function Clone(out ppEnum: IEnumComponents): HRESULT; stdcall;
  8621.    end;
  8622.  
  8623.   IComponents = interface(IDispatch)
  8624.     ['{FCD01846-0E19-11d3-9D8E-00C04F72D980}']
  8625.     function get_Count(out Count: longint): HRESULT; stdcall;
  8626.     function get__NewEnum(out ppNewEnum: IEnumVARIANT): HRESULT; stdcall;
  8627.     function EnumComponents(out ppNewEnum: IEnumComponents): HRESULT; stdcall;
  8628.     function get_Item(Index: OLEVARIANT; out ppComponent: IComponent): HRESULT; stdcall;
  8629.     function Add(Component: IComponent; out NewIndex: OLEVARIANT): HRESULT; stdcall;
  8630.     function Remove(Index: OLEVARIANT): HRESULT; stdcall;
  8631.     function Clone(out NewList: IComponents): HRESULT; stdcall;
  8632.    end;
  8633.  
  8634.   ILocator = interface(IDispatch)
  8635.     ['{286D7F89-760C-4F89-80C4-66841D2507AA}']
  8636.     function get_CarrierFrequency(out Frequency: longint): HRESULT; stdcall;
  8637.     function put_CarrierFrequency(Frequency: longint): HRESULT; stdcall;
  8638.     function get_InnerFEC(out FEC: TFECMethod): HRESULT; stdcall;
  8639.     function put_InnerFEC(FEC: TFECMethod): HRESULT; stdcall;
  8640.     function get_InnerFECRate(out FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8641.     function put_InnerFECRate(FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8642.     function get_OuterFEC(out FEC: TFECMethod): HRESULT; stdcall;
  8643.     function put_OuterFEC(FEC: TFECMethod): HRESULT; stdcall;
  8644.     function get_OuterFECRate(out FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8645.     function put_OuterFECRate(FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8646.     function get_Modulation(out Modulation: TModulationType): HRESULT; stdcall;
  8647.     function put_Modulation(Modulation: TModulationType): HRESULT; stdcall;
  8648.     function get_SymbolRate(out Rate: longint): HRESULT; stdcall;
  8649.     function put_SymbolRate(Rate: longint): HRESULT; stdcall;
  8650.     function Clone(out NewLocator: ILocator): HRESULT; stdcall;
  8651.    end;
  8652.  
  8653.   IATSCLocator = interface(ILocator)
  8654.     ['{BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF}']
  8655.     function get_PhysicalChannel(out PhysicalChannel: longint): HRESULT; stdcall;
  8656.     function put_PhysicalChannel(PhysicalChannel: longint): HRESULT; stdcall;
  8657.     function get_TSID(out TSID: longint): HRESULT; stdcall;
  8658.     function put_TSID(TSID: longint): HRESULT; stdcall;
  8659.    end;
  8660.  
  8661.   IDVBTLocator = interface(ILocator)
  8662.     ['{8664DA16-DDA2-42ac-926A-C18F9127C302}']
  8663.     function get_Bandwidth(out BandWidthVal: longint): HRESULT; stdcall;
  8664.     function put_Bandwidth(BandwidthVal: longint): HRESULT; stdcall;
  8665.     function get_LPInnerFEC(out FEC: TFECMethod): HRESULT; stdcall;
  8666.     function put_LPInnerFEC(FEC: TFECMethod): HRESULT; stdcall;
  8667.     function get_LPInnerFECRate(out FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8668.     function put_LPInnerFECRate(FEC: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  8669.     function get_HAlpha(out Alpha: THierarchyAlpha): HRESULT; stdcall;
  8670.     function put_HAlpha(Alpha: THierarchyAlpha): HRESULT; stdcall;
  8671.     function get_Guard(out GI: TGuardInterval): HRESULT; stdcall;
  8672.     function put_Guard(GI: TGuardInterval): HRESULT; stdcall;
  8673.     function get_Mode(out mode: TTransmissionMode): HRESULT; stdcall;
  8674.     function put_Mode(mode: TTransmissionMode): HRESULT; stdcall;
  8675.     function get_OtherFrequencyInUse(out OtherFrequencyInUseVal: WordBool): HRESULT; stdcall;
  8676.     function put_OtherFrequencyInUse(OtherFrequencyInUseVal: WordBool): HRESULT; stdcall;
  8677.    end;
  8678.  
  8679.   IDVBSLocator = interface(ILocator)
  8680.     ['{3D7C353C-0D04-45f1-A742-F97CC1188DC8}']
  8681.     function get_SignalPolarisation(out PolarisationVal: TPolarisation): HRESULT; stdcall;
  8682.     function put_SignalPolarisation(PolarisationVal: TPolarisation): HRESULT; stdcall;
  8683.     function get_WestPosition(out WestLongitude: WordBool): HRESULT; stdcall;
  8684.     function put_WestPosition(WestLongitude: WordBool): HRESULT; stdcall;
  8685.     function get_OrbitalPosition(out longitude: longint): HRESULT; stdcall;
  8686.     function put_OrbitalPosition(longitude: longint): HRESULT; stdcall;
  8687.     function get_Azimuth(out Azimuth: longint): HRESULT; stdcall;
  8688.     function put_Azimuth(Azimuth: longint): HRESULT; stdcall;
  8689.     function get_Elevation(out Elevation: longint): HRESULT; stdcall;
  8690.     function put_Elevation(Elevation: longint): HRESULT; stdcall;
  8691.    end;
  8692.  
  8693.   IDVBCLocator = interface(ILocator)
  8694.     ['{6E42F36E-1DD2-43c4-9F78-69D25AE39034}']
  8695.    end;
  8696.  
  8697. // Tuner library CoCLASS
  8698.   CoAnalogRadioTuningSpace = class
  8699.     class function Create: IAnalogRadioTuningSpace;
  8700.     class function CreateRemote(const MachineName: string): IAnalogRadioTuningSpace;
  8701.   end;
  8702.  
  8703.   CoAnalogTVTuningSpace = class
  8704.     class function Create: IAnalogTVTuningSpace;
  8705.     class function CreateRemote(const MachineName: string): IAnalogTVTuningSpace;
  8706.   end;
  8707.  
  8708.   CoATSCChannelTuneRequest = class
  8709.     class function Create: IATSCChannelTuneRequest;
  8710.     class function CreateRemote(const MachineName: string): IATSCChannelTuneRequest;
  8711.   end;
  8712.  
  8713.   CoATSCComponentType = class
  8714.     class function Create: IATSCComponentType;
  8715.     class function CreateRemote(const MachineName: string): IATSCComponentType;
  8716.   end;
  8717.  
  8718.   CoATSCLocator = class
  8719.     class function Create: IATSCLocator;
  8720.     class function CreateRemote(const MachineName: string): IATSCLocator;
  8721.   end;
  8722.  
  8723.   CoATSCTuningSpace = class
  8724.     class function Create: IATSCTuningSpace;
  8725.     class function CreateRemote(const MachineName: string): IATSCTuningSpace;
  8726.   end;
  8727.  
  8728.   CoChannelTuneRequest = class
  8729.     class function Create: IChannelTuneRequest;
  8730.     class function CreateRemote(const MachineName: string): IChannelTuneRequest;
  8731.   end;
  8732.  
  8733.   CoComponent = class
  8734.     class function Create: IComponent;
  8735.     class function CreateRemote(const MachineName: string): IComponent;
  8736.   end;
  8737.  
  8738.   CoComponents = class
  8739.     class function Create: IComponents;
  8740.     class function CreateRemote(const MachineName: string): IComponents;
  8741.   end;
  8742.  
  8743.   CoComponentType = class
  8744.     class function Create: IComponentType;
  8745.     class function CreateRemote(const MachineName: string): IComponentType;
  8746.   end;
  8747.  
  8748.   CoComponentTypes = class
  8749.     class function Create: IComponentTypes;
  8750.     class function CreateRemote(const MachineName: string): IComponentTypes;
  8751.   end;
  8752.  
  8753.   CoCreatePropBagOnRegKey = class
  8754.     class function Create: ICreatePropBagOnRegKey;
  8755.     class function CreateRemote(const MachineName: string): ICreatePropBagOnRegKey;
  8756.   end;
  8757.  
  8758.   CoDVBCLocator = class
  8759.     class function Create: ILocator;
  8760.     class function CreateRemote(const MachineName: string): ILocator;
  8761.   end;
  8762.  
  8763.   CoDVBSLocator = class
  8764.     class function Create: IDVBSLocator;
  8765.     class function CreateRemote(const MachineName: string): IDVBSLocator;
  8766.   end;
  8767.  
  8768.   CoDVBTLocator = class
  8769.     class function Create: IDVBTLocator;
  8770.     class function CreateRemote(const MachineName: string): IDVBTLocator;
  8771.   end;
  8772.  
  8773.   CoDVBTuneRequest = class
  8774.     class function Create: IDVBTuneRequest;
  8775.     class function CreateRemote(const MachineName: string): IDVBTuneRequest;
  8776.   end;
  8777.  
  8778.   CoDVBTuningSpace = class
  8779.     class function Create: IDVBTuningSpace;
  8780.     class function CreateRemote(const MachineName: string): IDVBTuningSpace;
  8781.   end;
  8782.  
  8783.   CoLanguageComponentType = class
  8784.     class function Create: ILanguageComponentType;
  8785.     class function CreateRemote(const MachineName: string): ILanguageComponentType;
  8786.   end;
  8787.  
  8788.   CoLocator = class
  8789.     class function Create: ILocator;
  8790.     class function CreateRemote(const MachineName: string): ILocator;
  8791.   end;
  8792.  
  8793.   CoMPEG2Component = class
  8794.     class function Create: IMPEG2Component;
  8795.     class function CreateRemote(const MachineName: string): IMPEG2Component;
  8796.   end;
  8797.  
  8798.   CoMPEG2ComponentType = class
  8799.     class function Create: IMPEG2ComponentType;
  8800.     class function CreateRemote(const MachineName: string): IMPEG2ComponentType;
  8801.   end;
  8802.  
  8803.   CoSystemTuningSpaces = class
  8804.     class function Create: ITuningSpaceContainer;
  8805.     class function CreateRemote(const MachineName: string): ITuningSpaceContainer;
  8806.   end;
  8807.  
  8808.   CoTuneRequest = class
  8809.     class function Create: ITuneRequest;
  8810.     class function CreateRemote(const MachineName: string): ITuneRequest;
  8811.   end;
  8812.  
  8813.   CoTuningSpace = class
  8814.     class function Create: ITuningSpace;
  8815.     class function CreateRemote(const MachineName: string): ITuningSpace;
  8816.   end;
  8817.  
  8818. //------------------------------------------------------------------------------
  8819. // File: DXTrans.h
  8820. // Desc: DirectX Transform library
  8821. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  8822. //------------------------------------------------------------------------------
  8823.  
  8824. const
  8825.   LIBID_DXTRANSLib         : TGUID = '{54314D1D-35FE-11D1-81A1-0000F87557DB}';
  8826.  
  8827.   IID_IDXBaseObject        : TGUID = '{17B59B2B-9CC8-11D1-9053-00C04FD9189D}';
  8828.   IID_IDXTransformFactory  : TGUID = '{6A950B2B-A971-11D1-81C8-0000F87557DB}';
  8829.   IID_IDXTransform         : TGUID = '{30A5FB78-E11F-11D1-9064-00C04FD9189D}';
  8830.   IID_IDXSurfacePick       : TGUID = '{30A5FB79-E11F-11d1-9064-00C04FD9189D}';
  8831.   IID_IDXTBindHost         : TGUID = '{D26BCE55-E9DC-11d1-9066-00C04FD9189D}';
  8832.   IID_IDXTaskManager       : TGUID = '{254DBBC1-F922-11D0-883A-3C8B00C10000}';
  8833.   IID_IDXSurfaceFactory    : TGUID = '{144946F5-C4D4-11D1-81D1-0000F87557DB}';
  8834.   IID_IDXSurfaceModifier   : TGUID = '{9EA3B637-C37D-11D1-905E-00C04FD9189D}';
  8835.   IID_IDXSurface           : TGUID = '{B39FD73F-E139-11D1-9065-00C04FD9189D}';
  8836.   IID_IDXSurfaceInit       : TGUID = '{9EA3B639-C37D-11d1-905E-00C04FD9189D}';
  8837.   IID_IDXARGBSurfaceInit   : TGUID = '{9EA3B63A-C37D-11d1-905E-00C04FD9189D}';
  8838.   IID_IDXARGBReadPtr       : TGUID = '{EAAAC2D6-C290-11d1-905D-00C04FD9189D}';
  8839.   IID_IDXARGBReadWritePtr  : TGUID = '{EAAAC2D7-C290-11d1-905D-00C04FD9189D}';
  8840.   IID_IDXDCLock            : TGUID = '{0F619456-CF39-11D1-905E-00C04FD9189D}';
  8841.   IID_IDXTScaleOutput      : TGUID = '{B2024B50-EE77-11D1-9066-00C04FD9189D}';
  8842.   IID_IDXGradient          : TGUID = '{B2024B51-EE77-11D1-9066-00C04FD9189D}';
  8843.   IID_IDXTScale            : TGUID = '{B39FD742-E139-11D1-9065-00C04FD9189D}';
  8844.   IID_IDXEffect            : TGUID = '{E31FB81B-1335-11d1-8189-0000F87557DB}';
  8845.   IID_IDXLookupTable       : TGUID = '{01BAFC7F-9E63-11D1-9053-00C04FD9189D}';
  8846.   IID_IDXRawSurface        : TGUID = '{09756C8A-D96A-11d1-9062-00C04FD9189D}';
  8847.   IID_IHTMLDXTransform     : TGUID = '{30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5}';
  8848.  
  8849.   CLSID_DXTransformFactory : TGUID = '{D1FE6762-FC48-11D0-883A-3C8B00C10000}';
  8850.   CLSID_DXTaskManager      : TGUID = '{4CB26C03-FF93-11D0-817E-0000F87557DB}';
  8851.   CLSID_DXTScale           : TGUID = '{555278E2-05DB-11D1-883A-3C8B00C10000}';
  8852.   CLSID_DXSurface          : TGUID = '{0E890F83-5F79-11D1-9043-00C04FD9189D}';
  8853.   CLSID_DXSurfaceModifier  : TGUID = '{3E669F1D-9C23-11D1-9053-00C04FD9189D}';
  8854.   CLSID_DXGradient         : TGUID = '{C6365470-F667-11D1-9067-00C04FD9189D}';
  8855.  
  8856.  
  8857. //
  8858. //  Pixel format definitions
  8859. //
  8860. DDPF_RGB1     : TGUID = '{e436eb78-524f-11ce-9f53-0020af0ba770}';
  8861. DDPF_RGB2     : TGUID = '{BBF7D3F3-143F-11d1-B50A-0000F8756A10}';
  8862. DDPF_RGB4     : TGUID = '{e436eb79-524f-11ce-9f53-0020af0ba770}';
  8863. DDPF_RGB8     : TGUID = '{e436eb7a-524f-11ce-9f53-0020af0ba770}';
  8864. DDPF_RGB332   : TGUID = '{BBF7D3F6-143F-11d1-B50A-0000F8756A10}';
  8865. DDPF_ARGB4444 : TGUID = '{BBF7D3F7-143F-11d1-B50A-0000F8756A10}';
  8866. DDPF_RGB565   : TGUID = '{e436eb7b-524f-11ce-9f53-0020af0ba770}';
  8867. DDPF_BGR565   : TGUID = '{BBF7D3F9-143F-11d1-B50A-0000F8756A10}';
  8868. DDPF_RGB555   : TGUID = '{e436eb7c-524f-11ce-9f53-0020af0ba770}';
  8869. DDPF_ARGB1555 : TGUID = '{BBF7D3FB-143F-11d1-B50A-0000F8756A10}';
  8870. DDPF_RGB24    : TGUID = '{e436eb7d-524f-11ce-9f53-0020af0ba770}';
  8871. DDPF_BGR24    : TGUID = '{BBF7D3FD-143F-11d1-B50A-0000F8756A10}';
  8872. DDPF_RGB32    : TGUID = '{e436eb7e-524f-11ce-9f53-0020af0ba770}';
  8873. DDPF_BGR32    : TGUID = '{BBF7D3FF-143F-11d1-B50A-0000F8756A10}';
  8874. DDPF_ABGR32   : TGUID = '{BBF7D401-143F-11d1-B50A-0000F8756A10}';
  8875. DDPF_ARGB32   : TGUID = '{773c9ac0-3274-11d0-B724-00aa006c1A01}';
  8876. DDPF_PMARGB32 : TGUID = '{BBF7D403-143F-11d1-B50A-0000F8756A10}';
  8877. DDPF_A1       : TGUID = '{7846F94E-3915-11d1-99AA-0000F8756A10}';
  8878. DDPF_A2       : TGUID = '{7846F94F-3915-11d1-99AA-0000F8756A10}';
  8879. DDPF_A4       : TGUID = '{7846F950-3915-11d1-99AA-0000F8756A10}';
  8880. DDPF_A8       : TGUID = '{7846F951-3915-11d1-99AA-0000F8756A10}';
  8881. DDPF_Z8       : TGUID = '{7846F952-3915-11d1-99AA-0000F8756A10}';
  8882. DDPF_Z16      : TGUID = '{7846F953-3915-11d1-99AA-0000F8756A10}';
  8883. DDPF_Z24      : TGUID = '{7846F954-3915-11d1-99AA-0000F8756A10}';
  8884. DDPF_Z32      : TGUID = '{7846F955-3915-11d1-99AA-0000F8756A10}';
  8885. //
  8886. //  Component categories
  8887. //
  8888. CATID_DXImageTransform     : TGUID = '{C501EDBE-9E70-11d1-9053-00C04FD9189D}';
  8889. CATID_DX3DTransform        : TGUID = '{C501EDBF-9E70-11d1-9053-00C04FD9189D}';
  8890. CATID_DXAuthoringTransform : TGUID = '{ACAC94FC-E5CF-11d1-9066-00C04FD9189D}';
  8891. CATID_DXSurface            : TGUID = '{52BA7097-B52C-11d1-81CB-0000F87557DB}';
  8892. //
  8893. //  Service IDs.
  8894. //
  8895. SID_SDirectDraw         : TGUID = (D1:$618f8ad4;D2:$8b7a;D3:$11d0;D4:($8f,$cc,$0,$c0,$4f,$d9,$18,$9d));
  8896. SID_SDirect3DRM         : TGUID = (D1:$2bc49361;D2:$8327;D3:$11cf;D4:($ac,$4a,$0,$0,$c0,$38,$25,$a1));
  8897. SID_SDXTaskManager      : TGUID = '{4CB26C03-FF93-11D0-817E-0000F87557DB}';
  8898. SID_SDXSurfaceFactory   : TGUID = '{144946F5-C4D4-11D1-81D1-0000F87557DB}';
  8899. SID_SDXTransformFactory : TGUID = '{6A950B2B-A971-11D1-81C8-0000F87557DB}';
  8900.  
  8901. type
  8902.   IDXBaseObject = interface(IUnknown)
  8903.     ['{17B59B2B-9CC8-11D1-9053-00C04FD9189D}']
  8904.     function  GetGenerationId(out pID: ULONG): HResult; stdcall;
  8905.     function  IncrementGenerationId(bRefresh: BOOL): HResult; stdcall;
  8906.     function  GetObjectSize(out pcbSize: ULONG): HResult; stdcall;
  8907.   end;
  8908.  
  8909.   TDXBNDID = (
  8910.     DXB_X,
  8911.     DXB_Y,
  8912.     DXB_Z,
  8913.     DXB_T
  8914.   );
  8915.  
  8916.   TDXBNDTYPE = (
  8917.     DXBT_DISCRETE,
  8918.     DXBT_DISCRETE64,
  8919.     DXBT_CONTINUOUS,
  8920.     DXBT_CONTINUOUS64
  8921.   );
  8922.  
  8923.   TDXDBND = record
  8924.     Min: longint;
  8925.     Max: longint;
  8926.   end;
  8927.  
  8928.   TDXDBNDS = array[0..3] of TDXDBND;
  8929.  
  8930.   TDXDBND64 = record
  8931.     Min: int64;
  8932.     Max: int64;
  8933.   end;
  8934.  
  8935.   TDXDBNDS64 = array [0..3] of TDXDBND64;
  8936.  
  8937.   TDXCBND = record
  8938.     Min: single;
  8939.     Max: single;
  8940.   end;
  8941.  
  8942.   TDXCBNDS = array[0..3] of TDXCBND;
  8943.  
  8944.   TDXCBND64 = record
  8945.     Min: double;
  8946.     Max: double;
  8947.   end;
  8948.  
  8949.   TDXCBNDS64 = array[0..3] of TDXCBND64;
  8950.  
  8951.   TDXBNDS = record
  8952.     eType: TDXBNDTYPE;
  8953.     case Integer of
  8954.       0: (D:  array[0..3] of TDXDBND);
  8955.       1: (LD: array[0..3] of TDXDBND64);
  8956.       2: (C:  array[0..3] of TDXCBND);
  8957.       3: (LC: array[0..3] of TDXCBND64);
  8958.   end;
  8959.  
  8960.  
  8961.   TDXDVEC = array[0..3] of longint;
  8962.  
  8963.   TDXDVEC64 = array[0..3] of int64;
  8964.  
  8965.   TDXCVEC = array[0..3] of single;
  8966.  
  8967.   TDXCVEC64 = array[0..3] of double;
  8968.  
  8969.   TDXVEC = packed record
  8970.     eType: TDXBNDTYPE;
  8971.     case Integer of
  8972.       0: (D:  array[0..3] of Longint);
  8973.       1: (LD: array[0..3] of Int64);
  8974.       2: (C:  array[0..3] of Single);
  8975.       3: (LC: array[0..3] of Double);
  8976.   end;
  8977.  
  8978.   IDXTransform = interface(IDXBaseObject)
  8979.     ['{30A5FB78-E11F-11D1-9064-00C04FD9189D}']
  8980.     function Setup(punkInputs: IUnknown; ulNumInputs: ULONG; punkOutputs: IUnknown;
  8981.                ulNumOutputs: ULONG; dwFlags: DWORD): HResult; stdcall;
  8982.     function Execute(const pRequestID: TGUID; var pClipBnds: TDXBNDS; var pPlacement: TDXVEC): HResult; stdcall;
  8983.     function MapBoundsIn2Out(var pInBounds: TDXBNDS; ulNumInBnds: ULONG; ulOutIndex: ULONG;
  8984.                out pOutBounds: TDXBNDS): HResult; stdcall;
  8985.     function MapBoundsOut2In(ulOutIndex: ULONG; var pOutBounds: TDXBNDS; ulInIndex: ULONG;
  8986.                out pInBounds: TDXBNDS): HResult; stdcall;
  8987.     function SetMiscFlags(dwMiscFlags: DWORD): HResult; stdcall;
  8988.     function GetMiscFlags(out pdwMiscFlags: DWORD): HResult; stdcall;
  8989.     function GetInOutInfo(bIsOutput: BOOL; ulIndex: ULONG; out pdwFlags: DWORD;
  8990.                out pIDs: TGUID; var pcIDs: ULONG; out ppUnkCurrentObject: IUnknown): HResult; stdcall;
  8991.     function SetQuality(fQuality: Single): HResult; stdcall;
  8992.     function GetQuality(out fQuality: Single): HResult; stdcall;
  8993.   end;
  8994.  
  8995.   IDXTransformFactory = interface(IServiceProvider)
  8996.     ['{6A950B2B-A971-11D1-81C8-0000F87557DB}']
  8997.     function SetService(const guidService: TGUID; pUnkService: IUnknown;
  8998.                bWeakReference: BOOL): HResult; stdcall;
  8999.     function CreateTransform(punkInputs: IUnknown; ulNumInputs: ULONG;
  9000.                punkOutputs: IUnknown; ulNumOutputs: ULONG;
  9001.                pInitProps: IPropertyBag; pErrLog: IErrorLog;
  9002.                const TransCLSID: TGUID; const TransIID: TGUID; out ppTransform: Pointer): HResult; stdcall;
  9003.     function InitializeTransform(pTransform: IDXTransform; punkInputs: IUnknown;
  9004.                ulNumInputs: ULONG; punkOutputs: IUnknown;
  9005.                ulNumOutputs: ULONG; pInitProps: IPropertyBag;
  9006.                pErrLog: IErrorLog): HResult; stdcall;
  9007.   end;
  9008.  
  9009.  
  9010.   TDXTMISCFLAGS = TOleEnum;
  9011. const
  9012.   DXTMF_BLEND_WITH_OUTPUT    = 1 shl 0;
  9013.   DXTMF_DITHER_OUTPUT            = 1 shl 1;
  9014.   DXTMF_OPTION_MASK            = $ffff;
  9015.   DXTMF_VALID_OPTIONS            = DXTMF_BLEND_WITH_OUTPUT or DXTMF_DITHER_OUTPUT;
  9016.   DXTMF_BLEND_SUPPORTED            = 1 shl 16;
  9017.   DXTMF_DITHER_SUPPORTED    = 1 shl 17;
  9018.   DXTMF_INPLACE_OPERATION    = 1 shl 24;
  9019.   DXTMF_BOUNDS_SUPPORTED    = 1 shl 25;
  9020.   DXTMF_PLACEMENT_SUPPORTED    = 1 shl 26;
  9021.   DXTMF_QUALITY_SUPPORTED    = 1 shl 27;
  9022.   DXTMF_OPAQUE_RESULT            = 1 shl 28;
  9023.  
  9024. type
  9025.   TDXINOUTINFOFLAGS = TOleEnum;
  9026. const
  9027.   DXINOUTF_OPTIONAL    = 1 shl 0;
  9028.  
  9029. type
  9030.   IDXSurfacePick = interface(IUnknown)
  9031.     ['{30A5FB79-E11F-11d1-9064-00C04FD9189D}']
  9032.     function PointPick(var pPoint: TDXVEC; out pulInputSurfaceIndex: ULONG;
  9033.                out pInputPoint: TDXVEC): HResult; stdcall;
  9034.   end;
  9035.  
  9036.   IDXTBindHost = interface(IUnknown)
  9037.     ['{D26BCE55-E9DC-11d1-9066-00C04FD9189D}']
  9038.     function SetBindHost(pBindHost: IBindHost): HResult; stdcall;
  9039.   end;
  9040.  
  9041.   DXTASKPROC = procedure(var pTaskData: pointer; var pbContinueProcessing: BOOL);stdcall;
  9042.   PFNDXTASKPROC = ^DXTASKPROC;
  9043.  
  9044.   DXAPCPROC = procedure(dwData: DWORD);stdcall;
  9045.   PFNDXAPCPROC = ^DXAPCPROC;
  9046.  
  9047.   TDXTMTASKINFO = record
  9048.     pfnTaskProc: PFNDXTASKPROC;
  9049.     pTaskData: Pointer;
  9050.     pfnCompletionAPC: PFNDXAPCPROC;
  9051.     dwCompletionData: DWORD;
  9052.     pRequestID: PGUID;
  9053.   end;
  9054.  
  9055.   IDXTaskManager = interface(IUnknown)
  9056.     ['{254DBBC1-F922-11D0-883A-3C8B00C10000}']
  9057.     function  QueryNumProcessors(out pulNumProc: ULONG): HResult; stdcall;
  9058.     function  SetThreadPoolSize(ulNumThreads: ULONG): HResult; stdcall;
  9059.     function  GetThreadPoolSize(out pulNumThreads: ULONG): HResult; stdcall;
  9060.     function  SetConcurrencyLimit(ulNumThreads: ULONG): HResult; stdcall;
  9061.     function  GetConcurrencyLimit(out pulNumThreads: ULONG): HResult; stdcall;
  9062.     function  ScheduleTasks(var TaskInfo: TDXTMTASKINFO; Events: PHANDLE;
  9063.                             out TaskIDs: DWORD; ulNumTasks: ULONG; ulWaitPeriod: ULONG): HResult; stdcall;
  9064.     function  TerminateTasks(var TaskIDs: DWORD; ulCount: ULONG; ulTimeOut: ULONG): HResult; stdcall;
  9065.     function  TerminateRequest(const RequestID: TGUID; ulTimeOut: ULONG): HResult; stdcall;
  9066.   end;
  9067.  
  9068.   TDXBASESAMPLE = record
  9069.     Blue  : Byte;
  9070.     Green : Byte;
  9071.     Red   : Byte;
  9072.     Alpha : Byte;
  9073.   end;
  9074.  
  9075.   TDXSAMPLE = record
  9076.     Blue  : Byte;
  9077.     Green : Byte;
  9078.     Red   : Byte;
  9079.     Alpha : Byte;
  9080.   end;
  9081.  
  9082.   TDXPMSAMPLE = record
  9083.     Blue  : Byte;
  9084.     Green : Byte;
  9085.     Red   : Byte;
  9086.     Alpha : Byte;
  9087.   end;
  9088.  
  9089.   TDXRUNTYPE = (
  9090.     DXRUNTYPE_CLEAR,
  9091.     DXRUNTYPE_OPAQUE,
  9092.     DXRUNTYPE_TRANS,
  9093.     DXRUNTYPE_UNKNOWN
  9094.   );
  9095.  
  9096. const
  9097.   DX_MAX_RUN_INFO_COUNT    = 128;
  9098.  
  9099. type
  9100. // 2  : Type  ;   // Type
  9101. // 30 : Count ;  // Number of samples in run
  9102.   PDXRUNINFO = ^TDXRUNINFO;
  9103.   TDXRUNINFO = record
  9104.     Bitfields : ULONG;
  9105.   end;
  9106.  
  9107.   TDXSFCREATE = TOleEnum;
  9108. const
  9109.   DXSF_FORMAT_IS_CLSID    = 1 shl 0;
  9110.   DXSF_NO_LAZY_DDRAW_LOCK = 1 shl 1;
  9111.  
  9112. type
  9113.   TDXBLTOPTIONS = TOleEnum;
  9114. const
  9115.   DXBOF_DO_OVER    = 1 shl 0;
  9116.   DXBOF_DITHER    = 1 shl 1;
  9117.  
  9118. type
  9119.   TDXSAMPLEFORMATENUM = TOleEnum;
  9120. const
  9121.   DXPF_FLAGSMASK    = $FFFF0000;
  9122.   DXPF_NONPREMULT   = $00010000;
  9123.   DXPF_TRANSPARENCY = $00020000;
  9124.   DXPF_TRANSLUCENCY = $00040000;
  9125.   DXPF_2BITERROR    = $00200000;
  9126.   DXPF_3BITERROR    = $00300000;
  9127.   DXPF_4BITERROR    = $00400000;
  9128.   DXPF_5BITERROR    = $00500000;
  9129.   DXPF_ERRORMASK    = $00700000;
  9130.   DXPF_NONSTANDARD  = $00000000;
  9131.   DXPF_PMARGB32     = $00060001;
  9132.   DXPF_ARGB32       = $00070002;
  9133.   DXPF_ARGB4444     = $00470003;
  9134.   DXPF_A8           = $00060004;
  9135.   DXPF_RGB32        = $00000005;
  9136.   DXPF_RGB24        = $00000006;
  9137.   DXPF_RGB565       = $00300007;
  9138.   DXPF_RGB555       = $00300008;
  9139.   DXPF_RGB8         = $00500009;
  9140.   DXPF_ARGB1555     = $0032000A;
  9141.   DXPF_RGB32_CK     = $00020005;
  9142.   DXPF_RGB24_CK     = $00020006;
  9143.   DXPF_RGB555_CK    = $00320008;
  9144.   DXPF_RGB565_CK    = $00320007;
  9145.   DXPF_RGB8_CK      = $00520009;
  9146.  
  9147. type
  9148.   TDXLOCKSURF = TOleEnum;
  9149. const
  9150.   DXLOCKF_READ               = 0;
  9151.   DXLOCKF_READWRITE       = 1 shl 0;
  9152.   DXLOCKF_EXISTINGINFOONLY = 1 shl 1;
  9153.   DXLOCKF_WANTRUNINFO       = 1 shl 2;
  9154.   DXLOCKF_NONPREMULT       = 1 shl 16;
  9155.   DXLOCKF_VALIDFLAGS       = (DXLOCKF_READWRITE or DXLOCKF_EXISTINGINFOONLY or DXLOCKF_WANTRUNINFO or DXLOCKF_NONPREMULT);
  9156.  
  9157. Type
  9158.   TDXSURFSTATUS = TOleEnum;
  9159. const
  9160.   DXSURF_TRANSIENT  = 1 shl 0;
  9161.   DXSURF_READONLY   = 1 shl 1;
  9162.   DXSURF_VALIDFLAGS = (DXSURF_TRANSIENT or DXSURF_READONLY);
  9163.  
  9164. type
  9165.   IDXDCLock = interface(IUnknown)
  9166.     ['{0F619456-CF39-11D1-905E-00C04FD9189D}']
  9167.     function  GetDC: HDC; stdcall;
  9168.   end;
  9169.  
  9170.   IDXSurface = interface(IDXBaseObject)
  9171.     ['{B39FD73F-E139-11D1-9065-00C04FD9189D}']
  9172.     function GetPixelFormat(out pFormatID: TGUID; out pSampleFormatEnum: TDXSAMPLEFORMATENUM): HResult; stdcall;
  9173.     function GetBounds(out pBounds: TDXBNDS): HResult; stdcall;
  9174.     function GetStatusFlags(out pdwStatusFlags: DWORD): HResult; stdcall;
  9175.     function SetStatusFlags(dwStatusFlags: DWORD): HResult; stdcall;
  9176.     function LockSurface(var pBounds: TDXBNDS; ulTimeOut: ULONG; dwFlags: DWORD;
  9177.              const riid: TGUID; out ppPointer: Pointer; out pulGenerationId: ULONG): HResult; stdcall;
  9178.     function GetDirectDrawSurface(const riid: TGUID; out ppSurface: Pointer): HResult; stdcall;
  9179.     function GetColorKey(var pColorKey: TDXSAMPLE): HResult; stdcall;
  9180.     function SetColorKey(ColorKey: TDXSAMPLE): HResult; stdcall;
  9181.     function LockSurfaceDC(var pBounds: TDXBNDS; ulTimeOut: ULONG; dwFlags: DWORD;
  9182.                             out ppDCLock: IDXDCLock): HResult; stdcall;
  9183.     function SetAppData(dwAppData: DWORD): HResult; stdcall;
  9184.     function GetAppData(var pdwAppData: DWORD): HResult; stdcall;
  9185.   end;
  9186.  
  9187.  
  9188. //lookat
  9189.   IDXSurfaceFactory = interface(IUnknown)
  9190.     ['{144946F5-C4D4-11D1-81D1-0000F87557DB}']
  9191.     function CreateSurface(pDirectDraw: IUnknown; var pDDSurfaceDesc: PDDSurfaceDesc;
  9192.                const pFormatID: TGUID; var pBounds: TDXBNDS; dwFlags: DWORD;
  9193.                punkOuter: IUnknown; const riid: TGUID; out ppDXSurface: Pointer): HResult; stdcall;
  9194.     function CreateFromDDSurface(pDDrawSurface: IUnknown; const pFormatID: TGUID;
  9195.                dwFlags: DWORD; punkOuter: IUnknown; const riid: TGUID;
  9196.                out ppDXSurface: Pointer): HResult; stdcall;
  9197.     function LoadImage(pszFileName: PWideChar; pDirectDraw: IUnknown;
  9198.                pDDSurfaceDesc: PDDSURFACEDESC; const pFormatID: TGUID; const riid: TGUID;
  9199.                out ppDXSurface: Pointer): HResult; stdcall;
  9200.     function LoadImageFromStream(pStream: IStream; pDirectDraw: IUnknown;
  9201.                pDDSurfaceDesc: PDDSURFACEDESC; const pFormatID: TGUID;
  9202.                const riid: TGUID; out ppDXSurface: Pointer): HResult; stdcall;
  9203.     function CopySurfaceToNewFormat(pSrc: IDXSurface; pDirectDraw: IUnknown;
  9204.                pDDSurfaceDesc: PDDSURFACEDESC; const pDestFormatID: TGUID;
  9205.                out ppNewSurface: IDXSurface): HResult; stdcall;
  9206.     function CreateD3DRMTexture(pSrc: IDXSurface; pDirectDraw: IUnknown;
  9207.                pD3DRM3: IUnknown; const riid: TGUID; out ppTexture3: Pointer): HResult; stdcall;
  9208.     function BitBlt(pDest: IDXSurface; var pPlacement: TDXVEC; pSrc: IDXSurface;
  9209.                var pClipBounds: TDXBNDS; dwFlags: DWORD): HResult; stdcall;
  9210.   end;
  9211.  
  9212.   //convenient type declaration for IDXLookupTable
  9213.   TLUT = array[0..255] of Byte;
  9214.  
  9215.   IDXLookupTable = interface(IDXBaseObject)
  9216.     ['{01BAFC7F-9E63-11D1-9053-00C04FD9189D}']
  9217.     function  GetTables(RedLUT: TLUT; GreenLUT: TLUT; BlueLUT: TLUT; AlphaLUT: TLUT): HResult; stdcall;
  9218.     function  IsChannelIdentity(out pSampleBools: TDXBASESAMPLE): HResult; stdcall;
  9219.     function  GetIndexValues(Index: ULONG; out pSample: TDXBASESAMPLE): HResult; stdcall;
  9220.     function  ApplyTables(var pSamples: TDXSAMPLE; cSamples: ULONG): HResult; stdcall;
  9221.   end;
  9222.  
  9223.   TDXSURFMODCOMPOP = TOleEnum;
  9224. const
  9225.   DXSURFMOD_COMP_OVER        = 0;
  9226.   DXSURFMOD_COMP_ALPHA_MASK = 1;
  9227.   DXSURFMOD_COMP_MAX_VALID  = 1;
  9228.  
  9229. type
  9230.   IDXSurfaceModifier = interface(IUnknown)
  9231.     ['{9EA3B637-C37D-11D1-905E-00C04FD9189D}']
  9232.     function  SetFillColor(Color: TDXSAMPLE): HResult; stdcall;
  9233.     function  GetFillColor(out pColor: TDXSAMPLE): HResult; stdcall;
  9234.     function  SetBounds(var pBounds: TDXBNDS): HResult; stdcall;
  9235.     function  SetBackground(pSurface: IDXSurface): HResult; stdcall;
  9236.     function  GetBackground(out ppSurface: IDXSurface): HResult; stdcall;
  9237.     function  SetCompositeOperation(CompOp: TDXSURFMODCOMPOP): HResult; stdcall;
  9238.     function  GetCompositeOperation(out pCompOp: TDXSURFMODCOMPOP): HResult; stdcall;
  9239.     function  SetForeground(pSurface: IDXSurface; bTile: BOOL; var pOrigin: TPOINT): HResult; stdcall;
  9240.     function  GetForeground(out ppSurface: IDXSurface; out pbTile: BOOL; out pOrigin: TPOINT): HResult; stdcall;
  9241.     function  SetOpacity(Opacity: Single): HResult; stdcall;
  9242.     function  GetOpacity(out pOpacity: Single): HResult; stdcall;
  9243.     function  SetLookup(pLookupTable: IDXLookupTable): HResult; stdcall;
  9244.     function  GetLookup(out ppLookupTable: IDXLookupTable): HResult; stdcall;
  9245.   end;
  9246.  
  9247.   IDXSurfaceInit = interface(IUnknown)
  9248.     ['{9EA3B639-C37D-11d1-905E-00C04FD9189D}']
  9249.     function InitSurface(pDirectDraw: IUnknown; var pDDSurfaceDesc: TDDSURFACEDESC;
  9250.                const pFormatID: TGUID; var pBounds: TDXBNDS; dwFlags: DWORD): HResult; stdcall;
  9251.   end;
  9252.  
  9253.   TDXRAWSURFACEINFO = record
  9254.     pFirstByte   : PBYTE;
  9255.     lPitch       : LongInt;
  9256.     Width        : ULONG;
  9257.     Height       : ULONG;
  9258.     pPixelFormat : PGUID;
  9259.     hdc          : HDC;
  9260.     dwColorKey   : DWORD;
  9261.     pPalette     : ^TDXBASESAMPLE;
  9262.   end;
  9263.  
  9264.   IDXRawSurface = interface(IUnknown)
  9265.     ['{09756C8A-D96A-11d1-9062-00C04FD9189D}']
  9266.     function GetSurfaceInfo(var pSurfaceInfo: TDXRAWSURFACEINFO): HResult; stdcall;
  9267.   end;
  9268.  
  9269.   IDXARGBSurfaceInit = interface(IDXSurfaceInit)
  9270.     ['{9EA3B63A-C37D-11d1-905E-00C04FD9189D}']
  9271.     function InitFromDDSurface(pDDrawSurface: IUnknown; const pFormatID: TGUID;
  9272.                dwFlags: DWORD): HResult; stdcall;
  9273.     function InitFromRawSurface(pRawSurface: IDXRawSurface): HResult; stdcall;
  9274.   end;
  9275.  
  9276.   TDXNATIVETYPEINFO = record
  9277.     pCurrentData : ^BYTE;
  9278.     pFirstByte   : ^PBYTE;
  9279.     lPitch       : LongInt;
  9280.     dwColorKey   : DWORD;
  9281.   end;
  9282.  
  9283.   TDXPACKEDRECTDESC = record
  9284.     pSamples    : ^TDXBASESAMPLE;
  9285.     bPremult    : BOOL;
  9286.     rect        : TRECT;
  9287.     lRowPadding : LongInt;
  9288.   end;
  9289.  
  9290.   TDXOVERSAMPLEDESC = record
  9291.     p     : TPOINT;
  9292.     Color : TDXPMSAMPLE;
  9293.   end;
  9294.  
  9295.   IDXARGBReadPtr = interface(IUnknown)
  9296.     ['{EAAAC2D6-C290-11d1-905D-00C04FD9189D}']
  9297.     function GetSurface(const riid: TGUID; out ppSurface: pointer): HResult; stdcall;
  9298.     function GetNativeType(out pInfo: TDXNATIVETYPEINFO): TDXSAMPLEFORMATENUM; stdcall;
  9299.     procedure Move(cSamples: LongInt); stdcall;
  9300.     procedure MoveToRow(y: ULONG); stdcall;
  9301.     procedure MoveToXY(x, y: ULONG); stdcall;
  9302.     function MoveAndGetRunInfo(Row: ULONG; out ppInfo: PDXRUNINFO): ULONG; stdcall;
  9303.     function Unpack(var pSamples: TDXSAMPLE; cSamples: ULONG; bMove: BOOL): TDXSAMPLE; stdcall;
  9304.     function UnpackPremult(var pSamples: TDXPMSAMPLE; cSamples: ULONG; bMove: BOOL): TDXPMSAMPLE; stdcall;
  9305.     procedure UnpackRect(var pRectDesc: TDXPACKEDRECTDESC); stdcall;
  9306.   end;
  9307.  
  9308.   IDXARGBReadWritePtr = interface(IDXARGBReadPtr)
  9309.     ['{EAAAC2D7-C290-11d1-905D-00C04FD9189D}']
  9310.     procedure PackAndMove(var pSamples: TDXSAMPLE; cSamples: ULONG); stdcall;
  9311.     procedure PackPremultAndMove(var pSamples: TDXPMSAMPLE; cSamples: ULONG); stdcall;
  9312.     procedure PackRect(var pRectDesc: TDXPACKEDRECTDESC); stdcall;
  9313.     procedure CopyAndMoveBoth(var pScratchBuffer: TDXBASESAMPLE; pSrc: IDXARGBReadPtr;
  9314.                 cSamples: ULONG; bIsOpaque: BOOL); stdcall;
  9315.     procedure CopyRect(var pScratchBuffer: TDXBASESAMPLE; var pDestRect: TRECT;
  9316.                 pSrc: IDXARGBReadPtr; var pSrcOrigin: TPOINT; bIsOpaque: BOOL); stdcall;
  9317.     procedure FillAndMove(var pScratchBuffer: TDXBASESAMPLE; SampVal: TDXPMSAMPLE;
  9318.                 cSamples: ULONG; bDoOver: BOOL); stdcall;
  9319.     procedure FillRect(var pRect: TRECT; SampVal: TDXPMSAMPLE; bDoOver: BOOL); stdcall;
  9320.     procedure OverSample(var pOverDesc: TDXOVERSAMPLEDESC); stdcall;
  9321.     procedure OverArrayAndMove(var pScratchBuffer: TDXBASESAMPLE; var pSrc: TDXPMSAMPLE;
  9322.                 cSamples: ULONG); stdcall;
  9323.   end;
  9324.  
  9325.   IDXTScaleOutput = interface(IUnknown)
  9326.     ['{B2024B50-EE77-11D1-9066-00C04FD9189D}']
  9327.     function  SetOutputSize(const OutSize: SIZE; bMaintainAspect: BOOL): HResult; stdcall;
  9328.   end;
  9329.  
  9330.   IDXGradient = interface(IDXTScaleOutput)
  9331.     ['{B2024B51-EE77-11D1-9066-00C04FD9189D}']
  9332.     function SetGradient(StartColor: TDXSAMPLE; EndColor: TDXSAMPLE; bHorizontal: BOOL): HResult; stdcall;
  9333.     function GetOutputSize(out pOutSize: SIZE): HResult; stdcall;
  9334.   end;
  9335.  
  9336.   TScales = array[0..1] of Single;
  9337.   IDXTScale = interface(IUnknown)
  9338.     ['{B39FD742-E139-11D1-9065-00C04FD9189D}']
  9339.     function SetScales(var Scales: TScales): HResult; stdcall;
  9340.     function GetScales(out Scales: TScales): HResult; stdcall;
  9341.     function ScaleFitToSize(var pClipBounds: TDXBNDS; FitToSize: SIZE; bMaintainAspect: BOOL): HResult; stdcall;
  9342.   end;
  9343.  
  9344.   TDISPIDDXEFFECT = TOleEnum;
  9345. const
  9346.   DISPID_DXECAPABILITIES = 10000;
  9347.   DISPID_DXEPROGRESS     = DISPID_DXECAPABILITIES + 1;
  9348.   DISPID_DXESTEP         = DISPID_DXEPROGRESS + 1;
  9349.   DISPID_DXEDURATION     = DISPID_DXESTEP + 1;
  9350.   DISPID_DXE_NEXT_ID     = DISPID_DXEDURATION + 1;
  9351.  
  9352. type
  9353.   TDXEFFECTTYPE = TOleEnum;
  9354. const
  9355.   DXTET_PERIODIC = 1 shl 0;
  9356.   DXTET_MORPH     = 1 shl 1;
  9357.  
  9358. type
  9359.   IDXEffect = interface(IDispatch)
  9360.     ['{E31FB81B-1335-11d1-8189-0000F87557DB}']
  9361.     function get_Capabilities(out pVal: LongInt): HResult; stdcall;
  9362.     function get_Progress(out pVal: Single): HResult; stdcall;
  9363.     function put_Progress(newVal: Single): HResult; stdcall;
  9364.     function get_StepResolution(out pVal: Single): HResult; stdcall;
  9365.     function get_Duration(out pVal: Single): HResult; stdcall;
  9366.     function put_Duration(newVal: Single): HResult; stdcall;
  9367.   end;
  9368.  
  9369.   IHTMLDXTransform = interface(IUnknown)
  9370.     ['{30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5}']
  9371.     function SetHostUrl(bstrHostUrl: WideString): HResult; stdcall;
  9372.   end;
  9373.  
  9374. // CoClasses
  9375.  
  9376.   CoDXTransformFactory = class
  9377.     class function Create: IDXTransformFactory;
  9378.     class function CreateRemote(const MachineName: string): IDXTransformFactory;
  9379.   end;
  9380.  
  9381.   CoDXTaskManager = class
  9382.     class function Create: IDXTaskManager;
  9383.     class function CreateRemote(const MachineName: string): IDXTaskManager;
  9384.   end;
  9385.  
  9386.   CoDXTScale = class
  9387.     class function Create: IDXTScale;
  9388.     class function CreateRemote(const MachineName: string): IDXTScale;
  9389.   end;
  9390.  
  9391.   CoDXSurface = class
  9392.     class function Create: IDXSurface;
  9393.     class function CreateRemote(const MachineName: string): IDXSurface;
  9394.   end;
  9395.  
  9396.   CoDXSurfaceModifier = class
  9397.     class function Create: IDXSurfaceModifier;
  9398.     class function CreateRemote(const MachineName: string): IDXSurfaceModifier;
  9399.   end;
  9400.  
  9401.   CoDXGradient = class
  9402.     class function Create: IDXGradient;
  9403.     class function CreateRemote(const MachineName: string): IDXGradient;
  9404.   end;
  9405.  
  9406. //------------------------------------------------------------------------------
  9407. // File: QEdit.h
  9408. // Desc: Dexter library (DES)
  9409. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  9410. //------------------------------------------------------------------------------
  9411. const
  9412.   LIBID_DexterLib: TGUID = '{78530B68-61F9-11D2-8CAD-00A024580902}';
  9413.  
  9414.   IID_IPropertySetter         : TGUID = '{AE9472BD-B0C3-11D2-8D24-00A0C9441E20}';
  9415.   IID_IDxtCompositor          : TGUID = '{BB44391E-6ABD-422F-9E2E-385C9DFF51FC}';
  9416.   IID_IDxtAlphaSetter         : TGUID = '{4EE9EAD9-DA4D-43D0-9383-06B90C08B12B}';
  9417.   IID_IDxtJpeg                : TGUID = '{DE75D011-7A65-11D2-8CEA-00A0C9441E20}';
  9418.   IID_IDxtKey                 : TGUID = '{3255DE56-38FB-4901-B980-94B438010D7B}';
  9419.   IID_IMediaLocator           : TGUID = '{288581E0-66CE-11D2-918F-00C0DF10D434}';
  9420.   IID_IMediaDet               : TGUID = '{65BD0710-24D2-4FF7-9324-ED2E5D3ABAFA}';
  9421.   IID_IGrfCache               : TGUID = '{AE9472BE-B0C3-11D2-8D24-00A0C9441E20}';
  9422.   IID_IRenderEngine           : TGUID = '{6BEE3A81-66C9-11D2-918F-00C0DF10D434}';
  9423.   IID_IFindCompressorCB       : TGUID = '{F03FA8DE-879A-4D59-9B2C-26BB1CF83461}';
  9424.   IID_ISmartRenderEngine      : TGUID = '{F03FA8CE-879A-4D59-9B2C-26BB1CF83461}';
  9425.   IID_IAMTimelineObj          : TGUID = '{78530B77-61F9-11D2-8CAD-00A024580902}';
  9426.   IID_IAMTimelineEffectable   : TGUID = '{EAE58537-622E-11D2-8CAD-00A024580902}';
  9427.   IID_IAMTimelineEffect       : TGUID = '{BCE0C264-622D-11D2-8CAD-00A024580902}';
  9428.   IID_IAMTimelineTransable    : TGUID = '{378FA386-622E-11D2-8CAD-00A024580902}';
  9429.   IID_IAMTimelineSplittable   : TGUID = '{A0F840A0-D590-11D2-8D55-00A0C9441E20}';
  9430.   IID_IAMTimelineTrans        : TGUID = '{BCE0C265-622D-11D2-8CAD-00A024580902}';
  9431.   IID_IAMTimelineSrc          : TGUID = '{78530B79-61F9-11D2-8CAD-00A024580902}';
  9432.   IID_IAMTimelineTrack        : TGUID = '{EAE58538-622E-11D2-8CAD-00A024580902}';
  9433.   IID_IAMTimelineVirtualTrack : TGUID = '{A8ED5F80-C2C7-11D2-8D39-00A0C9441E20}';
  9434.   IID_IAMTimelineComp         : TGUID = '{EAE58536-622E-11D2-8CAD-00A024580902}';
  9435.   IID_IAMTimelineGroup        : TGUID = '{9EED4F00-B8A6-11D2-8023-00C0DF10D434}';
  9436.   IID_IAMTimeline             : TGUID = '{78530B74-61F9-11D2-8CAD-00A024580902}';
  9437.   IID_IXml2Dex                : TGUID = '{18C628ED-962A-11D2-8D08-00A0C9441E20}';
  9438.   IID_IAMErrorLog             : TGUID = '{E43E73A2-0EFA-11D3-9601-00A0C9441E20}';
  9439.   IID_IAMSetErrorLog          : TGUID = '{963566DA-BE21-4EAF-88E9-35704F8F52A1}';
  9440.   IID_ISampleGrabberCB        : TGUID = '{0579154A-2B53-4994-B0D0-E773148EFF85}';
  9441.   IID_ISampleGrabber          : TGUID = '{6B652FFF-11FE-4FCE-92AD-0266B5D7C78F}';
  9442.  
  9443.   CLSID_AMTimeline            : TGUID = '{78530B75-61F9-11D2-8CAD-00A024580902}';
  9444.   CLSID_AMTimelineObj         : TGUID = '{78530B78-61F9-11D2-8CAD-00A024580902}';
  9445.   CLSID_AMTimelineSrc         : TGUID = '{78530B7A-61F9-11D2-8CAD-00A024580902}';
  9446.   CLSID_AMTimelineTrack       : TGUID = '{8F6C3C50-897B-11D2-8CFB-00A0C9441E20}';
  9447.   CLSID_AMTimelineComp        : TGUID = '{74D2EC80-6233-11D2-8CAD-00A024580902}';
  9448.   CLSID_AMTimelineGroup       : TGUID = '{F6D371E1-B8A6-11D2-8023-00C0DF10D434}';
  9449.   CLSID_AMTimelineTrans       : TGUID = '{74D2EC81-6233-11D2-8CAD-00A024580902}';
  9450.   CLSID_AMTimelineEffect      : TGUID = '{74D2EC82-6233-11D2-8CAD-00A024580902}';
  9451.   CLSID_RenderEngine          : TGUID = '{64D8A8E0-80A2-11D2-8CF3-00A0C9441E20}';
  9452.   CLSID_SmartRenderEngine     : TGUID = '{498B0949-BBE9-4072-98BE-6CCAEB79DC6F}';
  9453.   CLSID_AudMixer              : TGUID = '{036A9790-C153-11D2-9EF7-006008039E37}';
  9454.   CLSID_Xml2Dex               : TGUID = '{18C628EE-962A-11D2-8D08-00A0C9441E20}';
  9455.   CLSID_MediaLocator          : TGUID = '{CC1101F2-79DC-11D2-8CE6-00A0C9441E20}';
  9456.   CLSID_PropertySetter        : TGUID = '{ADF95821-DED7-11D2-ACBE-0080C75E246E}';
  9457.   CLSID_MediaDet              : TGUID = '{65BD0711-24D2-4FF7-9324-ED2E5D3ABAFA}';
  9458.   CLSID_SampleGrabber         : TGUID = '{C1F400A0-3F08-11D3-9F0B-006008039E37}';
  9459.   CLSID_NullRenderer          : TGUID = '{C1F400A4-3F08-11D3-9F0B-006008039E37}';
  9460.   CLSID_DxtCompositor         : TGUID = '{BB44391D-6ABD-422F-9E2E-385C9DFF51FC}';
  9461.   CLSID_DxtAlphaSetter        : TGUID = '{506D89AE-909A-44F7-9444-ABD575896E35}';
  9462.   CLSID_DxtJpeg               : TGUID = '{DE75D012-7A65-11D2-8CEA-00A0C9441E20}';
  9463.   CLSID_ColorSource           : TGUID = '{0CFDD070-581A-11D2-9EE6-006008039E37}';
  9464.   CLSID_DxtKey                : TGUID = '{C5B19592-145E-11D3-9F04-006008039E37}';
  9465.  
  9466. type
  9467. TDEXTERF = (
  9468.         DEXTERF_JUMP,
  9469.     DEXTERF_INTERPOLATE
  9470.          );
  9471.  
  9472. TDEXTER_PARAM = record
  9473.     Name    : WideString ;
  9474.     dispID  : longint;
  9475.     nValues : longint;
  9476.     end;
  9477. PDEXTER_PARAM = ^TDEXTER_PARAM;
  9478.  
  9479. TDEXTER_VALUE = record
  9480.     v        : OLEVARIANT ;
  9481.     rt       : TREFERENCE_TIME ;
  9482.     dwInterp : DWORD ;
  9483.     end;
  9484. PDEXTER_VALUE = ^TDEXTER_VALUE;
  9485.  
  9486. const
  9487.      DEXTER_AUDIO_JUMP            = 0;
  9488.      DEXTER_AUDIO_INTERPOLATE    = DEXTER_AUDIO_JUMP + 1;
  9489.  
  9490. type
  9491. TDEXTER_AUDIO_VOLUMEENVELOPE = record
  9492.     rtEnd   : TREFERENCE_TIME ;
  9493.     dLevel  : double ;
  9494.     bMethod : BOOL ;
  9495.     end;
  9496.  
  9497. const
  9498.      TIMELINE_INSERT_MODE_INSERT    = 1;
  9499.      TIMELINE_INSERT_MODE_OVERLAY    = 2;
  9500.  
  9501. // TIMELINE_MAJOR_TYPE
  9502.         TIMELINE_MAJOR_TYPE_COMPOSITE    = 1;
  9503.     TIMELINE_MAJOR_TYPE_TRACK    = 2;
  9504.     TIMELINE_MAJOR_TYPE_SOURCE    = 4;
  9505.     TIMELINE_MAJOR_TYPE_TRANSITION    = 8;
  9506.     TIMELINE_MAJOR_TYPE_EFFECT    = 16;
  9507.     TIMELINE_MAJOR_TYPE_GROUP    = 128;
  9508.  
  9509. // DEXTERF_TRACK_SEARCH_FLAGS
  9510.         DEXTERF_BOUNDING    = -1;
  9511.     DEXTERF_EXACTLY_AT    = 0;
  9512.     DEXTERF_FORWARDS    = 1;
  9513.  
  9514. type
  9515. TSCompFmt0 = record
  9516.     nFormatId : longint ;
  9517.     MediaType : TAM_MEDIA_TYPE ;
  9518.     end;
  9519.  
  9520. const
  9521.         RESIZEF_STRETCH                            = 0;
  9522.     RESIZEF_CROP                            = RESIZEF_STRETCH + 1;
  9523.     RESIZEF_PRESERVEASPECTRATIO            = RESIZEF_CROP + 1;
  9524.     RESIZEF_PRESERVEASPECTRATIO_NOLETTERBOX    = RESIZEF_PRESERVEASPECTRATIO + 1;
  9525.  
  9526.         CONNECTF_DYNAMIC_NONE     = 0;
  9527.     CONNECTF_DYNAMIC_SOURCES = $1;
  9528.     CONNECTF_DYNAMIC_EFFECTS = $2;
  9529.  
  9530.        SFN_VALIDATEF_CHECK       = $1;
  9531.     SFN_VALIDATEF_POPUP      = $2;
  9532.     SFN_VALIDATEF_TELLME      = $4;
  9533.     SFN_VALIDATEF_REPLACE      = $8;
  9534.     SFN_VALIDATEF_USELOCAL      = $10;
  9535.     SFN_VALIDATEF_NOFIND      = $20;
  9536.     SFN_VALIDATEF_IGNOREMUTED = $40;
  9537.     SFN_VALIDATEF_END      = SFN_VALIDATEF_IGNOREMUTED + 1;
  9538.  
  9539.         DXTKEY_RGB     = 0;
  9540.     DXTKEY_NONRED     = DXTKEY_RGB + 1;
  9541.     DXTKEY_LUMINANCE = DXTKEY_NONRED + 1;
  9542.     DXTKEY_ALPHA     = DXTKEY_LUMINANCE + 1;
  9543.     DXTKEY_HUE     = DXTKEY_ALPHA + 1;
  9544.  
  9545. type
  9546. //lookat
  9547.   IPropertySetter = interface(IUnknown)
  9548.     ['{AE9472BD-B0C3-11D2-8D24-00A0C9441E20}']
  9549.     function  LoadXML(pxml: IUnknown): HResult; stdcall;
  9550.     function  PrintXML(out pszXML: pchar; cbXML: integer; out pcbPrinted: pinteger; indent: integer): HResult; stdcall;
  9551.     function  CloneProps(out ppSetter: IPropertySetter; rtStart, rtStop: TREFERENCE_TIME): HResult; stdcall;
  9552.     function  AddProp(Param: TDEXTER_PARAM; var paValue: TDEXTER_VALUE): HResult; stdcall;
  9553.     function  GetProps(out pcParams: longint; out paParam: PDEXTER_PARAM; out paValue: PDEXTER_VALUE): HResult; stdcall;
  9554.     function  FreeProps(cParams: longint; var paParam: TDEXTER_PARAM; var paValue: TDEXTER_VALUE): HResult; stdcall;
  9555.     function  ClearProps: HResult; stdcall;
  9556.     function  SaveToBlob(out pcSize: longint; out ppb: pbyte): HResult; stdcall;
  9557.     function  LoadFromBlob(cSize: longint; var pb: Byte): HResult; stdcall;
  9558.     function  SetProps(pTarget: IUnknown; rtNow: TREFERENCE_TIME): HResult; stdcall;
  9559.   end;
  9560.  
  9561.   IDxtCompositor = interface(IDXEffect)
  9562.     ['{BB44391E-6ABD-422F-9E2E-385C9DFF51FC}']
  9563.     function get_OffsetX(out pVal: longint): HRESULT; stdcall;
  9564.     function put_OffsetX(newVal: longint): HRESULT; stdcall;
  9565.     function get_OffsetY(out pVal: longint): HRESULT; stdcall;
  9566.     function put_OffsetY(newVal: longint): HRESULT; stdcall;
  9567.     function get_Width(out pVal: longint): HRESULT; stdcall;
  9568.     function put_Width(newVal: longint): HRESULT; stdcall;
  9569.     function get_Height(out pVal: longint): HRESULT; stdcall;
  9570.     function put_Height(newVal: longint): HRESULT; stdcall;
  9571.     function get_SrcOffsetX(out pVal: longint): HRESULT; stdcall;
  9572.     function put_SrcOffsetX(newVal: longint): HRESULT; stdcall;
  9573.     function get_SrcOffsetY(out pVal: longint): HRESULT; stdcall;
  9574.     function put_SrcOffsetY(newVal: longint): HRESULT; stdcall;
  9575.     function get_SrcWidth(out pVal: longint): HRESULT; stdcall;
  9576.     function put_SrcWidth(newVal: longint): HRESULT; stdcall;
  9577.     function get_SrcHeight(out pVal: longint): HRESULT; stdcall;
  9578.     function put_SrcHeight(newVal: longint): HRESULT; stdcall;
  9579.   end;
  9580.  
  9581.   IDxtAlphaSetter = interface(IDXEffect)
  9582.     ['{4EE9EAD9-DA4D-43D0-9383-06B90C08B12B}']
  9583.     function get_Alpha(out pVal: longint): HRESULT; stdcall;
  9584.     function put_Alpha(newVal: longint): HRESULT; stdcall;
  9585.     function get_AlphaRamp(out pVal: Double): HRESULT; stdcall;
  9586.     function put_AlphaRamp(newVal: Double): HRESULT; stdcall;
  9587.   end;
  9588.  
  9589.   IDxtJpeg = interface(IDXEffect)
  9590.     ['{DE75D011-7A65-11D2-8CEA-00A0C9441E20}']
  9591.     function get_MaskNum(out pVal: longint): HRESULT; stdcall;
  9592.     function put_MaskNum(newVal: longint): HRESULT; stdcall;
  9593.     function get_MaskName(out pVal: WideString): HRESULT; stdcall;
  9594.     function put_MaskName(newVal: WideString): HRESULT; stdcall;
  9595.     function get_ScaleX(out pVal: Double): HRESULT; stdcall;
  9596.     function put_ScaleX(newVal: Double): HRESULT; stdcall;
  9597.     function get_ScaleY(out pVal: Double): HRESULT; stdcall;
  9598.     function put_ScaleY(newVal: Double): HRESULT; stdcall;
  9599.     function get_OffsetX(out pVal: longint): HRESULT; stdcall;
  9600.     function put_OffsetX(newVal: longint): HRESULT; stdcall;
  9601.     function get_OffsetY(out pVal: longint): HRESULT; stdcall;
  9602.     function put_OffsetY(newVal: longint): HRESULT; stdcall;
  9603.     function get_ReplicateX(out pVal: longint): HRESULT; stdcall;
  9604.     function put_ReplicateX(newVal: longint): HRESULT; stdcall;
  9605.     function get_ReplicateY(out pVal: longint): HRESULT; stdcall;
  9606.     function put_ReplicateY(newVal: longint): HRESULT; stdcall;
  9607.     function get_BorderColor(out pVal: longint): HRESULT; stdcall;
  9608.     function put_BorderColor(newVal: longint): HRESULT; stdcall;
  9609.     function get_BorderWidth(out pVal: longint): HRESULT; stdcall;
  9610.     function put_BorderWidth(newVal: longint): HRESULT; stdcall;
  9611.     function get_BorderSoftness(out pVal: longint): HRESULT; stdcall;
  9612.     function put_BorderSoftness(newVal: longint): HRESULT; stdcall;
  9613.     function ApplyChanges: HRESULT; stdcall;
  9614.     function LoadDefSettings: HRESULT; stdcall;
  9615.   end;
  9616.  
  9617.   IDxtKey = interface(IDXEffect)
  9618.     ['{3255DE56-38FB-4901-B980-94B438010D7B}']
  9619.     function get_KeyType(out pVal: integer): HRESULT; stdcall;
  9620.     function put_KeyType(newVal: integer): HRESULT; stdcall;
  9621.     function get_Hue(out pVal: integer): HRESULT; stdcall;
  9622.     function put_Hue(newVal: integer): HRESULT; stdcall;
  9623.     function get_Luminance(out pVal: integer): HRESULT; stdcall;
  9624.     function put_Luminance(newVal: integer): HRESULT; stdcall;
  9625.     function get_RGB(out pVal: DWORD): HRESULT; stdcall;
  9626.     function put_RGB(newVal: DWORD): HRESULT; stdcall;
  9627.     function get_Similarity(out pVal: integer): HRESULT; stdcall;
  9628.     function put_Similarity(newVal: integer): HRESULT; stdcall;
  9629.     function get_Invert(out pVal: BOOL): HRESULT; stdcall;
  9630.     function put_Invert(newVal: BOOL): HRESULT; stdcall;
  9631.   end;
  9632.  
  9633.   //lookat
  9634.   IMediaLocator = interface(IUnknown)
  9635.     ['{288581E0-66CE-11D2-918F-00C0DF10D434}']
  9636.     function  FindMediaFile(Input: WideString; FilterString: WideString;
  9637.                 var pOutput: PWideString; Flags: longint): HResult; stdcall;
  9638.     function  AddFoundLocation(DirectoryName: WideString): HResult; stdcall;
  9639.   end;
  9640.  
  9641.   ISampleGrabber = interface;
  9642.  
  9643.   IMediaDet = interface(IUnknown)
  9644.     ['{65BD0710-24D2-4FF7-9324-ED2E5D3ABAFA}']
  9645.     function get_Filter(out pVal: IUnknown): HResult; stdcall;
  9646.     function put_Filter(newVal: IUnknown): HResult; stdcall;
  9647.     function get_OutputStreams(out pVal: longint): HResult; stdcall;
  9648.     function get_CurrentStream(out pVal: longint): HResult; stdcall;
  9649.     function put_CurrentStream(newVal: longint): HResult; stdcall;
  9650.     function get_StreamType(out pVal: TGUID): HResult; stdcall;
  9651.     function get_StreamTypeB(out pVal: WideString): HResult; stdcall;
  9652.     function get_StreamLength(out pVal: Double): HResult; stdcall;
  9653.     function get_Filename(out pVal: WideString): HResult; stdcall;
  9654.     function put_Filename(pVal: WideString): HResult; stdcall;
  9655.     function GetBitmapBits(streamTime: Double; var pBufferSize: longint; var pBuffer: Pchar;
  9656.              Width: longint; Height: longint): HResult; stdcall;
  9657.     function WriteBitmapBits(streamTime: Double; Width: longint; Height: longint;
  9658.              Filename: WideString): HResult; stdcall;
  9659.     function get_StreamMediaType(out pVal: TAM_MEDIA_TYPE): HResult; stdcall;
  9660.     function GetSampleGrabber(out ppVal: ISampleGrabber): HResult; stdcall;
  9661.     function get_FrameRate(out pVal: Double): HResult; stdcall;
  9662.     function EnterBitmapGrabMode(SeekTime: Double): HResult; stdcall;
  9663.   end;
  9664.  
  9665.   IGrfCache = interface(IDispatch)
  9666.     ['{AE9472BE-B0C3-11D2-8D24-00A0C9441E20}']
  9667.     function AddFilter(ChainedCache: IGrfCache; Id: Int64; const pFilter: IBaseFilter;
  9668.              pName: PWideChar): HResult; stdcall;
  9669.     function ConnectPins(ChainedCache: IGrfCache; PinID1: Int64; const pPin1: IPin;
  9670.              PinID2: Int64; const pPin2: IPin): HResult; stdcall;
  9671.     function SetGraph(const pGraph: IGraphBuilder): HResult; stdcall;
  9672.     function DoConnectionsNow: HResult; stdcall;
  9673.   end;
  9674.  
  9675.   IAMTimeline = interface;
  9676.  
  9677.   IRenderEngine = interface(IUnknown)
  9678.     ['{6BEE3A81-66C9-11D2-918F-00C0DF10D434}']
  9679.     function SetTimelineObject(pTimeline: IAMTimeline): HResult; stdcall;
  9680.     function GetTimelineObject(out ppTimeline: IAMTimeline): HResult; stdcall;
  9681.     function GetFilterGraph(out ppFG: IGraphBuilder): HResult; stdcall;
  9682.     function SetFilterGraph(pFG: IGraphBuilder): HResult; stdcall;
  9683.     function SetInterestRange(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9684.     function SetInterestRange2(Start, Stop: Double): HResult; stdcall;
  9685.     function SetRenderRange(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9686.     function SetRenderRange2(Start, Stop: Double): HResult; stdcall;
  9687.     function GetGroupOutputPin(Group: longint; out ppRenderPin: IPin): HResult; stdcall;
  9688.     function ScrapIt: HResult; stdcall;
  9689.     function RenderOutputPins: HResult; stdcall;
  9690.     function GetVendorString(out pVendorID: WideString): HResult; stdcall;
  9691.     function ConnectFrontEnd: HResult; stdcall;
  9692.     function SetSourceConnectCallback(pCallback: IGrfCache): HResult; stdcall;
  9693.     function SetDynamicReconnectLevel(Level: longint): HResult; stdcall;
  9694.     function DoSmartRecompression: HResult; stdcall;
  9695.     function UseInSmartRecompressionGraph: HResult; stdcall;
  9696.     function SetSourceNameValidation(const FilterString: WideString;
  9697.              pOverride: IMediaLocator; Flags: longint): HResult; stdcall;
  9698.     function Commit: HResult; stdcall;
  9699.     function Decommit: HResult; stdcall;
  9700.     function GetCaps(Index: longint; var pReturn: longint): HResult; stdcall;
  9701.   end;
  9702.  
  9703.   IFindCompressorCB = interface(IUnknown)
  9704.     ['{F03FA8DE-879A-4D59-9B2C-26BB1CF83461}']
  9705.     function GetCompressor(var pType: TAM_MEDIA_TYPE; var pCompType: TAM_MEDIA_TYPE;
  9706.                             out ppFilter: IBaseFilter): HResult; stdcall;
  9707.   end;
  9708.  
  9709.   ISmartRenderEngine = interface(IUnknown)
  9710.     ['{F03FA8CE-879A-4D59-9B2C-26BB1CF83461}']
  9711.     function SetGroupCompressor(Group: longint; pCompressor: IBaseFilter): HResult; stdcall;
  9712.     function GetGroupCompressor(Group: longint; var pCompressor: IBaseFilter): HResult; stdcall;
  9713.     function SetFindCompressorCB(pCallback: IFindCompressorCB): HResult; stdcall;
  9714.   end;
  9715.  
  9716.   IAMTimelineGroup = interface;
  9717. //lookat
  9718.   IAMTimelineObj = interface(IUnknown)
  9719.     ['{78530B77-61F9-11D2-8CAD-00A024580902}']
  9720.     function GetStartStop(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9721.     function GetStartStop2(var pStart, pStop: TREFTIME): HResult; stdcall;
  9722.     function FixTimes(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9723.     function FixTimes2(var pStart, pStop: TREFTIME): HResult; stdcall;
  9724.     function SetStartStop(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9725.     function SetStartStop2(Start, Stop: TREFTIME): HResult; stdcall;
  9726.     function GetPropertySetter(out pVal: IPropertySetter): HResult; stdcall;
  9727.     function SetPropertySetter(newVal: IPropertySetter): HResult; stdcall;
  9728.     function GetSubObject(out pVal: IUnknown): HResult; stdcall;
  9729.     function SetSubObject(newVal: IUnknown): HResult; stdcall;
  9730.     function SetSubObjectGUID(const newVal: TGUID): HResult; stdcall;
  9731.     function SetSubObjectGUIDB(const newVal: WideString): HResult; stdcall;
  9732.     function GetSubObjectGUID(var pVal: TGUID): HResult; stdcall;
  9733.     function GetSubObjectGUIDB(out pVal: WideString): HResult; stdcall;
  9734.     function GetSubObjectLoaded(var pVal: BOOL): HResult; stdcall;
  9735.     function GetTimelineType(var pVal: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9736.     function SetTimelineType(newVal: integer): HResult; stdcall;   // TIMELINE_MAJOR_TYPE
  9737.     function GetUserID(var pVal: longint): HResult; stdcall;
  9738.     function SetUserID(newVal: longint): HResult; stdcall;
  9739.     function GetGenID(var pVal: longint): HResult; stdcall;
  9740.     function GetUserName(out pVal: WideString): HResult; stdcall;
  9741.     function SetUserName(const newVal: WideString): HResult; stdcall;
  9742.     function GetUserData(var pData: PByte; var pSize: Integer): HResult; stdcall;
  9743.     function SetUserData(var pData: Byte; Size: Integer): HResult; stdcall;
  9744.     function GetMuted(var pVal: BOOL): HResult; stdcall;
  9745.     function SetMuted(newVal: BOOL): HResult; stdcall;
  9746.     function GetLocked(var pVal: BOOL): HResult; stdcall;
  9747.     function SetLocked(newVal: BOOL): HResult; stdcall;
  9748.     function GetDirtyRange(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9749.     function GetDirtyRange2(var pStart, pStop: TREFTIME): HResult; stdcall;
  9750.     function SetDirtyRange(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9751.     function SetDirtyRange2(Start, Stop: TREFTIME): HResult; stdcall;
  9752.     function ClearDirty: HResult; stdcall;
  9753.     function Remove: HResult; stdcall;
  9754.     function RemoveAll: HResult; stdcall;
  9755.     function GetTimelineNoRef(var ppResult: IAMTimeline): HResult; stdcall;
  9756.     function GetGroupIBelongTo(out ppGroup: IAMTimelineGroup): HResult; stdcall;
  9757.     function GetEmbedDepth(var pVal: longint): HResult; stdcall;
  9758.   end;
  9759.  
  9760.   IAMTimelineEffectable = interface(IUnknown)
  9761.     ['{EAE58537-622E-11D2-8CAD-00A024580902}']
  9762.     function EffectInsBefore(pFX: IAMTimelineObj; priority: longint): HResult; stdcall;
  9763.     function EffectSwapPriorities(PriorityA, PriorityB: longint): HResult; stdcall;
  9764.     function EffectGetCount(var pCount: longint): HResult; stdcall;
  9765.     function GetEffect(out ppFx: IAMTimelineObj; Which: longint): HResult; stdcall;
  9766.   end;
  9767.  
  9768.   IAMTimelineEffect = interface(IUnknown)
  9769.     ['{BCE0C264-622D-11D2-8CAD-00A024580902}']
  9770.     function EffectGetPriority(var pVal: longint): HResult; stdcall;
  9771.   end;
  9772.  
  9773.   IAMTimelineTransable = interface(IUnknown)
  9774.     ['{378FA386-622E-11D2-8CAD-00A024580902}']
  9775.     function TransAdd(pTrans: IAMTimelineObj): HResult; stdcall;
  9776.     function TransGetCount(var pCount: longint): HResult; stdcall;
  9777.     function GetNextTrans(out ppTrans: IAMTimelineObj; var pInOut: TREFERENCE_TIME): HResult; stdcall;
  9778.     function GetNextTrans2(out ppTrans: IAMTimelineObj; var pInOut: TREFTIME): HResult; stdcall;
  9779.     function GetTransAtTime(out ppObj: IAMTimelineObj; Time: TREFERENCE_TIME; SearchDirection: longint): HResult; stdcall;
  9780.     function GetTransAtTime2(out ppObj: IAMTimelineObj; Time: TREFTIME; SearchDirection: longint): HResult; stdcall;
  9781.   end;
  9782.  
  9783.   IAMTimelineSplittable = interface(IUnknown)
  9784.     ['{A0F840A0-D590-11D2-8D55-00A0C9441E20}']
  9785.     function SplitAt(Time: TREFERENCE_TIME): HResult; stdcall;
  9786.     function SplitAt2(Time: TREFTIME): HResult; stdcall;
  9787.   end;
  9788.  
  9789.   IAMTimelineTrans = interface(IUnknown)
  9790.     ['{BCE0C265-622D-11D2-8CAD-00A024580902}']
  9791.     function GetCutPoint(var pTLTime: TREFERENCE_TIME): HResult; stdcall;
  9792.     function GetCutPoint2(var pTLTime: TREFTIME): HResult; stdcall;
  9793.     function SetCutPoint(TLTime: TREFERENCE_TIME): HResult; stdcall;
  9794.     function SetCutPoint2(TLTime: TREFTIME): HResult; stdcall;
  9795.     function GetSwapInputs(var pVal: BOOL): HResult; stdcall;
  9796.     function SetSwapInputs(pVal: BOOL): HResult; stdcall;
  9797.     function GetCutsOnly(var pVal: BOOL): HResult; stdcall;
  9798.     function SetCutsOnly(pVal: BOOL): HResult; stdcall;
  9799.   end;
  9800.  
  9801.   IAMTimelineSrc = interface(IUnknown)
  9802.     ['{78530B79-61F9-11D2-8CAD-00A024580902}']
  9803.     function GetMediaTimes(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9804.     function GetMediaTimes2(var pStart, pStop: TREFTIME): HResult; stdcall;
  9805.     function ModifyStopTime(Stop: TREFERENCE_TIME): HResult; stdcall;
  9806.     function ModifyStopTime2(Stop: TREFTIME): HResult; stdcall;
  9807.     function FixMediaTimes(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9808.     function FixMediaTimes2(var pStart, pStop: TREFTIME): HResult; stdcall;
  9809.     function SetMediaTimes(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9810.     function SetMediaTimes2(Start, Stop: TREFTIME): HResult; stdcall;
  9811.     function SetMediaLength(Length: TREFERENCE_TIME): HResult; stdcall;
  9812.     function SetMediaLength2(Length: TREFTIME): HResult; stdcall;
  9813.     function GetMediaLength(var pLength: TREFERENCE_TIME): HResult; stdcall;
  9814.     function GetMediaLength2(var pLength: TREFTIME): HResult; stdcall;
  9815.     function GetMediaName(out pVal: WideString): HResult; stdcall;
  9816.     function SetMediaName(const newVal: WideString): HResult; stdcall;
  9817.     function SpliceWithNext(pNext: IAMTimelineObj): HResult; stdcall;
  9818.     function GetStreamNumber(var pVal: longint): HResult; stdcall;
  9819.     function SetStreamNumber(Val: longint): HResult; stdcall;
  9820.     function IsNormalRate(var pVal: BOOL): HResult; stdcall;
  9821.     function GetDefaultFPS(var pFPS: Double): HResult; stdcall;
  9822.     function SetDefaultFPS(FPS: Double): HResult; stdcall;
  9823.     function GetStretchMode(var pnStretchMode: integer): HResult; stdcall;
  9824.     function SetStretchMode(nStretchMode: integer): HResult; stdcall;
  9825.   end;
  9826.  
  9827.   IAMTimelineTrack = interface(IUnknown)
  9828.     ['{EAE58538-622E-11D2-8CAD-00A024580902}']
  9829.     function SrcAdd(pSource: IAMTimelineObj): HResult; stdcall;
  9830.     function GetNextSrc(out ppSrc: IAMTimelineObj; var pInOut: TREFERENCE_TIME): HResult; stdcall;
  9831.     function GetNextSrc2(out ppSrc: IAMTimelineObj; var pInOut: TREFTIME): HResult; stdcall;
  9832.     function MoveEverythingBy(Start, MoveBy: TREFERENCE_TIME): HResult; stdcall;
  9833.     function MoveEverythingBy2(Start, MoveBy: TREFTIME): HResult; stdcall;
  9834.     function GetSourcesCount(var pVal: longint): HResult; stdcall;
  9835.     function AreYouBlank(var pVal: longint): HResult; stdcall;
  9836.     function GetSrcAtTime(out ppSrc: IAMTimelineObj; Time: TREFERENCE_TIME; SearchDirection: longint): HResult; stdcall;
  9837.     function GetSrcAtTime2(out ppSrc: IAMTimelineObj; Time: TREFTIME; SearchDirection: longint): HResult; stdcall;
  9838.     function InsertSpace(rtStart, rtEnd: TREFERENCE_TIME): HResult; stdcall;
  9839.     function InsertSpace2(rtStart, rtEnd: TREFTIME): HResult; stdcall;
  9840.     function ZeroBetween(rtStart, rtEnd: TREFERENCE_TIME): HResult; stdcall;
  9841.     function ZeroBetween2(rtStart, rtEnd: TREFTIME): HResult; stdcall;
  9842.     function GetNextSrcEx(pLast: IAMTimelineObj; out ppNext: IAMTimelineObj): HResult; stdcall;
  9843.   end;
  9844.  
  9845.   IAMTimelineVirtualTrack = interface(IUnknown)
  9846.     ['{A8ED5F80-C2C7-11D2-8D39-00A0C9441E20}']
  9847.     function TrackGetPriority(var pPriority: longint): HResult; stdcall;
  9848.     function SetTrackDirty: HResult; stdcall;
  9849.   end;
  9850.  
  9851.   IAMTimelineComp = interface(IUnknown)
  9852.     ['{EAE58536-622E-11D2-8CAD-00A024580902}']
  9853.     function VTrackInsBefore(pVirtualTrack: IAMTimelineObj; priority: longint): HResult; stdcall;
  9854.     function VTrackSwapPriorities(VirtualTrackA, VirtualTrackB: longint): HResult; stdcall;
  9855.     function VTrackGetCount(var pVal: longint): HResult; stdcall;
  9856.     function GetVTrack(out ppVirtualTrack: IAMTimelineObj; Which: longint): HResult; stdcall;
  9857.     function GetCountOfType(var pVal, pValWithComps: longint; majortype: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9858.     function GetRecursiveLayerOfType(out ppVirtualTrack: IAMTimelineObj; WhichLayer: longint;
  9859.              Type_: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9860.     function GetRecursiveLayerOfTypeI(out ppVirtualTrack: IAMTimelineObj;
  9861.              var pWhichLayer: longint; Type_: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9862.     function GetNextVTrack(pVirtualTrack: IAMTimelineObj; out ppNextVirtualTrack: IAMTimelineObj): HResult; stdcall;
  9863.   end;
  9864.  
  9865.   IAMTimelineGroup = interface(IUnknown)
  9866.     ['{9EED4F00-B8A6-11D2-8023-00C0DF10D434}']
  9867.     function SetTimeline(pTimeline: IAMTimeline): HResult; stdcall;
  9868.     function GetTimeline(out ppTimeline: IAMTimeline): HResult; stdcall;
  9869.     function GetPriority(var pPriority: longint): HResult; stdcall;
  9870.     function GetMediaType(out value: TAM_MEDIA_TYPE): HResult; stdcall;
  9871.     function SetMediaType(var value: TAM_MEDIA_TYPE): HResult; stdcall;
  9872.     function SetOutputFPS(FPS: Double): HResult; stdcall;
  9873.     function GetOutputFPS(var pFPS: Double): HResult; stdcall;
  9874.     function SetGroupName(const pGroupName: WideString): HResult; stdcall;
  9875.     function GetGroupName(out pGroupName: WideString): HResult; stdcall;
  9876.     function SetPreviewMode(fPreview: BOOL): HResult; stdcall;
  9877.     function GetPreviewMode(var pfPreview: BOOL): HResult; stdcall;
  9878.     function SetMediaTypeForVB(Val: longint): HResult; stdcall;
  9879.     function GetOutputBuffering(out pnBuffer: integer): HResult; stdcall;
  9880.     function SetOutputBuffering(nBuffer: integer): HResult; stdcall;
  9881.     function SetSmartRecompressFormat(var pFormat: longint): HResult; stdcall;
  9882.     function GetSmartRecompressFormat(ppFormat: Plongint): HResult; stdcall;
  9883.     function IsSmartRecompressFormatSet(var pVal: BOOL): HResult; stdcall;
  9884.     function IsRecompressFormatDirty(var pVal: BOOL): HResult; stdcall;
  9885.     function ClearRecompressFormatDirty: HResult; stdcall;
  9886.     function SetRecompFormatFromSource(pSource: IAMTimelineSrc): HResult; stdcall;
  9887.   end;
  9888.  
  9889.   IAMTimeline = interface(IUnknown)
  9890.     ['{78530B74-61F9-11D2-8CAD-00A024580902}']
  9891.     function CreateEmptyNode(out ppObj: IAMTimelineObj; Type_: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9892.     function AddGroup(pGroup: IAMTimelineObj): HResult; stdcall;
  9893.     function RemGroupFromList(pGroup: IAMTimelineObj): HResult; stdcall;
  9894.     function GetGroup(out ppGroup: IAMTimelineObj; WhichGroup: longint): HResult; stdcall;
  9895.     function GetGroupCount(var pCount: longint): HResult; stdcall;
  9896.     function ClearAllGroups: HResult; stdcall;
  9897.     function GetInsertMode(var pMode: longint): HResult; stdcall;
  9898.     function SetInsertMode(Mode: longint): HResult; stdcall;
  9899.     function EnableTransitions(fEnabled: BOOL): HResult; stdcall;
  9900.     function TransitionsEnabled(var pfEnabled: BOOL): HResult; stdcall;
  9901.     function EnableEffects(fEnabled: BOOL): HResult; stdcall;
  9902.     function EffectsEnabled(var pfEnabled: BOOL): HResult; stdcall;
  9903.     function SetInterestRange(Start, Stop: TREFERENCE_TIME): HResult; stdcall;
  9904.     function GetDuration(var pDuration: TREFERENCE_TIME): HResult; stdcall;
  9905.     function GetDuration2(var pDuration: Double): HResult; stdcall;
  9906.     function SetDefaultFPS(FPS: Double): HResult; stdcall;
  9907.     function GetDefaultFPS(var pFPS: Double): HResult; stdcall;
  9908.     function IsDirty(var pDirty: BOOL): HResult; stdcall;
  9909.     function GetDirtyRange(var pStart, pStop: TREFERENCE_TIME): HResult; stdcall;
  9910.     function GetCountOfType(Group: longint; var pVal, pValWithComps: longint;
  9911.              majortype: integer): HResult; stdcall; // TIMELINE_MAJOR_TYPE
  9912.     function ValidateSourceNames(ValidateFlags: longint; pOverride: IMediaLocator;
  9913.              NotifyEventHandle: integer): HResult; stdcall;
  9914.     function SetDefaultTransition(const pGuid: TGUID): HResult; stdcall;
  9915.     function GetDefaultTransition(var pGuid: TGUID): HResult; stdcall;
  9916.     function SetDefaultEffect(const pGuid: TGUID): HResult; stdcall;
  9917.     function GetDefaultEffect(var pGuid: TGUID): HResult; stdcall;
  9918.     function SetDefaultTransitionB(const pGuid: WideString): HResult; stdcall;
  9919.     function GetDefaultTransitionB(out pGuid: WideString): HResult; stdcall;
  9920.     function SetDefaultEffectB(const pGuid: WideString): HResult; stdcall;
  9921.     function GetDefaultEffectB(out pGuid: WideString): HResult; stdcall;
  9922.   end;
  9923.  
  9924.   IXml2Dex = interface(IDispatch)
  9925.     ['{18C628ED-962A-11D2-8D08-00A0C9441E20}']
  9926.     function CreateGraphFromFile(out ppGraph: IUnknown; pTimeline: IUnknown;
  9927.              const Filename: WideString): HResult; stdcall;
  9928.     function WriteGrfFile(pGraph: IUnknown; const Filename: WideString): HResult; stdcall;
  9929.     function WriteXMLFile(pTimeline: IUnknown; const Filename: WideString): HResult; stdcall;
  9930.     function ReadXMLFile(pTimeline: IUnknown; const XMLName: WideString): HResult; stdcall;
  9931.     function Delete(pTimeline: IUnknown; dStart, dEnd: Double): HResult; stdcall;
  9932.     function WriteXMLPart(pTimeline: IUnknown; dStart, dEnd: Double;
  9933.              const Filename: WideString): HResult; stdcall;
  9934.     function PasteXMLFile(pTimeline: IUnknown; dStart: Double; const Filename: WideString): HResult; stdcall;
  9935.     function CopyXML(pTimeline: IUnknown; dStart, dEnd: Double): HResult; stdcall;
  9936.     function PasteXML(pTimeline: IUnknown; dStart: Double): HResult; stdcall;
  9937.     function Reset: HResult; stdcall;
  9938.     function ReadXML(pTimeline: IUnknown; pxml: IUnknown): HResult; stdcall;
  9939.     function WriteXML(pTimeline: IUnknown; var pbstrXML: WideString): HResult; stdcall;
  9940.   end;
  9941.  
  9942.   IAMErrorLog = interface(IUnknown)
  9943.     ['{E43E73A2-0EFA-11D3-9601-00A0C9441E20}']
  9944.     function LogError(Severity: longint; const pErrorString: WideString; ErrorCode: longint;
  9945.                        hresult: longint; var pExtraInfo: OleVariant): HResult; stdcall;
  9946.   end;
  9947.  
  9948.   IAMSetErrorLog = interface(IUnknown)
  9949.     ['{963566DA-BE21-4EAF-88E9-35704F8F52A1}']
  9950.     function get_ErrorLog(out pVal: IAMErrorLog): HResult; stdcall;
  9951.     function put_ErrorLog(pVal: IAMErrorLog): HResult; stdcall;
  9952.   end;
  9953.  
  9954.   ISampleGrabberCB = interface(IUnknown)
  9955.     ['{0579154A-2B53-4994-B0D0-E773148EFF85}']
  9956.     function  SampleCB(SampleTime: Double; pSample: IMediaSample): HResult; stdcall;
  9957.     function  BufferCB(SampleTime: Double; pBuffer: PByte; BufferLen: longint): HResult; stdcall;
  9958.   end;
  9959. //look at GetCurrentBuffer(pBuffer) pbuffer: pointer
  9960.   ISampleGrabber = interface(IUnknown)
  9961.     ['{6B652FFF-11FE-4FCE-92AD-0266B5D7C78F}']
  9962.     function SetOneShot(OneShot: BOOL): HResult; stdcall;
  9963.     function SetMediaType(var pType: TAM_MEDIA_TYPE): HResult; stdcall;
  9964.     function GetConnectedMediaType(var pType: TAM_MEDIA_TYPE): HResult; stdcall;
  9965.     function SetBufferSamples(BufferThem: BOOL): HResult; stdcall;
  9966.     function GetCurrentBuffer(var pBufferSize: longint; out pBuffer): HResult; stdcall;
  9967.     function GetCurrentSample(out ppSample: IMediaSample): HResult; stdcall;
  9968.     function SetCallback(pCallback: ISampleGrabberCB; WhichMethodToCallback: longint): HResult; stdcall;
  9969.   end;
  9970.  
  9971. //CoClasses
  9972.   CoAMTimeline = class
  9973.     class function Create: IAMTimeline;
  9974.     class function CreateRemote(const MachineName: string): IAMTimeline;
  9975.   end;
  9976.  
  9977.   CoAMTimelineComp = class
  9978.     class function Create: IAMTimelineComp;
  9979.     class function CreateRemote(const MachineName: string): IAMTimelineComp;
  9980.   end;
  9981.  
  9982.   CoAMTimelineEffect = class
  9983.     class function Create: IAMTimelineEffect;
  9984.     class function CreateRemote(const MachineName: string): IAMTimelineEffect;
  9985.   end;
  9986.  
  9987.   CoAMTimelineGroup = class
  9988.     class function Create: IAMTimelineGroup;
  9989.     class function CreateRemote(const MachineName: string): IAMTimelineGroup;
  9990.   end;
  9991.  
  9992.   CoAMTimelineObj = class
  9993.     class function Create: IAMTimelineObj;
  9994.     class function CreateRemote(const MachineName: string): IAMTimelineObj;
  9995.   end;
  9996.  
  9997.   CoAMTimelineSrc = class
  9998.     class function Create: IAMTimelineSrc;
  9999.     class function CreateRemote(const MachineName: string): IAMTimelineSrc;
  10000.   end;
  10001.  
  10002.   CoAMTimelineTrack = class
  10003.     class function Create: IAMTimelineTrack;
  10004.     class function CreateRemote(const MachineName: string): IAMTimelineTrack;
  10005.   end;
  10006.  
  10007.   CoAMTimelineTrans = class
  10008.     class function Create: IAMTimelineTrans;
  10009.     class function CreateRemote(const MachineName: string): IAMTimelineTrans;
  10010.   end;
  10011.  
  10012.   CoAudMixer = class
  10013.     class function Create: IBaseFilter;
  10014.     class function CreateRemote(const MachineName: string): IBaseFilter;
  10015.   end;
  10016.  
  10017.   CoColorSource = class
  10018.     class function Create: IBaseFilter;
  10019.     class function CreateRemote(const MachineName: string): IBaseFilter;
  10020.   end;
  10021.  
  10022.   CoDxtAlphaSetter = class
  10023.     class function Create: IDxtAlphaSetter;
  10024.     class function CreateRemote(const MachineName: string): IDxtAlphaSetter;
  10025.   end;
  10026.  
  10027.  
  10028.   CoDxtCompositor = class
  10029.     class function Create: IDxtCompositor;
  10030.     class function CreateRemote(const MachineName: string): IDxtCompositor;
  10031.   end;
  10032.  
  10033.   CoDxtJpeg = class
  10034.     class function Create: IDxtJpeg;
  10035.     class function CreateRemote(const MachineName: string): IDxtJpeg;
  10036.   end;
  10037.  
  10038.   CoDxtKey = class
  10039.     class function Create: IDxtKey;
  10040.     class function CreateRemote(const MachineName: string): IDxtKey;
  10041.   end;
  10042.  
  10043.   CoMediaDet = class
  10044.     class function Create: IMediaDet;
  10045.     class function CreateRemote(const MachineName: string): IMediaDet;
  10046.   end;
  10047.  
  10048.   CoMediaLocator = class
  10049.     class function Create: IMediaLocator;
  10050.     class function CreateRemote(const MachineName: string): IMediaLocator;
  10051.   end;
  10052.  
  10053.   CoNullRenderer = class
  10054.     class function Create: IBaseFilter;
  10055.     class function CreateRemote(const MachineName: string): IBaseFilter;
  10056.   end;
  10057.  
  10058.   CoPropertySetter = class
  10059.     class function Create: IPropertySetter;
  10060.     class function CreateRemote(const MachineName: string): IPropertySetter;
  10061.   end;
  10062.  
  10063.   CoRenderEngine = class
  10064.     class function Create: IRenderEngine;
  10065.     class function CreateRemote(const MachineName: string): IRenderEngine;
  10066.   end;
  10067.  
  10068.   CoSampleGrabber = class
  10069.     class function Create: ISampleGrabber;
  10070.     class function CreateRemote(const MachineName: string): ISampleGrabber;
  10071.   end;
  10072.  
  10073.   CoSmartRenderEngine = class
  10074.     class function Create: IRenderEngine;
  10075.     class function CreateRemote(const MachineName: string): IRenderEngine;
  10076.   end;
  10077.  
  10078.   CoXml2Dex = class
  10079.     class function Create: IXml2Dex;
  10080.     class function CreateRemote(const MachineName: string): IXml2Dex;
  10081.   end;
  10082.  
  10083. {**************************************************************************}
  10084. {* Module Name: mpeguids.h                                                *}
  10085. {* This file was inadvertently left out of the DirectX by Microsoft       *}
  10086. {* Universal ID's for the mpeg decoder property pages.                    *}
  10087. {*                                                                        *}
  10088. {* Copyright (c) 1995 - 1997  Microsoft Corporation.  All Rights Reserved.*}
  10089. {**************************************************************************}
  10090.  
  10091. const
  10092.   IID_IMpegVideoDecoder             : TGUID = '{EB1BB270-F71F-11CE-8E85-02608C9BABA2}';
  10093.   CLSID_MpegAudioDecodePropertyPage : TGUID = '{CC785860-B2CA-11ce-8D2B-0000E202599C}';
  10094.   CLSID_MpegVideoDecodePropertyPage : TGUID = '{E5B4EAA0-B2CA-11ce-8D2B-0000E202599C}';
  10095.   CLSID_MMMpeg1VideoCodec           : TGUID = '{eafd3a00-a2c7-11d0-b0ac-006097707a2c}';
  10096.   VIDEO_DECODER_CLSID               : TGUID = '{eafd3a00-a2c7-11d0-b0ac-006097707a2c}';
  10097.   CLSID_MMMpeg1AudioCodec           : TGUID = '{2cd28f20-a2c8-11d0-b0ac-006097707a2c}';
  10098.   AUDIO_DECODER_CLSID               : TGUID = '{2cd28f20-a2c8-11d0-b0ac-006097707a2c}';
  10099.  
  10100. type
  10101. // Structure to describe the caps of the mpeg video decoder.
  10102.   TMPEGVideoDecoderCaps = record
  10103.     VideoMaxBitRate: DWORD
  10104.   end;
  10105. // --------------------------------------------------------------------------------------
  10106. // Structure to hold the contents of an Mpeg 1 sequence header.                        //
  10107. // This structure come from mpgvideo.h in DXMedia SDK!!                                //
  10108. // --------------------------------------------------------------------------------------
  10109.   TSeqHdrInfo = record                                                                 //
  10110.     Width           : LongInt;               //  Native Width in pixels                //
  10111.     Height          : LongInt;               //  Native Height in pixels               //
  10112.     vbv             : LongInt;               //  vbv                                   //
  10113.     PictureTime     : TReference_Time;       //  Time per picture in 100ns units       //
  10114.     TimePerFrame    : LongInt;               //  Time per picture in MPEG units        //
  10115.     BitRate         : LongInt;               //  Bits per second                       //
  10116.     XPelsPerMeter   : LongInt;               //  Pel aspect ratio                      //
  10117.     YPelsPerMeter   : LongInt;               //  Pel aspect ratio                      //
  10118.     StartTimeCode   : DWORD;                 //  First GOP time code (or -1)           //
  10119.     ActualHeaderLen : LongInt;               //  Length of valid bytes in raw seq hdr  //
  10120.     RawHeader       : array[0..139] of Byte; //  The real sequence header              //
  10121.   end;                                                                                 //
  10122. // --------------------------------------------------------------------------------------
  10123.  
  10124. // IMpegVideoDecoder not documented...
  10125.   IMpegVideoDecoder = interface(IUnknown)
  10126.     ['{EB1BB270-F71F-11CE-8E85-02608C9BABA2}']
  10127.     procedure get_CurrentDecoderOption(out pOptions: DWORD); stdcall;
  10128.     procedure set_CurrentDecoderOption(Options: DWORD); stdcall;
  10129.     procedure get_DefaultDecoderOption(out pOptions: DWORD); stdcall;
  10130.     procedure set_DefaultDecoderOption(Options: DWORD); stdcall;
  10131.     procedure get_QualityMsgProcessing(out pfIgnore: BOOL); stdcall;
  10132.     procedure set_QualityMsgProcessing(fIgnore: BOOL); stdcall;
  10133.     procedure get_GreyScaleOutput(out pfGrey: BOOL); stdcall;
  10134.     procedure set_GreyScaleOutput(fGrey: BOOL); stdcall;
  10135.     procedure get_SequenceHeader(out pSeqHdrInfo: TSeqHdrInfo); stdcall;
  10136.     procedure get_OutputFormat(out pOutputFormat: DWORD); stdcall;
  10137.     procedure get_FrameStatistics(out pIFramesDecoded, pPFramesDecoded, stdcall;
  10138.       pBFramesDecoded, pIFramesSkipped, pPFramesSkipped, pBFramesSkipped: DWORD);
  10139.     procedure ResetFrameStatistics; stdcall;
  10140.     procedure get_DecoderPaletteInfo(lpdwFirstEntry, lpdwLastEntry: PDWORD); stdcall;
  10141.     procedure get_DecoderPaletteEntries(dwStartEntry, dwNumEntries: DWORD;
  10142.       lppe: PPALETTEENTRY); stdcall;
  10143.     procedure get_EncryptionKey(out dwEncrptionKey: DWORD); stdcall;
  10144.     procedure put_EncryptionKey(dwEncrptionKey: DWORD); stdcall;
  10145.     procedure get_DecoderCaps(out pCaps: TMPEGVideoDecoderCaps); stdcall;
  10146.   end;
  10147.  
  10148. //------------------------------------------------------------------------------
  10149. // File: DShowASF.h
  10150. //
  10151. // Copyright (c) 1992-2000, Microsoft Corporation. All rights reserved.
  10152. //------------------------------------------------------------------------------
  10153.  
  10154. const
  10155.   IID_IConfigAsfWriter : TGUID = (D1:$45086030;D2:$F7E4;D3:$486a;D4:($B5,$04,$82,$6B,$B5,$79,$2A,$3B));
  10156.  // IID_IWMProfile       : TGUID = (D1:$96406bdb;D2:$2b2b;D3:$11d3;D4:($b3,$6b,$00,$c0,$4f,$61,$08,$ff));
  10157.  
  10158. type
  10159. // Interface to control the ASF writer
  10160.   IConfigAsfWriter = interface(IUnknown)
  10161.     ['{45086030-F7E4-486a-B504-826BB5792A3B}']
  10162.     // The user is expected to enumerate profiles using the wmsdk IWMProfileManager
  10163.     // method and then pass the desired profile index to the ASF Writer filter via this
  10164.     // method. The filter will then try to configure itself for the selected profile.
  10165.     //
  10166.     // NOTE: These 2 XXXProfileId methods are now obsolete because they assume
  10167.     //       version 4.0 WMSDK profiles. To configure the filter for later profile
  10168.     //       versions using a profile index, use the XXXProfile methods which take
  10169.     //       the IWMProfile* directly.
  10170.     function ConfigureFilterUsingProfileId(dwProfileId: DWORD): HResult; stdcall;
  10171.     function GetCurrentProfileId(out pdwProfileId: DWORD): HResult; stdcall;
  10172.     // configure using a pre-defined wmsdk profile guid
  10173.     function ConfigureFilterUsingProfileGuid(const guidProfile: TGUID): HRESULT; stdcall;
  10174.     function GetCurrentProfileGuid(out pProfileGuid: TGUID): HRESULT; stdcall;
  10175.     // Use these methods when a custom profile setup is preferred
  10176.     function ConfigureFilterUsingProfile(pProfile: IUnKnown): HRESULT; stdcall;  // IWMProfile in Window Media Format SDK
  10177.     function GetCurrentProfile(out ppProfile: IUnKnown): HRESULT; stdcall;       // IWMProfile in Window Media Format SDK
  10178.     // allow app to control whether or not to index file
  10179.     function SetIndexMode(bIndexFile: BOOL): HRESULT; stdcall;
  10180.     function GetIndexMode(out pbIndexFile: BOOL): HRESULT; stdcall;
  10181.   end;
  10182.  
  10183. //------------------------------------------------------------------------------
  10184. // File: AMParse.h
  10185. //
  10186. // Desc: Interface to the parser to get current time.  This is useful for
  10187. //       multifile playback.
  10188. //
  10189. // Copyright (c) 1996 - 2000, Microsoft Corporation.  All rights reserved.
  10190. //------------------------------------------------------------------------------
  10191.  
  10192. const
  10193. IID_IAMParse : TGUID = (D1:$c47a3420;D2:$005c;D3:$11d2;D4:($90,$38,$00,$a0,$c9,$69,$72,$98));
  10194.  
  10195. type
  10196. //  Parser interface - supported by MPEG-2 splitter filter
  10197.   IAMParse = interface(IUnknown)
  10198.     ['{c47a3420-005c-11d2-9038-00a0c9697298}']
  10199.     function GetParseTime(out prtCurrent: TREFERENCE_TIME): HRESULT; stdcall;
  10200.     function SetParseTime(rtCurrent: TREFERENCE_TIME): HRESULT; stdcall;
  10201.     function Flush: HRESULT; stdcall;
  10202.   end;
  10203.  
  10204. //------------------------------------------------------------------------------
  10205. // File: AudEvCod.h
  10206. //
  10207. // Desc: List of Audio device error event codes and the expected params.
  10208. //
  10209. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10210. //------------------------------------------------------------------------------
  10211.  
  10212. const
  10213.   EC_SND_DEVICE_ERROR_BASE = $0200;
  10214.  
  10215. type
  10216.   TSNDDEV_ERR = (
  10217.     SNDDEV_ERROR_Invalid,
  10218.     SNDDEV_ERROR_Open,
  10219.     SNDDEV_ERROR_Close,
  10220.     SNDDEV_ERROR_GetCaps,
  10221.     SNDDEV_ERROR_PrepareHeader,
  10222.     SNDDEV_ERROR_UnprepareHeader,
  10223.     SNDDEV_ERROR_Reset,
  10224.     SNDDEV_ERROR_Restart,
  10225.     SNDDEV_ERROR_GetPosition,
  10226.     SNDDEV_ERROR_Write,
  10227.     SNDDEV_ERROR_Pause,
  10228.     SNDDEV_ERROR_Stop,
  10229.     SNDDEV_ERROR_Start,
  10230.     SNDDEV_ERROR_AddBuffer,
  10231.     SNDDEV_ERROR_Query
  10232.   );
  10233.  
  10234. // Sound device error event codes
  10235. // ==============================
  10236. //
  10237. // All audio device error events are always passed on to the application, and are
  10238. // never processed by the filter graph
  10239.  
  10240. const
  10241.   EC_SNDDEV_IN_ERROR  = EC_SND_DEVICE_ERROR_BASE + $00;
  10242.   EC_SNDDEV_OUT_ERROR = EC_SND_DEVICE_ERROR_BASE + $01;
  10243. // Parameters: ( DWORD, DWORD)
  10244. // lParam1 is an enum SND_DEVICE_ERROR which notifies the app how the device was
  10245. // being accessed when the failure occurred.
  10246. //
  10247. // lParam2 is the error returned from the sound device call.
  10248.  
  10249. //------------------------------------------------------------------------------
  10250. // File: ATSMedia.h
  10251. //
  10252. // Desc: Broadcast Driver Architecture Media Definitions for ATSC
  10253. //
  10254. // Copyright (c) 1996 - 2000, Microsoft Corporation.  All rights reserved.
  10255. //------------------------------------------------------------------------------
  10256.  
  10257. //===========================================================================
  10258. //
  10259. //  ATSC Network Type
  10260. //
  10261. //===========================================================================
  10262.  
  10263. const
  10264.   BDANETWORKTYPE_ATSC : TGUID = '{71985F51-1CA1-11d3-9CC8-00C04F7971E0}';
  10265.  
  10266. //------------------------------------------------------------------------------
  10267. // File: MediaErr.h
  10268. //
  10269. // Desc: Shell error codes
  10270. //
  10271. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10272. //------------------------------------------------------------------------------
  10273. const
  10274. DMO_E_INVALIDSTREAMINDEX = $80040201;
  10275. DMO_E_INVALIDTYPE        = $80040202;
  10276. DMO_E_TYPE_NOT_SET       = $80040203;
  10277. DMO_E_NOTACCEPTING       = $80040204;
  10278. DMO_E_TYPE_NOT_ACCEPTED  = $80040205;
  10279. DMO_E_NO_MORE_ITEMS      = $80040206;
  10280.  
  10281. //------------------------------------------------------------------------------
  10282. // File: MedParam.h
  10283. // Desc: Definition of the IMediaParams and associated interfaces. These
  10284. //       interfaces are designed to allow communication of curve-following
  10285. //       behaviors for parameters of objects which require dynamic changes
  10286. //       to their parameters at run time. All changes are specified by
  10287. //       timestamp and curve type to ensure the parameters can be set
  10288. //       at sufficient accuracy with predictable behavior on subsequent
  10289. //       playback of the same curves.
  10290. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10291. //------------------------------------------------------------------------------
  10292.  
  10293. const
  10294.   IID_IMediaParamInfo : TGUID = '{6d6cbb60-a223-44aa-842f-a2f06750be6d}';
  10295.   IID_IMediaParams    : TGUID = '{6d6cbb61-a223-44aa-842f-a2f06750be6e}';
  10296.  
  10297.   GUID_TIME_REFERENCE : TGUID = (D1:$93ad712b;D2:$daa0;D3:$4ffe;D4:($bc,$81,$b0,$ce,$50,$f ,$cd,$d9));
  10298.   GUID_TIME_MUSIC     : TGUID = (D1:$574c49d ;D2:$5b04;D3:$4b15;D4:($a5,$42,$ae,$28,$20,$30,$11,$7b));
  10299.   GUID_TIME_SAMPLES   : TGUID = (D1:$a8593d05;D2:$c43 ;D3:$4984;D4:($9a,$63,$97,$af,$9e,$2 ,$c4,$c0));
  10300.  
  10301. type
  10302.   TMPData = Single;
  10303.  
  10304.   TMPType = (
  10305.     MPT_INT,
  10306.     MPT_FLOAT,
  10307.     MPT_BOOL,
  10308.     MPT_ENUM,
  10309.     MPT_MAX
  10310.   );
  10311.  
  10312. const
  10313.   MPBOOL_TRUE  = 1;
  10314.   MPBOOL_FALSE = 0;
  10315.  
  10316. type
  10317.   TMPCurveType = TOleEnum;
  10318. const
  10319.   MP_CURVE_JUMP         = $1;
  10320.   MP_CURVE_LINEAR    = $2;
  10321.   MP_CURVE_SQUARE    = $4;
  10322.   MP_CURVE_INVSQUARE = $8;
  10323.   MP_CURVE_SINE         = $10;
  10324.  
  10325. type
  10326.  TMPCaps = DWORD;
  10327.  
  10328. const
  10329.   MP_CAPS_CURVE_JUMP      = MP_CURVE_JUMP;
  10330.   MP_CAPS_CURVE_LINEAR      = MP_CURVE_LINEAR;
  10331.   MP_CAPS_CURVE_SQUARE      = MP_CURVE_SQUARE;
  10332.   MP_CAPS_CURVE_INVSQUARE = MP_CURVE_INVSQUARE;
  10333.   MP_CAPS_CURVE_SINE      = MP_CURVE_SINE;
  10334.  
  10335. type
  10336.   TMPParaminfo = record
  10337.     mpType          : TMPType;
  10338.     mopCaps         : TMPCaps;
  10339.     mpdMinValue     : TMPData;
  10340.     mpdMaxValue     : TMPData;
  10341.     mpdNeutralValue : TMPData;
  10342.     szUnitText      : array[0..31] of WCHAR;
  10343.     szLabel         : array[0..31] of WCHAR;
  10344.   end;
  10345.  
  10346. const
  10347.   DWORD_ALLPARAMS = -1;
  10348.  
  10349. type
  10350.   TMPTimeData = DWORD;
  10351.   TMPFlags    = DWORD;
  10352.  
  10353. const
  10354.   MPF_ENVLP_STANDARD         = $0;
  10355.   MPF_ENVLP_BEGIN_CURRENTVAL = $1;
  10356.   MPF_ENVLP_BEGIN_NEUTRALVAL = $2;
  10357.  
  10358. type
  10359.   TMPEnvelopeSegment = record
  10360.     rtStart  : TREFERENCE_TIME;
  10361.     rtEnd    : TREFERENCE_TIME;
  10362.     valStart : TMPDATA;
  10363.     valEnd   : TMPDATA;
  10364.     iCurve   : TMPCURVETYPE;
  10365.     flags    : TMPFLAGS;
  10366.   end;
  10367.  
  10368. const
  10369.   MPF_PUNCHIN_REFTIME =    $0;
  10370.   MPF_PUNCHIN_NOW     =    $1;
  10371.   MPF_PUNCHIN_STOPPED =    $2;
  10372.  
  10373. type
  10374.   IMediaParamInfo = interface(IUnknown)
  10375.     ['{6d6cbb60-a223-44aa-842f-a2f06750be6d}']
  10376.     function GetParamCount(out pdwParams: DWORD): HRESULT; stdcall;
  10377.     function GetParamInfo(dwParamIndex: DWORD; out pInfo: TMPPARAMINFO): HRESULT; stdcall;
  10378.     function GetParamText(dwParamIndex: DWORD; out ppwchText: PWideChar): HRESULT; stdcall;
  10379.     function GetNumTimeFormats(out pdwNumTimeFormats: DWORD): HRESULT; stdcall;
  10380.     function GetSupportedTimeFormat(dwFormatIndex: DWORD; out pguidTimeFormat: TGUID): HRESULT; stdcall;
  10381.     function GetCurrentTimeFormat(out pguidTimeFormat: TGUID; out pTimeData: TMPTIMEDATA): HRESULT; stdcall;
  10382.   end;
  10383.  
  10384.   IMediaParams = interface(IUnknown)
  10385.     ['{6d6cbb61-a223-44aa-842f-a2f06750be6e}']
  10386.     function GetParam(dwParamIndex: DWORD; out pValue: TMPData): HRESULT; stdcall;
  10387.     function SetParam(dwParamIndex: DWORD; value: TMPData): HRESULT; stdcall;
  10388.     function AddEnvelope(dwParamIndex, cSegments: DWORD; var pEnvelopeSegments: TMPENVELOPESEGMENT): HRESULT; stdcall;
  10389.     function FlushEnvelope(dwParamIndex: DWORD; refTimeStart, refTimeEnd: TREFERENCE_TIME): HRESULT; stdcall;
  10390.     function SetTimeFormat(const guidTimeFormat: TGUID; mpTimeData: TMPTIMEDATA): HRESULT; stdcall;
  10391.   end;
  10392.  
  10393. //------------------------------------------------------------------------------
  10394. // File: mediaobj.h
  10395. // Desc: Define the interfaces for DirectX Media Objects.
  10396. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10397. //------------------------------------------------------------------------------
  10398.  
  10399. const
  10400.   IID_IMediaBuffer                 : TGUID = '{59eff8b9-938c-4a26-82f2-95cb84cdc837}';
  10401.   IID_IMediaObject                 : TGUID = '{d8ad0f58-5494-4102-97c5-ec798e59bcf4}';
  10402.   IID_IEnumDMO                     : TGUID = '{2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f}';
  10403.   IID_IMediaObjectInPlace          : TGUID = '{651b9ad0-0fc7-4aa9-9538-d89931010741}';
  10404.   IID_IDMOQualityControl           : TGUID = '{65abea96-cf36-453f-af8a-705e98f16260}';
  10405.   IID_IDMOVideoOutputOptimizations : TGUID = '{be8f4f4e-5b16-4d29-b350-7f6b5d9298ac}';
  10406.  
  10407. type
  10408. //  DMO_MEDIA_TYPE structure
  10409.   PDMO_MEDIA_TYPE = ^TDMO_MEDIA_TYPE;
  10410.   TDMO_MEDIA_TYPE = TAM_Media_Type;
  10411.  
  10412. // Per-buffer flags that apply to input buffers
  10413.   TDMO_INPUT_DATA_BUFFER_FLAGS = TOleEnum;
  10414. const
  10415.   DMO_INPUT_DATA_BUFFERF_SYNCPOINT  = $1;
  10416.   DMO_INPUT_DATA_BUFFERF_TIME        = $2;
  10417.   DMO_INPUT_DATA_BUFFERF_TIMELENGTH = $4;
  10418.  
  10419. // Per-buffer flags that apply to output buffers.
  10420. type
  10421.   TDMO_OUTPUT_DATA_BUFFER_FLAGS = TOleEnum;
  10422. const
  10423.   DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT    = $1;
  10424.   DMO_OUTPUT_DATA_BUFFERF_TIME            = $2;
  10425.   DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH    = $4;
  10426.   // This flag means the object could have generated more data for this
  10427.   // output stream, even with no additional input from any input stream,
  10428.   // but the output buffer did not have sufficient room.
  10429.   DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE    = $1000000;
  10430.  
  10431. // Flags returned by GetInputStatus()
  10432. type
  10433.   TDMO_INPUT_STATUS_FLAGS = TOleEnum;
  10434. const
  10435.   // ACCEPT_DATA indicates that the input stream is ready to accept
  10436.   // new data via ProcessInput().
  10437.   DMO_INPUT_STATUSF_ACCEPT_DATA    = $1;
  10438.  
  10439. // Flags returned by GetInputStreamInfo()
  10440. type
  10441.   TDMO_INPUT_STREAM_INFO_FLAGS = TOleEnum;
  10442. const
  10443.   DMO_INPUT_STREAMF_WHOLE_SAMPLES         = $1;
  10444.   DMO_INPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = $2;
  10445.   DMO_INPUT_STREAMF_FIXED_SAMPLE_SIZE         = $4;
  10446.   DMO_INPUT_STREAMF_HOLDS_BUFFERS         = $8;
  10447.  
  10448. // Flags returned by GetOutputStreamInfo()
  10449. type
  10450.   TDMO_OUTPUT_STREAM_INFO_FLAGS = TOleEnum;
  10451. const
  10452.   DMO_OUTPUT_STREAMF_WHOLE_SAMPLES          = $1;
  10453.   DMO_OUTPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = $2;
  10454.   DMO_OUTPUT_STREAMF_FIXED_SAMPLE_SIZE          = $4;
  10455.   DMO_OUTPUT_STREAMF_DISCARDABLE          = $8;
  10456.   DMO_OUTPUT_STREAMF_OPTIONAL                  = $10;
  10457.  
  10458. //  SetType flags
  10459. type
  10460.   TDMO_SET_TYPE_FLAGS = TOleEnum;
  10461. const
  10462.   DMO_SET_TYPEF_TEST_ONLY = $1;
  10463.   DMO_SET_TYPEF_CLEAR      = $2;
  10464.  
  10465. //  Process Output Flags
  10466. type
  10467.   TDMO_PROCESS_OUTPUT_FLAGS = TOleEnum;
  10468. const
  10469.   DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = $1;
  10470.  
  10471. type
  10472. // Buffer wrapper interface
  10473.   IMediaBuffer = interface(IUnknown)
  10474.     ['{59eff8b9-938c-4a26-82f2-95cb84cdc837}']
  10475.     function SetLength(cbLength: DWORD): HRESULT; stdcall;
  10476.     function GetMaxLength(out pcbMaxLength: DWORD): HRESULT; stdcall;
  10477.     function GetBufferAndLength(out ppBuffer;        // not filled if NULL
  10478.                                 out pcbLength: DWORD // not filled if NULL
  10479.                                 ): HRESULT; stdcall;
  10480.   end;
  10481.  
  10482.  
  10483. // Output buffer info structure: one of these must be passed in for each
  10484. // output stream with every ProcessOutput() call
  10485. // All [out] fields should be
  10486. // assumed undefined if ProcessOutput() failed
  10487.   PDMO_OUTPUT_DATA_BUFFER = ^TDMO_OUTPUT_DATA_BUFFER;
  10488.   TDMO_OUTPUT_DATA_BUFFER = record
  10489.     pBuffer      : IMediaBuffer;    // [in] can be NULL
  10490.     // ProcessOutput() must set any appropriate flags and zero out the rest.
  10491.     dwStatus     : DWORD;           // [out] DMO_OUTPUT_DATA_BUFFERF_XXX (INCOMPLETE, etc.)
  10492.     // Each of these is valid if the corresponding flag is set in dwStatus
  10493.     rtTimestamp  : TREFERENCE_TIME; // [out]
  10494.     rtTimelength : TREFERENCE_TIME; // [out]
  10495.   end;
  10496.  
  10497.   IMediaObject = interface(IUnknown)
  10498.     ['{d8ad0f58-5494-4102-97c5-ec798e59bcf4}']
  10499.     function GetStreamCount(out pcInputStreams, pcOutputStreams: DWORD): HRESULT; stdcall;
  10500.     function GetInputStreamInfo(dwInputStreamIndex: DWORD; out pdwFlags: DWORD): HRESULT; stdcall;
  10501.     function GetOutputStreamInfo(dwOutputStreamIndex: DWORD; out pdwFlags: DWORD): HRESULT; stdcall;
  10502.     function GetInputType(dwInputStreamIndex, dwTypeIndex: DWORD;
  10503.       out pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10504.     function GetOutputType(dwOutputStreamIndex, dwTypeIndex: DWORD;
  10505.       out pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10506.     function SetInputType(const pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10507.     function SetOutputType(const pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10508.     function GetInputCurrentType(dwInputStreamIndex: DWORD;
  10509.        out pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10510.     function GetOutputCurrentType(out pmt: TDMO_MEDIA_TYPE): HRESULT; stdcall;
  10511.     function GetInputSizeInfo(dwInputStreamIndex: DWORD; out pcbSize,
  10512.       pcbMaxLookahead, pcbAlignment: DWORD): HRESULT; stdcall;
  10513.     function GetOutputSizeInfo(dwOutputStreamIndex: DWORD; out pcbSize,
  10514.       pcbAlignment: DWORD): HRESULT; stdcall;
  10515.     function GetInputMaxLatency(dwInputStreamIndex: DWORD;
  10516.       out prtMaxLatency: TREFERENCE_TIME): HRESULT; stdcall;
  10517.     function SetInputMaxLatency(dwInputStreamIndex: DWORD;
  10518.       rtMaxLatency: TREFERENCE_TIME): HRESULT; stdcall;
  10519.     function Flush: HRESULT; stdcall;
  10520.     function Discontinuity(dwInputStreamIndex: DWORD): HRESULT; stdcall;
  10521.     function AllocateStreamingResources: HRESULT; stdcall;
  10522.     function FreeStreamingResources: HRESULT; stdcall;
  10523.     function GetInputStatus(dwInputStreamIndex: DWORD; out dwFlags: DWORD): HRESULT; stdcall;
  10524.     function ProcessInput(dwInputStreamIndex: DWORD; pBuffer: IMediaBuffer;
  10525.        dwFlags: DWORD; rtTimestamp, rtTimelength: TREFERENCE_TIME): HRESULT; stdcall;
  10526.     function ProcessOutput(dwFlags, cOutputBufferCount: DWORD;
  10527.       {in/out} pOutputBuffers: PDMO_OUTPUT_DATA_BUFFER; out pdwStatus: DWORD): HRESULT; stdcall;
  10528.     function Lock(bLock: Longint): HRESULT; stdcall;
  10529.   end;
  10530.  
  10531.   IEnumDMO = interface(IUnknown)
  10532.     ['{2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f}']
  10533.     function Next(cItemsToFetch: DWORD; out pCLSID: TGUID; out Names: PWideChar;
  10534.       out pcItemsFetched: DWORD): HRESULT; stdcall;
  10535.     function Skip(cItemsToSkip: DWORD): HRESULT; stdcall;
  10536.     function Reset: HRESULT; stdcall;
  10537.     function Clone(out ppEnum: IEnumDMO): HRESULT; stdcall;
  10538.   end;
  10539.     
  10540.  
  10541.   TDMO_INPLACE_PROCESS_FLAGS = (
  10542.     DMO_INPLACE_NORMAL,
  10543.     DMO_INPLACE_ZERO
  10544.   );
  10545.  
  10546.   IMediaObjectInPlace = interface(IUnknown)
  10547.     ['{651b9ad0-0fc7-4aa9-9538-d89931010741}']
  10548.     function Process(ulSize: ULONG; {in/out} pData: Pointer; refTimeStart: TREFERENCE_TIME;
  10549.       dwFlags: DWORD): HRESULT; stdcall;
  10550.     function Clone(out ppMediaObject: IMediaObjectInPlace): HRESULT; stdcall;
  10551.     function GetLatency(out pLatencyTime: TREFERENCE_TIME): HRESULT; stdcall;
  10552.   end;
  10553.  
  10554.   TDMO_QUALITY_STATUS_FLAGS = TOleEnum;
  10555. const
  10556.   DMO_QUALITY_STATUS_ENABLED    = $1;
  10557.  
  10558. type
  10559.   IDMOQualityControl = interface(IUnknown)
  10560.     ['{65abea96-cf36-453f-af8a-705e98f16260}']
  10561.     function SetNow(rtNow: TREFERENCE_TIME): HRESULT; stdcall;
  10562.     function SetStatus(dwFlags: DWORD): HRESULT; stdcall;
  10563.     function GetStatus(out pdwFlags: DWORD): HRESULT; stdcall;
  10564.   end;
  10565.  
  10566.   TDMO_VIDEO_OUTPUT_STREAM_FLAGS = TOleEnum;
  10567. const
  10568.   DMO_VOSF_NEEDS_PREVIOUS_SAMPLE = $1;
  10569.  
  10570. type
  10571.   IDMOVideoOutputOptimizations = interface(IUnknown)
  10572.     ['{be8f4f4e-5b16-4d29-b350-7f6b5d9298ac}']
  10573.     function QueryOperationModePreferences(ulOutputStreamIndex: ULONG;
  10574.       var pdwRequestedCapabilities: DWORD): HRESULT; stdcall;
  10575.     function SetOperationMode(ulOutputStreamIndex: ULONG;
  10576.       dwEnabledFeatures: DWORD): HRESULT; stdcall;
  10577.     function GetCurrentOperationMode(ulOutputStreamIndex: ULONG;
  10578.       var pdwEnabledFeatures: DWORD): HRESULT; stdcall;
  10579.     function GetCurrentSampleRequirements(ulOutputStreamIndex: ULONG;
  10580.       var pdwRequestedFeatures: DWORD): HRESULT; stdcall;
  10581.   end;
  10582.  
  10583. (************************************************************************
  10584. *                                                                       *
  10585. *   dmodshow.h -- This module defines the DirectMusic core API's        *
  10586. *                                                                       *
  10587. *   Copyright (c) 1998, Microsoft Corp. All rights reserved.            *
  10588. *                                                                       *
  10589. ************************************************************************)
  10590. const
  10591.   IID_IDMOWrapperFilter   : TGUID = '{52d6f586-9f0f-4824-8fc8-e32ca04930c2}';
  10592.   CLSID_DMOWrapperFilter  : TGUID = '{94297043-bd82-4dfd-b0de-8177739c6d20}';
  10593.   CLSID_DMOFilterCategory : TGUID = '{bcd5796c-bd52-4d30-ab76-70f975b89199}';
  10594.  
  10595. type
  10596.   IDMOWrapperFilter = interface(IUnknown)
  10597.     ['{52d6f586-9f0f-4824-8fc8-e32ca04930c2}']
  10598.     function Init(const clsidDMO, catDMO: TGUID): HResult; stdcall;
  10599.   end;
  10600.  
  10601. //------------------------------------------------------------------------------
  10602. // File: DMOReg.h
  10603. //
  10604. // Desc:
  10605. //
  10606. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10607. //------------------------------------------------------------------------------
  10608.  
  10609. const
  10610.   DMOCATEGORY_AUDIO_DECODER        : TGUID = '{57f2db8b-e6bb-4513-9d43-dcd2a6593125}';
  10611.   DMOCATEGORY_AUDIO_ENCODER        : TGUID = '{33D9A761-90C8-11d0-BD43-00A0C911CE86}';
  10612.   DMOCATEGORY_VIDEO_DECODER        : TGUID = '{4a69b442-28be-4991-969c-b500adf5d8a8}';
  10613.   DMOCATEGORY_VIDEO_ENCODER        : TGUID = '{33D9A760-90C8-11d0-BD43-00A0C911CE86}';
  10614.   DMOCATEGORY_AUDIO_EFFECT         : TGUID = '{f3602b3f-0592-48df-a4cd-674721e7ebeb}';
  10615.   DMOCATEGORY_VIDEO_EFFECT         : TGUID = '{d990ee14-776c-4723-be46-3da2f56f10b9}';
  10616.   DMOCATEGORY_AUDIO_CAPTURE_EFFECT : TGUID = '{f665aaba-3e09-4920-aa5f-219811148f09}';
  10617.  
  10618. // Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1}
  10619. // Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h
  10620.   DMOCATEGORY_ACOUSTIC_ECHO_CANCEL : TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}';
  10621.  
  10622. // Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5}
  10623. // Matches KSNODETYPE_AUDIO_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h
  10624.   DMOCATEGORY_AUDIO_NOISE_SUPPRESS : TGUID = '{E07F903F-62FD-4e60-8CDD-DEA7236665B5}';
  10625.  
  10626. // Automatic Gain Control {E88C9BA0-C557-11D0-8A2B-00A0C9255AC1}
  10627. // Matches KSNODETYPE_AGC in ksmedia.h
  10628.   DMOCATEGORY_AGC                  : TGUID = '{E88C9BA0-C557-11D0-8A2B-00A0C9255AC1}';
  10629.  
  10630. type
  10631.   TDMO_Partial_MediaType = packed record
  10632.     type_    : TGUID;
  10633.     subtype  : TGUID;
  10634.   end;
  10635.  
  10636.  
  10637. type
  10638.   TDMO_Register_Flags = DWORD;
  10639. const
  10640.   DMO_REGISTERF_IS_KEYED   = $00000001;
  10641.  
  10642. type
  10643.   TDMO_ENUM_FLAGS = DWORD;
  10644. const
  10645.   DMO_ENUMF_INCLUDE_KEYED  = $00000001;
  10646.  
  10647. //------------------------------------------------------------------------------
  10648. // File: DMORt.h
  10649. //
  10650. // Desc: Miscellaneous runtime support for DirectShow Media Objects
  10651. //
  10652. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  10653. //------------------------------------------------------------------------------
  10654.  
  10655. // Mediatype helpers.  MoInitMediaType() goes with MoFreeMediaType(),
  10656. // MoCreateMediaType() goes with MoDeleteMediaType() - don't mix !
  10657. type
  10658. // Takes a pointer to an already allocated DMO_MEDIA_TYPE structure, allocates
  10659. // a format block of cbFormat bytes, and sets appropriate members of
  10660. // DMO_MEDIA_TYPE to point to the newly allocated format block.  Also
  10661. // initializes the IUnknown pointer inside DMO_MEDIA_TYPE to NULL.
  10662. //
  10663. // The format block allocated by MoInitMediaType must be freed by calling
  10664. // MoFreeMediaType().
  10665.   MoInitMediaType = procedure(pmt: PDMO_MEDIA_TYPE; cbFormat: DWORD);
  10666.  
  10667. // Frees the format block and releases any IUnknown, but does not free the
  10668. // DMO_MEDIA_TYPE structure itself.  Input parameter must point to an
  10669. // DMO_MEDIA_TYPE structure previously initialized by MoInitMediaType().
  10670.   MoFreeMediaType = procedure(pmt: PDMO_MEDIA_TYPE);
  10671.  
  10672. // Copies the DMO_MEDIA_TYPE members.  Also duplicates the format block and
  10673. // the IUnknown pointer.  Both parameters must point to valid DMO_MEDIA_TYPE
  10674. // structures.  Target structure must be later freed using MoFreeMediaType().
  10675.   MoCopyMediaType = procedure(pmtDest: PDMO_MEDIA_TYPE; const pmtSrc: TDMO_MEDIA_TYPE);
  10676.  
  10677. // Allocates a new DMO_MEDIA_TYPE structure and initializes it just like
  10678. // MoInitMediaType.  I.e., this function allocates both the format block
  10679. // and the DMO_MEDIA_TYPE structure itself.  Pointer to DMO_MEDIA_TYPE is
  10680. // returned as *ppmt.
  10681. //
  10682. // DMO_MEDIA_TYPE structures allocated by MoCreateMediaType() must be freed
  10683. // by calling MoDeleteMediaType().
  10684.   MoCreateMediaType = procedure(ppmt: PDMO_MEDIA_TYPE; cbFormat: DWORD);
  10685.  
  10686. // Frees any format block, releases any IUnknown, and deletes the
  10687. // DMO_MEDIA_TYPE structure itself.  The input parameter must point to an
  10688. // DMO_MEDIA_TYPE structure previously allocated by MoCreateMediaType().
  10689.   MoDeleteMediaType = procedure(pmt: PDMO_MEDIA_TYPE);
  10690.  
  10691. // Allocates a new DMO_MEDIA_TYPE structure and copies pmtSrc into it like
  10692. // MoCopyMediaType.  I.e., this function allocates a new DMO_MEDIA_TYPE struct
  10693. // as well as a new format block for the target mediatype.  Trager mediatype
  10694. // must later be freed using MoDeleteMediaType().
  10695.   MoDuplicateMediaType = procedure(ppmtDest: PDMO_MEDIA_TYPE; const pmtSrc: TDMO_MEDIA_TYPE);
  10696.  
  10697. //------------------------------------------------------------------------------
  10698. // File: DMOImpl.h
  10699. //
  10700. // Desc: Classes to implement a DMO.
  10701. //
  10702. // Copyright (c) 2000, Microsoft Corporation.  All rights reserved.
  10703. //------------------------------------------------------------------------------
  10704.  
  10705. //  Class to implement a DMO
  10706. //
  10707. //
  10708. //       Assumes the number of input and output streams is fixed
  10709. //       (these are template parameters)
  10710. //
  10711. //       Provides following services:
  10712. //
  10713. //          Basic parameter checking and locking
  10714. //          Fully implements :
  10715. //                 GetStreamCount
  10716. //                 SetInputType
  10717. //                 SetOutputType
  10718. //                 GetCurrentInputType
  10719. //                 GetCurrentOutputType
  10720. //
  10721. //          Checks if all types are set before streaming
  10722. //          Automatically calls AllocateStreamingResources before streaming
  10723. //              if it's not been called already
  10724. //          Prevents streaming until the types on all non-optional streams
  10725. //              have been set
  10726. //
  10727. //
  10728. //  Derived class implements the following methods :
  10729. //
  10730. {
  10731.    HRESULT InternalGetInputStreamInfo(DWORD dwInputStreamIndex, DWORD *pdwFlags);
  10732.    HRESULT InternalGetOutputStreamInfo(DWORD dwOutputStreamIndex, DWORD *pdwFlags);
  10733.    HRESULT InternalCheckInputType(DWORD dwInputStreamIndex, const DMO_MEDIA_TYPE *pmt);
  10734.    HRESULT InternalCheckOutputType(DWORD dwOutputStreamIndex, const DMO_MEDIA_TYPE *pmt);
  10735.    HRESULT InternalGetInputType(DWORD dwInputStreamIndex, DWORD dwTypeIndex,
  10736.                             DMO_MEDIA_TYPE *pmt);
  10737.    HRESULT InternalGetOutputType(DWORD dwOutputStreamIndex, DWORD dwTypeIndex,
  10738.                             DMO_MEDIA_TYPE *pmt);
  10739.    HRESULT InternalGetInputSizeInfo(DWORD dwInputStreamIndex, DWORD *pcbSize,
  10740.                             DWORD *pcbMaxLookahead, DWORD *pcbAlignment);
  10741.    HRESULT InternalGetOutputSizeInfo(DWORD dwOutputStreamIndex, DWORD *pcbSize,
  10742.                              DWORD *pcbAlignment);
  10743.    HRESULT InternalGetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME *prtMaxLatency);
  10744.    HRESULT InternalSetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME rtMaxLatency);
  10745.    HRESULT InternalFlush();
  10746.    HRESULT InternalDiscontinuity(DWORD dwInputStreamIndex);
  10747.    HRESULT InternalAllocateStreamingResources();
  10748.    HRESULT InternalFreeStreamingResources();
  10749.    HRESULT InternalProcessInput(DWORD dwInputStreamIndex, IMediaBuffer *pBuffer,
  10750.                                DWORD dwFlags, REFERENCE_TIME rtTimestamp,
  10751.                                REFERENCE_TIME rtTimelength);
  10752.    HRESULT InternalProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount,
  10753.                                DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
  10754.                            DWORD *pdwStatus);
  10755.    HRESULT InternalAcceptingInput(DWORD dwInputStreamIndex);
  10756.    void Lock();
  10757.    void Unlock();
  10758.  
  10759.    Notes:
  10760.        The derived class is meant to do most work to initialize streaming
  10761.        in AllocateStreamingResources rather than when types are set.
  10762.  
  10763.        This centralizes the work to one
  10764.        clear place based on the types set for all streams.
  10765.  
  10766.        The derived class implements locking.
  10767.  
  10768.        The derived class implements the IUnknown methods
  10769.  
  10770.    Usage example (1 input and 1 output) :
  10771.    class CMyDMO : public IMediaObjectImpl<CMyDmo, 1, 1>,
  10772.                   ...
  10773. }
  10774.  
  10775. TMediaObjectImpl = Class(TInterfacedObject);
  10776. {===============================================================================
  10777.  *
  10778.  * Copyright (C) Microsoft Corporation, 1996 - 1999
  10779.  *
  10780.  * Module Name: ks.h
  10781.  * Abstract:
  10782.  *   Windows Driver Model/Connection and Streaming Architecture (WDM-CSA)
  10783.  *   core definitions.
  10784.  *
  10785.  * Note : All _NTDDK_ specific definitions have been removed from original file
  10786.  *        because never used in DX8SDK.
  10787.  ===============================================================================}
  10788. const
  10789. //===========================================================================
  10790.   IOCTL_KS_PROPERTY      = DWORD(3080195);
  10791.   IOCTL_KS_ENABLE_EVENT  = DWORD(3080199);
  10792.   IOCTL_KS_DISABLE_EVENT = DWORD(3080203);
  10793.   IOCTL_KS_METHOD        = DWORD(3080207);
  10794.   IOCTL_KS_WRITE_STREAM  = DWORD(3112979);
  10795.   IOCTL_KS_READ_STREAM   = DWORD(3096599);
  10796.   IOCTL_KS_RESET_STATE   = DWORD(3080219);
  10797. //===========================================================================
  10798.  
  10799. type
  10800.   TKSRESET = (
  10801.     KSRESET_BEGIN,
  10802.     KSRESET_END
  10803.   );
  10804.  
  10805.   PKSSTATE = ^TKSSTATE;
  10806.   TKSSTATE = (
  10807.     KSSTATE_STOP,
  10808.     KSSTATE_ACQUIRE,
  10809.     KSSTATE_PAUSE,
  10810.     KSSTATE_RUN
  10811.   );
  10812.  
  10813. const
  10814.   KSPRIORITY_LOW       = $00000001;
  10815.   KSPRIORITY_NORMAL    = $40000000;
  10816.   KSPRIORITY_HIGH      = $80000000;
  10817.   KSPRIORITY_EXCLUSIVE = $FFFFFFFF;
  10818.  
  10819. type
  10820.   PKSPRIORITY = ^TKSPRIORITY;
  10821.   TKSPRIORITY = record
  10822.     PriorityClass    : ULONG;
  10823.     PrioritySubClass : ULONG;
  10824.   end;
  10825.  
  10826.   PKSIDENTIFIER = ^TKSIDENTIFIER;
  10827.   TKSIDENTIFIER = record
  10828.     case Integer of
  10829.       0: (
  10830.         Set_  : TGUID;
  10831.         Id    : ULONG;
  10832.         Flags : ULONG);
  10833.       1: (
  10834.         Alignment : int64);
  10835.   end;
  10836.  
  10837.   TKSPROPERTY = TKSIDENTIFIER;
  10838.   PKSPROPERTY = ^TKSIDENTIFIER;
  10839.   TKSMETHOD   = TKSIDENTIFIER;
  10840.   PKSMETHOD   = ^TKSIDENTIFIER;
  10841.   TKSEVENT    = TKSIDENTIFIER;
  10842.   PKSEVENT    = ^TKSIDENTIFIER;
  10843.  
  10844. const
  10845.   KSMETHOD_TYPE_NONE             = $00000000;
  10846.   KSMETHOD_TYPE_READ             = $00000001;
  10847.   KSMETHOD_TYPE_WRITE            = $00000002;
  10848.   KSMETHOD_TYPE_MODIFY           = $00000003;
  10849.   KSMETHOD_TYPE_SOURCE           = $00000004;
  10850.  
  10851.   KSMETHOD_TYPE_SEND             = $00000001;
  10852.   KSMETHOD_TYPE_SETSUPPORT       = $00000100;
  10853.   KSMETHOD_TYPE_BASICSUPPORT     = $00000200;
  10854.  
  10855.   KSMETHOD_TYPE_TOPOLOGY         = $10000000;
  10856.  
  10857.   KSPROPERTY_TYPE_GET            = $00000001;
  10858.   KSPROPERTY_TYPE_SET            = $00000002;
  10859.   KSPROPERTY_TYPE_SETSUPPORT     = $00000100;
  10860.   KSPROPERTY_TYPE_BASICSUPPORT   = $00000200;
  10861.   KSPROPERTY_TYPE_RELATIONS      = $00000400;
  10862.   KSPROPERTY_TYPE_SERIALIZESET   = $00000800;
  10863.   KSPROPERTY_TYPE_UNSERIALIZESET = $00001000;
  10864.   KSPROPERTY_TYPE_SERIALIZERAW   = $00002000;
  10865.   KSPROPERTY_TYPE_UNSERIALIZERAW = $00004000;
  10866.   KSPROPERTY_TYPE_SERIALIZESIZE  = $00008000;
  10867.   KSPROPERTY_TYPE_DEFAULTVALUES  = $00010000;
  10868.  
  10869.   KSPROPERTY_TYPE_TOPOLOGY       = $10000000;
  10870.  
  10871. type
  10872.   PKSP_NODE = ^TKSP_NODE;
  10873.   TKSP_NODE = record
  10874.     Property_ : TKSPROPERTY;
  10875.     NodeId    : ULONG;
  10876.     Reserved  : ULONG;
  10877.   end;
  10878.  
  10879.   PKSM_NODE = ^TKSM_NODE;
  10880.   TKSM_NODE = record
  10881.     Method   : TKSMETHOD;
  10882.     NodeId   : ULONG;
  10883.     Reserved : ULONG;
  10884.   end;
  10885.  
  10886.   PKSE_NODE = ^TKSE_NODE;
  10887.   TKSE_NODE = record
  10888.     Event    : TKSEVENT;
  10889.     NodeId   : ULONG;
  10890.     Reserved : ULONG;
  10891.   end;
  10892.  
  10893. const
  10894.   KSPROPTYPESETID_General : TGUID = '{97E99BA0-BDEA-11CF-A5D6-28DB04C10000}';
  10895.  
  10896. type
  10897.   PKSMULTIPLE_ITEM = ^TKSMULTIPLE_ITEM;
  10898.   TKSMULTIPLE_ITEM = record
  10899.     Size  : ULONG;
  10900.     Count : ULONG;
  10901.   end;
  10902.  
  10903.   PKSPROPERTY_DESCRIPTION = ^TKSPROPERTY_DESCRIPTION;
  10904.   TKSPROPERTY_DESCRIPTION = record
  10905.     AccessFlags      : ULONG;
  10906.     DescriptionSize  : ULONG;
  10907.     PropTypeSet      : TKSIDENTIFIER;
  10908.     MembersListCount : ULONG;
  10909.     Reserved         : ULONG;
  10910.   end;
  10911.  
  10912. const
  10913.   KSPROPERTY_MEMBER_RANGES        = $00000001;
  10914.   KSPROPERTY_MEMBER_STEPPEDRANGES = $00000002;
  10915.   KSPROPERTY_MEMBER_VALUES        = $00000003;
  10916.  
  10917.   KSPROPERTY_MEMBER_FLAG_DEFAULT  = $00000001;
  10918.  
  10919. type
  10920.   PKSPROPERTY_MEMBERSHEADER = ^TKSPROPERTY_MEMBERSHEADER;
  10921.   TKSPROPERTY_MEMBERSHEADER = record
  10922.     MembersFlags : ULONG;
  10923.     MembersSize  : ULONG;
  10924.     MembersCount : ULONG;
  10925.     Flags        : ULONG;
  10926.   end;
  10927.  
  10928.   PKSPROPERTY_BOUNDS_LONG = ^TKSPROPERTY_BOUNDS_LONG;
  10929.   TKSPROPERTY_BOUNDS_LONG = record
  10930.     case Integer of
  10931.       0: (
  10932.         SignedMinimum   : Longint;
  10933.         SignedMaximum   : Longint);
  10934.       1: (
  10935.         UnsignedMinimum : ULONG;
  10936.         UnsignedMaximum : ULONG);
  10937.   end;
  10938.  
  10939.   PKSPROPERTY_BOUNDS_LONGLONG = ^TKSPROPERTY_BOUNDS_LONGLONG;
  10940.   TKSPROPERTY_BOUNDS_LONGLONG = record
  10941.     case Integer of
  10942.       0: (
  10943.         SignedMinimum   : TLargeInteger;
  10944.         SignedMaximum   : TLargeInteger);
  10945.       1: (
  10946.         UnsignedMinimum : TULargeInteger;
  10947.         UnsignedMaximum : TULargeInteger);
  10948.   end;
  10949.  
  10950.   PKSPROPERTY_STEPPING_LONG = ^TKSPROPERTY_STEPPING_LONG;
  10951.   TKSPROPERTY_STEPPING_LONG = record
  10952.     SteppingDelta : ULONG;
  10953.     Reserved      : ULONG;
  10954.     Bounds        : TKSPROPERTY_BOUNDS_LONG;
  10955.   end;
  10956.  
  10957.   PKSPROPERTY_STEPPING_LONGLONG = ^TKSPROPERTY_STEPPING_LONGLONG;
  10958.   TKSPROPERTY_STEPPING_LONGLONG = record
  10959.     SteppingDelta : TULargeInteger;
  10960.     Bounds        : TKSPROPERTY_BOUNDS_LONGLONG;
  10961.   end;
  10962.  
  10963. //===========================================================================
  10964.   PKSWORKER = pointer;
  10965.  
  10966.   PKSEVENTDATA = ^TKSEVENTDATA;
  10967.   TKSEVENTDATA = record
  10968.     NotificationType : ULONG;
  10969.     case integer of
  10970.       0: ( // EventHandle
  10971.         Event          : THANDLE;
  10972.         Reserved       : array[0..1] of ULONG);
  10973.       1: ( // SemaphoreHandle
  10974.         Semaphore      : THANDLE;
  10975.         Reserved_       : ULONG;
  10976.         Adjustment     : Longint);
  10977.       2: ( // Alignment
  10978.         Unused         : Pointer;
  10979.         Alignment      : array[0..1] of Longint);
  10980.   end;
  10981.  
  10982. const
  10983.   KSEVENTF_EVENT_HANDLE     = $00000001;
  10984.   KSEVENTF_SEMAPHORE_HANDLE = $00000002;
  10985.  
  10986.   KSEVENT_TYPE_ENABLE         = $00000001;
  10987.   KSEVENT_TYPE_ONESHOT        = $00000002;
  10988.   KSEVENT_TYPE_ENABLEBUFFERED = $00000004;
  10989.   KSEVENT_TYPE_SETSUPPORT     = $00000100;
  10990.   KSEVENT_TYPE_BASICSUPPORT   = $00000200;
  10991.   KSEVENT_TYPE_QUERYBUFFER    = $00000400;
  10992.  
  10993.   KSEVENT_TYPE_TOPOLOGY       = $10000000;
  10994.  
  10995. type
  10996.   PKSQUERYBUFFER = ^TKSQUERYBUFFER;
  10997.   TKSQUERYBUFFER = record
  10998.     Event     : TKSEVENT;
  10999.     EventData : PKSEVENTDATA;
  11000.     Reserved  : Pointer;
  11001.   end;
  11002.  
  11003.   TKSRELATIVEEVENT = record
  11004.      Size      : ULONG;
  11005.      Flags     : ULONG;
  11006.      case integer of
  11007.        0: ( ObjectHandle  : THANDLE;
  11008.             Reserved      : Pointer;
  11009.             Event         : TKSEVENT;
  11010.             EventData     : TKSEVENTDATA);
  11011.        1: ( ObjectPointer : Pointer);
  11012.  
  11013.   end;
  11014.  
  11015. const
  11016.   KSRELATIVEEVENT_FLAG_HANDLE  = $00000001;
  11017.   KSRELATIVEEVENT_FLAG_POINTER = $00000002;
  11018.  
  11019. //===========================================================================
  11020.  
  11021. type
  11022.   PKSEVENT_TIME_MARK = ^TKSEVENT_TIME_MARK;
  11023.   TKSEVENT_TIME_MARK = record
  11024.     EventData : TKSEVENTDATA;
  11025.     MarkTime  : int64;
  11026.   end;
  11027.  
  11028.   PKSEVENT_TIME_INTERVAL = ^TKSEVENT_TIME_INTERVAL;
  11029.   TKSEVENT_TIME_INTERVAL = record
  11030.     EventData : TKSEVENTDATA;
  11031.     TimeBase  : int64;
  11032.     Interval  : int64;
  11033.   end;
  11034.  
  11035.   PKSINTERVAL = ^TKSINTERVAL;
  11036.   TKSINTERVAL = record
  11037.     TimeBase : int64;
  11038.     Interval : int64;
  11039.   end;
  11040.  
  11041. //===========================================================================
  11042. const
  11043.   KSPROPSETID_General : TGUID = '{1464EDA5-6A8F-11D1-9AA7-00A0C9223196}';
  11044.  
  11045. type
  11046.   TKSPROPERTY_GENERAL = (
  11047.     KSPROPERTY_GENERAL_COMPONENTID
  11048.   );
  11049.  
  11050.   PKSCOMPONENTID = ^TKSCOMPONENTID;
  11051.   TKSCOMPONENTID = record
  11052.     Manufacturer : TGUID;
  11053.     Product      : TGUID;
  11054.     Component    : TGUID;
  11055.     Name         : TGUID;
  11056.     Version      : ULONG;
  11057.     Revision     : ULONG;
  11058.   end;
  11059.  
  11060. {#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\
  11061.     DEFINE_KSPROPERTY_ITEM(\
  11062.         KSPROPERTY_GENERAL_COMPONENTID,\
  11063.         (Handler),\
  11064.         sizeof(KSPROPERTY),\
  11065.         sizeof(KSCOMPONENTID),\
  11066.         NULL, NULL, 0, NULL, NULL, 0)}
  11067.  
  11068. const
  11069.   KSMETHODSETID_StreamIo : TGUID = '{65D003CA-1523-11D2-B27A-00A0C9223196}';
  11070.  
  11071. type
  11072.   TKSMETHOD_STREAMIO = (
  11073.     KSMETHOD_STREAMIO_READ,
  11074.     KSMETHOD_STREAMIO_WRITE
  11075.   );
  11076.  
  11077. {#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)\
  11078.     DEFINE_KSMETHOD_ITEM(\
  11079.         KSMETHOD_STREAMIO_READ,\
  11080.         KSMETHOD_TYPE_WRITE,\
  11081.         (Handler),\
  11082.         sizeof(KSMETHOD),\
  11083.         0,\
  11084.         NULL)
  11085.  
  11086. #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)\
  11087.     DEFINE_KSMETHOD_ITEM(\
  11088.         KSMETHOD_STREAMIO_WRITE,\
  11089.         KSMETHOD_TYPE_READ,\
  11090.         (Handler),\
  11091.         sizeof(KSMETHOD),\
  11092.         0,\
  11093.         NULL)   }
  11094.  
  11095. const
  11096.   KSPROPSETID_MediaSeeking : TGUID = '{EE904F0C-D09B-11D0-ABE9-00A0C9223196}';
  11097.  
  11098. type
  11099.   TKSPROPERTY_MEDIASEEKING = (
  11100.     KSPROPERTY_MEDIASEEKING_CAPABILITIES,
  11101.     KSPROPERTY_MEDIASEEKING_FORMATS,
  11102.     KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
  11103.     KSPROPERTY_MEDIASEEKING_POSITION,
  11104.     KSPROPERTY_MEDIASEEKING_STOPPOSITION,
  11105.     KSPROPERTY_MEDIASEEKING_POSITIONS,
  11106.     KSPROPERTY_MEDIASEEKING_DURATION,
  11107.     KSPROPERTY_MEDIASEEKING_AVAILABLE,
  11108.     KSPROPERTY_MEDIASEEKING_PREROLL,
  11109.     KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
  11110.   );
  11111.  
  11112.  
  11113.   TKS_SEEKING_FLAGS = TOleEnum;
  11114. const
  11115.     KS_SEEKING_NoPositioning          = $0;
  11116.     KS_SEEKING_AbsolutePositioning    = $1;
  11117.     KS_SEEKING_RelativePositioning    = $2;
  11118.     KS_SEEKING_IncrementalPositioning = $3;
  11119.     KS_SEEKING_PositioningBitsMask    = $3;
  11120.     KS_SEEKING_SeekToKeyFrame         = $4;
  11121.     KS_SEEKING_ReturnTime             = $8;
  11122.  
  11123. type
  11124.   TKS_SEEKING_CAPABILITIES = TOleEnum;
  11125. const
  11126.     KS_SEEKING_CanSeekAbsolute  = $1;
  11127.     KS_SEEKING_CanSeekForwards  = $2;
  11128.     KS_SEEKING_CanSeekBackwards = $4;
  11129.     KS_SEEKING_CanGetCurrentPos = $8;
  11130.     KS_SEEKING_CanGetStopPos    = $10;
  11131.     KS_SEEKING_CanGetDuration   = $20;
  11132.     KS_SEEKING_CanPlayBackwards = $40;
  11133.  
  11134. type
  11135.   PKSPROPERTY_POSITIONS = ^TKSPROPERTY_POSITIONS;
  11136.   TKSPROPERTY_POSITIONS = record
  11137.     Current      : int64;
  11138.     Stop         : int64;
  11139.     CurrentFlags : TKS_SEEKING_FLAGS;
  11140.     StopFlags    : TKS_SEEKING_FLAGS;
  11141.   end;
  11142.  
  11143.   PKSPROPERTY_MEDIAAVAILABLE = ^TKSPROPERTY_MEDIAAVAILABLE;
  11144.   TKSPROPERTY_MEDIAAVAILABLE = record
  11145.     Earliest : int64;
  11146.     Latest   : int64;
  11147.   end;
  11148.  
  11149.   PKSP_TIMEFORMAT = ^TKSP_TIMEFORMAT;
  11150.   TKSP_TIMEFORMAT = record
  11151.     Property_    : TKSPROPERTY;
  11152.     SourceFormat : TGUID;
  11153.     TargetFormat : TGUID;
  11154.     Time         : int64;
  11155.   end;
  11156.  
  11157. {#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
  11158.     DEFINE_KSPROPERTY_ITEM(\
  11159.         KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
  11160.         (Handler),\
  11161.         sizeof(KSPROPERTY),\
  11162.         sizeof(KS_SEEKING_CAPABILITIES),\
  11163.         NULL, NULL, 0, NULL, NULL, 0)
  11164.  
  11165. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
  11166.     DEFINE_KSPROPERTY_ITEM(\
  11167.         KSPROPERTY_MEDIASEEKING_FORMATS,\
  11168.         (Handler),\
  11169.         sizeof(KSPROPERTY),\
  11170.         0,\
  11171.         NULL, NULL, 0, NULL, NULL, 0)
  11172.  
  11173. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
  11174.     DEFINE_KSPROPERTY_ITEM(\
  11175.         KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
  11176.         (GetHandler),\
  11177.         sizeof(KSPROPERTY),\
  11178.         sizeof(GUID),\
  11179.         (SetHandler),\
  11180.         NULL, 0, NULL, NULL, 0)
  11181.  
  11182. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
  11183.     DEFINE_KSPROPERTY_ITEM(\
  11184.         KSPROPERTY_MEDIASEEKING_POSITION,\
  11185.         (Handler),\
  11186.         sizeof(KSPROPERTY),\
  11187.         sizeof(LONGLONG),\
  11188.         NULL, NULL, 0, NULL, NULL, 0)
  11189.  
  11190. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
  11191.     DEFINE_KSPROPERTY_ITEM(\
  11192.         KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
  11193.         (Handler),\
  11194.         sizeof(KSPROPERTY),\
  11195.         sizeof(LONGLONG),\
  11196.         NULL, NULL, 0, NULL, NULL, 0)
  11197.  
  11198. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
  11199.     DEFINE_KSPROPERTY_ITEM(\
  11200.         KSPROPERTY_MEDIASEEKING_POSITIONS,\
  11201.         NULL,\
  11202.         sizeof(KSPROPERTY),\
  11203.         sizeof(KSPROPERTY_POSITIONS),\
  11204.         (Handler),\
  11205.         NULL, 0, NULL, NULL, 0)
  11206.  
  11207. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
  11208.     DEFINE_KSPROPERTY_ITEM(\
  11209.         KSPROPERTY_MEDIASEEKING_DURATION,\
  11210.         (Handler),\
  11211.         sizeof(KSPROPERTY),\
  11212.         sizeof(LONGLONG),\
  11213.         NULL, NULL, 0, NULL, NULL, 0)
  11214.  
  11215. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
  11216.     DEFINE_KSPROPERTY_ITEM(\
  11217.         KSPROPERTY_MEDIASEEKING_AVAILABLE,\
  11218.         (Handler),\
  11219.         sizeof(KSPROPERTY),\
  11220.         sizeof(KSPROPERTY_MEDIAAVAILABLE),\
  11221.         NULL, NULL, 0, NULL, NULL, 0)
  11222.  
  11223. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
  11224.     DEFINE_KSPROPERTY_ITEM(\
  11225.         KSPROPERTY_MEDIASEEKING_PREROLL,\
  11226.         (Handler),\
  11227.         sizeof(KSPROPERTY),\
  11228.         sizeof(LONGLONG),\
  11229.         NULL, NULL, 0, NULL, NULL, 0)
  11230.  
  11231. #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
  11232.     DEFINE_KSPROPERTY_ITEM(\
  11233.         KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
  11234.         (Handler),\
  11235.         sizeof(KSP_TIMEFORMAT),\
  11236.         sizeof(LONGLONG),\
  11237.         NULL, NULL, 0, NULL, NULL, 0)  }
  11238.  
  11239. //===========================================================================
  11240.  
  11241. const
  11242.   KSPROPSETID_Topology : TGUID = '{720D4AC0-7533-11D0-A5D6-28DB04C10000}';
  11243.  
  11244. type
  11245.   TKSPROPERTY_TOPOLOGY = (
  11246.     KSPROPERTY_TOPOLOGY_CATEGORIES,
  11247.     KSPROPERTY_TOPOLOGY_NODES,
  11248.     KSPROPERTY_TOPOLOGY_CONNECTIONS,
  11249.     KSPROPERTY_TOPOLOGY_NAME
  11250.   );
  11251.  
  11252. {#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
  11253.     DEFINE_KSPROPERTY_ITEM(\
  11254.         KSPROPERTY_TOPOLOGY_CATEGORIES,\
  11255.         (Handler),\
  11256.         sizeof(KSPROPERTY),\
  11257.         0,\
  11258.         NULL, NULL, 0, NULL, NULL, 0)
  11259.  
  11260. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
  11261.     DEFINE_KSPROPERTY_ITEM(\
  11262.         KSPROPERTY_TOPOLOGY_NODES,\
  11263.         (Handler),\
  11264.         sizeof(KSPROPERTY),\
  11265.         0,\
  11266.         NULL, NULL, 0, NULL, NULL, 0)
  11267.  
  11268. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
  11269.     DEFINE_KSPROPERTY_ITEM(\
  11270.         KSPROPERTY_TOPOLOGY_CONNECTIONS,\
  11271.         (Handler),\
  11272.         sizeof(KSPROPERTY),\
  11273.         0,\
  11274.         NULL, NULL, 0, NULL, NULL, 0)
  11275.  
  11276. #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
  11277.     DEFINE_KSPROPERTY_ITEM(\
  11278.         KSPROPERTY_TOPOLOGY_NAME,\
  11279.         (Handler),\
  11280.         sizeof(KSP_NODE),\
  11281.         0,\
  11282.         NULL, NULL, 0, NULL, NULL, 0)
  11283.  
  11284. #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
  11285. DEFINE_KSPROPERTY_TABLE(TopologySet) {\
  11286.     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
  11287.     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
  11288.     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
  11289.     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
  11290. }
  11291.  
  11292. const
  11293.   KSCATEGORY_BRIDGE                  : TGUID = '{085AFF00-62CE-11CF-A5D6-28DB04C10000}';
  11294.   KSCATEGORY_CAPTURE                 : TGUID = '{65E8773D-8F56-11D0-A3B9-00A0C9223196}';
  11295.   KSCATEGORY_RENDER                  : TGUID = '{65E8773E-8F56-11D0-A3B9-00A0C9223196}';
  11296.   KSCATEGORY_MIXER                   : TGUID = '{AD809C00-7B88-11D0-A5D6-28DB04C10000}';
  11297.   KSCATEGORY_SPLITTER                : TGUID = '{0A4252A0-7E70-11D0-A5D6-28DB04C10000}';
  11298.   KSCATEGORY_DATACOMPRESSOR          : TGUID = '{1E84C900-7E70-11D0-A5D6-28DB04C10000}';
  11299.   KSCATEGORY_DATADECOMPRESSOR        : TGUID = '{2721AE20-7E70-11D0-A5D6-28DB04C10000}';
  11300.   KSCATEGORY_DATATRANSFORM           : TGUID = '{2EB07EA0-7E70-11D0-A5D6-28DB04C10000}';
  11301.   KSCATEGORY_COMMUNICATIONSTRANSFORM : TGUID = '{CF1DDA2C-9743-11D0-A3EE-00A0C9223196}';
  11302.   KSCATEGORY_INTERFACETRANSFORM      : TGUID = '{CF1DDA2D-9743-11D0-A3EE-00A0C9223196}';
  11303.   KSCATEGORY_MEDIUMTRANSFORM         : TGUID = '{CF1DDA2E-9743-11D0-A3EE-00A0C9223196}';
  11304.   KSCATEGORY_FILESYSTEM              : TGUID = '{760FED5E-9357-11D0-A3CC-00A0C9223196}';
  11305.  
  11306. // KSNAME_Clock
  11307.   KSCATEGORY_CLOCK   : TGUID = '{53172480-4791-11D0-A5D6-28DB04C10000}';
  11308.   KSCATEGORY_PROXY   : TGUID = '{97EBAACA-95BD-11D0-A3EA-00A0C9223196}';
  11309.   KSCATEGORY_QUALITY : TGUID = '{97EBAACB-95BD-11D0-A3EA-00A0C9223196}';
  11310.  
  11311. type
  11312.   PKSTOPOLOGY_CONNECTION = ^TKSTOPOLOGY_CONNECTION;
  11313.   TKSTOPOLOGY_CONNECTION = record
  11314.     FromNode    : ULONG;
  11315.     FromNodePin : ULONG;
  11316.     ToNode      : ULONG;
  11317.     ToNodePin   : ULONG;
  11318.   end;
  11319.  
  11320.   PKSTOPOLOGY = ^TKSTOPOLOGY;
  11321.   TKSTOPOLOGY = record
  11322.     CategoriesCount          : ULONG;
  11323.     Categories               : ^TGUID;
  11324.     TopologyNodesCount       : ULONG;
  11325.     TopologyNodes            : ^TGUID;
  11326.     TopologyConnectionsCount : ULONG;
  11327.     TopologyConnections      : ^TKSTOPOLOGY_CONNECTION;
  11328.     TopologyNodesNames       : ^TGUID;
  11329.     Reserved                 : ULONG;
  11330.   end;
  11331.  
  11332. const
  11333.   KSFILTER_NODE = ULONG(-1);
  11334.   KSALL_NODES   = ULONG(-1);
  11335.  
  11336. type
  11337.   PKSNODE_CREATE = ^TKSNODE_CREATE;
  11338.   TKSNODE_CREATE = record
  11339.     CreateFlags : ULONG;
  11340.     Node        : ULONG;
  11341.   end;
  11342.  
  11343. //===========================================================================
  11344. const
  11345. // TIME_FORMAT_NONE
  11346.   KSTIME_FORMAT_NONE       : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11347.  
  11348. // TIME_FORMAT_FRAME
  11349.   KSTIME_FORMAT_FRAME      : TGUID = '{7b785570-8c82-11cf-bc0c-00aa00ac74f6}';
  11350.  
  11351. // TIME_FORMAT_BYTE
  11352.   KSTIME_FORMAT_BYTE       : TGUID = '{7b785571-8c82-11cf-bc0c-00aa00ac74f6}';
  11353.  
  11354. // TIME_FORMAT_SAMPLE
  11355.   KSTIME_FORMAT_SAMPLE     : TGUID = '{7b785572-8c82-11cf-bc0c-00aa00ac74f6}';
  11356.  
  11357. // TIME_FORMAT_FIELD
  11358.   KSTIME_FORMAT_FIELD      : TGUID = '{7b785573-8c82-11cf-bc0c-00aa00ac74f6}';
  11359.  
  11360. // TIME_FORMAT_MEDIA_TIME
  11361.   KSTIME_FORMAT_MEDIA_TIME : TGUID = '{7b785574-8c82-11cf-bc0c-00aa00ac74f6}';
  11362.  
  11363. //===========================================================================
  11364.  
  11365. type
  11366.   PKSPIN_INTERFACE = ^TKSPIN_INTERFACE;
  11367.   TKSPIN_INTERFACE = TKSIDENTIFIER;
  11368.  
  11369. const
  11370.   KSINTERFACESETID_Standard : TGUID = '{1A8766A0-62CE-11CF-A5D6-28DB04C10000}';
  11371.  
  11372. type
  11373.   TKSINTERFACE_STANDARD = (
  11374.     KSINTERFACE_STANDARD_STREAMING,
  11375.     KSINTERFACE_STANDARD_LOOPED_STREAMING,
  11376.     KSINTERFACE_STANDARD_CONTROL
  11377.   );
  11378.  
  11379. const
  11380.   KSINTERFACESETID_FileIo : TGUID = '{8C6F932C-E771-11D0-B8FF-00A0C9223196}';
  11381.  
  11382. type
  11383.   TKSINTERFACE_FILEIO = (
  11384.     KSINTERFACE_FILEIO_STREAMING
  11385.   );
  11386.  
  11387. //===========================================================================
  11388. const
  11389.   KSMEDIUM_TYPE_ANYINSTANCE = 0;
  11390.  
  11391.   KSMEDIUMSETID_Standard : TGUID = '{4747B320-62CE-11CF-A5D6-28DB04C10000}';
  11392.  
  11393. //For compatibility only
  11394.   KSMEDIUM_STANDARD_DEVIO = KSMEDIUM_TYPE_ANYINSTANCE;
  11395.  
  11396. //===========================================================================
  11397.  
  11398.   KSPROPSETID_Pin : TGUID = '{8C134960-51AD-11CF-878A-94F801C10000}';
  11399.  
  11400. type
  11401.   TKSPROPERTY_PIN = (
  11402.     KSPROPERTY_PIN_CINSTANCES,
  11403.     KSPROPERTY_PIN_CTYPES,
  11404.     KSPROPERTY_PIN_DATAFLOW,
  11405.     KSPROPERTY_PIN_DATARANGES,
  11406.     KSPROPERTY_PIN_DATAINTERSECTION,
  11407.     KSPROPERTY_PIN_INTERFACES,
  11408.     KSPROPERTY_PIN_MEDIUMS,
  11409.     KSPROPERTY_PIN_COMMUNICATION,
  11410.     KSPROPERTY_PIN_GLOBALCINSTANCES,
  11411.     KSPROPERTY_PIN_NECESSARYINSTANCES,
  11412.     KSPROPERTY_PIN_PHYSICALCONNECTION,
  11413.     KSPROPERTY_PIN_CATEGORY,
  11414.     KSPROPERTY_PIN_NAME,
  11415.     KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
  11416.     KSPROPERTY_PIN_PROPOSEDATAFORMAT
  11417.   );
  11418.  
  11419.   PKSP_PIN = ^TKSP_PIN;
  11420.   TKSP_PIN = record
  11421.     Property_  : TKSPROPERTY;
  11422.     PinId      : ULONG;
  11423.     Reserved   : ULONG;
  11424.   end;
  11425.  
  11426. const
  11427.   KSINSTANCE_INDETERMINATE = ULONG(-1);
  11428.  
  11429. type
  11430.   PKSPIN_CINSTANCES = ^TKSPIN_CINSTANCES;
  11431.   TKSPIN_CINSTANCES = record
  11432.     PossibleCount : ULONG;
  11433.     CurrentCount  : ULONG;
  11434.   end;
  11435.  
  11436.   PKSPIN_DATAFLOW = ^TKSPIN_DATAFLOW;
  11437.   TKSPIN_DATAFLOW = (
  11438.     KSPIN_DATAFLOW_Invalid,
  11439.     KSPIN_DATAFLOW_IN,
  11440.     KSPIN_DATAFLOW_OUT
  11441.   );
  11442.  
  11443. const
  11444.   KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION =  0;
  11445.   KSDATAFORMAT_TEMPORAL_COMPRESSION     =  (1 shl KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION);
  11446.   KSDATAFORMAT_BIT_ATTRIBUTES           =  1;
  11447.   KSDATAFORMAT_ATTRIBUTES               =  (1 shl KSDATAFORMAT_BIT_ATTRIBUTES);
  11448.  
  11449.   KSDATARANGE_BIT_ATTRIBUTES          = 1;
  11450.   KSDATARANGE_ATTRIBUTES              = (1 shl KSDATARANGE_BIT_ATTRIBUTES);
  11451.   KSDATARANGE_BIT_REQUIRED_ATTRIBUTES = 2;
  11452.   KSDATARANGE_REQUIRED_ATTRIBUTES     = (1 shl KSDATARANGE_BIT_REQUIRED_ATTRIBUTES);
  11453.  
  11454. type
  11455.   PKSDATAFORMAT = ^TKSDATAFORMAT;
  11456.   TKSDATAFORMAT = record
  11457.     case integer of
  11458.     0: (
  11459.       FormatSize  : ULONG;
  11460.       Flags       : ULONG;
  11461.       SampleSize  : ULONG;
  11462.       Reserved    : ULONG;
  11463.       MajorFormat : TGUID;
  11464.       SubFormat   : TGUID;
  11465.       Specifier   : TGUID);
  11466.     1: (
  11467.       Alignment   : int64);
  11468.   end;
  11469.   PKSDATARANGE = ^TKSDATARANGE;
  11470.   TKSDATARANGE = TKSDATAFORMAT;
  11471.  
  11472. const
  11473.   KSATTRIBUTE_REQUIRED = $00000001;
  11474.  
  11475. type
  11476.   PKSATTRIBUTE = ^TKSATTRIBUTE;
  11477.   TKSATTRIBUTE = record
  11478.     Size      : ULONG;
  11479.     Flags     : ULONG;
  11480.     Attribute : TGUID;
  11481.   end;
  11482.  
  11483.   PKSPIN_COMMUNICATION = ^TKSPIN_COMMUNICATION;
  11484.   TKSPIN_COMMUNICATION = (
  11485.     KSPIN_COMMUNICATION_NONE,
  11486.     KSPIN_COMMUNICATION_SINK,
  11487.     KSPIN_COMMUNICATION_SOURCE,
  11488.     KSPIN_COMMUNICATION_BOTH,
  11489.     KSPIN_COMMUNICATION_BRIDGE
  11490.   );
  11491.  
  11492.   PKSPIN_MEDIUM = ^TKSPIN_MEDIUM;
  11493.   TKSPIN_MEDIUM = TKSIDENTIFIER;
  11494.  
  11495.   PKSPIN_CONNECT = ^TKSPIN_CONNECT;
  11496.   TKSPIN_CONNECT = record
  11497.     Interface_  : TKSPIN_INTERFACE;
  11498.     Medium      : TKSPIN_MEDIUM;
  11499.     PinId       : ULONG;
  11500.     PinToHandle : THANDLE;
  11501.     Priority    : TKSPRIORITY;
  11502.   end;
  11503.  
  11504.   PKSPIN_PHYSICALCONNECTION = ^TKSPIN_PHYSICALCONNECTION;
  11505.   TKSPIN_PHYSICALCONNECTION = record
  11506.     Size             : ULONG;
  11507.     Pin              : ULONG;
  11508.     SymbolicLinkName : array[0..0] of WCHAR;
  11509.   end;
  11510.  
  11511. {
  11512. #define DEFINE_KSPIN_INTERFACE_TABLE(tablename)\
  11513.     const KSPIN_INTERFACE tablename[] =
  11514.  
  11515. #define DEFINE_KSPIN_INTERFACE_ITEM(guid, interface)\
  11516.     {\
  11517.         STATICGUIDOF(guid),\
  11518.         (interface),\
  11519.         0\
  11520.     }
  11521. {
  11522. #define DEFINE_KSPIN_MEDIUM_TABLE( tablename )\
  11523.     const KSPIN_MEDIUM tablename[] =
  11524.  
  11525. #define DEFINE_KSPIN_MEDIUM_ITEM(guid, medium)\
  11526.     DEFINE_KSPIN_INTERFACE_ITEM(guid, medium)
  11527.  
  11528. #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
  11529.     DEFINE_KSPROPERTY_ITEM(\
  11530.         KSPROPERTY_PIN_CINSTANCES,\
  11531.         (Handler),\
  11532.         sizeof(KSP_PIN),\
  11533.         sizeof(KSPIN_CINSTANCES),\
  11534.         NULL, NULL, 0, NULL, NULL, 0)
  11535.  
  11536. #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
  11537.     DEFINE_KSPROPERTY_ITEM(\
  11538.         KSPROPERTY_PIN_CTYPES,\
  11539.         (Handler),\
  11540.         sizeof(KSPROPERTY),\
  11541.         sizeof(ULONG),\
  11542.         NULL, NULL, 0, NULL, NULL, 0)
  11543.  
  11544. #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
  11545.     DEFINE_KSPROPERTY_ITEM(\
  11546.         KSPROPERTY_PIN_DATAFLOW,\
  11547.         (Handler),\
  11548.         sizeof(KSP_PIN),\
  11549.         sizeof(KSPIN_DATAFLOW),\
  11550.         NULL, NULL, 0, NULL, NULL, 0)
  11551.  
  11552. #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
  11553.     DEFINE_KSPROPERTY_ITEM(\
  11554.         KSPROPERTY_PIN_DATARANGES,\
  11555.         (Handler),\
  11556.         sizeof(KSP_PIN),\
  11557.         0,\
  11558.         NULL, NULL, 0, NULL, NULL, 0)
  11559.  
  11560. #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
  11561.     DEFINE_KSPROPERTY_ITEM(\
  11562.         KSPROPERTY_PIN_DATAINTERSECTION,\
  11563.         (Handler),\
  11564.         sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
  11565.         0,\
  11566.         NULL, NULL, 0, NULL, NULL, 0)
  11567.  
  11568. #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
  11569.     DEFINE_KSPROPERTY_ITEM(\
  11570.         KSPROPERTY_PIN_INTERFACES,\
  11571.         (Handler),\
  11572.         sizeof(KSP_PIN),\
  11573.         0,\
  11574.         NULL, NULL, 0, NULL, NULL, 0)
  11575.  
  11576. #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
  11577.     DEFINE_KSPROPERTY_ITEM(\
  11578.         KSPROPERTY_PIN_MEDIUMS,\
  11579.         (Handler),\
  11580.         sizeof(KSP_PIN),\
  11581.         0,\
  11582.         NULL, NULL, 0, NULL, NULL, 0)
  11583.  
  11584. #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
  11585.     DEFINE_KSPROPERTY_ITEM(\
  11586.         KSPROPERTY_PIN_COMMUNICATION,\
  11587.         (Handler),\
  11588.         sizeof(KSP_PIN),\
  11589.         sizeof(KSPIN_COMMUNICATION),\
  11590.         NULL, NULL, 0, NULL, NULL, 0)
  11591.  
  11592. #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
  11593.     DEFINE_KSPROPERTY_ITEM(\
  11594.         KSPROPERTY_PIN_GLOBALCINSTANCES,\
  11595.         (Handler),\
  11596.         sizeof(KSP_PIN),\
  11597.         sizeof(KSPIN_CINSTANCES),\
  11598.         NULL, NULL, 0, NULL, NULL, 0)
  11599.  
  11600. #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
  11601.     DEFINE_KSPROPERTY_ITEM(\
  11602.         KSPROPERTY_PIN_NECESSARYINSTANCES,\
  11603.         (Handler),\
  11604.         sizeof(KSP_PIN),\
  11605.         sizeof(ULONG),\
  11606.         NULL, NULL, 0, NULL, NULL, 0)
  11607.  
  11608. #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
  11609.     DEFINE_KSPROPERTY_ITEM(\
  11610.         KSPROPERTY_PIN_PHYSICALCONNECTION,\
  11611.         (Handler),\
  11612.         sizeof(KSP_PIN),\
  11613.         0,\
  11614.         NULL, NULL, 0, NULL, NULL, 0)
  11615.  
  11616. #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
  11617.     DEFINE_KSPROPERTY_ITEM(\
  11618.         KSPROPERTY_PIN_CATEGORY,\
  11619.         (Handler),\
  11620.         sizeof(KSP_PIN),\
  11621.         sizeof(GUID),\
  11622.         NULL, NULL, 0, NULL, NULL, 0)
  11623.  
  11624. #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
  11625.     DEFINE_KSPROPERTY_ITEM(\
  11626.         KSPROPERTY_PIN_NAME,\
  11627.         (Handler),\
  11628.         sizeof(KSP_PIN),\
  11629.         0,\
  11630.         NULL, NULL, 0, NULL, NULL, 0)
  11631.  
  11632. #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
  11633.     DEFINE_KSPROPERTY_ITEM(\
  11634.         KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
  11635.         (Handler),\
  11636.         sizeof(KSP_PIN),\
  11637.         0,\
  11638.         NULL, NULL, 0, NULL, NULL, 0)
  11639.  
  11640. #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
  11641.     DEFINE_KSPROPERTY_ITEM(\
  11642.         KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
  11643.         NULL,\
  11644.         sizeof(KSP_PIN),\
  11645.         sizeof(KSDATAFORMAT),\
  11646.         (Handler), NULL, 0, NULL, NULL, 0)
  11647.  
  11648. #define DEFINE_KSPROPERTY_PINSET(PinSet,\
  11649.     PropGeneral, PropInstances, PropIntersection)\
  11650. DEFINE_KSPROPERTY_TABLE(PinSet) {\
  11651.     DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
  11652.     DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
  11653.     DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
  11654.     DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
  11655.     DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
  11656.     DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
  11657.     DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
  11658.     DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
  11659.     DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
  11660.     DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
  11661. }
  11662.  
  11663. {#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
  11664.     PropGeneral, PropInstances, PropIntersection)\
  11665. DEFINE_KSPROPERTY_TABLE(PinSet) {\
  11666.     DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
  11667.     DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
  11668.     DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
  11669.     DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
  11670.     DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
  11671.     DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
  11672.     DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
  11673.     DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
  11674.     DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
  11675.     DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
  11676.     DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
  11677. }
  11678.  
  11679. const
  11680.   KSNAME_Filter       : TGUID = '{9b365890-165f-11d0-a195-0020afd156e4}';
  11681.   KSSTRING_Filter             = '{9B365890-165F-11D0-A195-0020AFD156E4}';
  11682.  
  11683.   KSNAME_Pin          : TGUID = '{146F1A80-4791-11D0-A5D6-28DB04C10000}';
  11684.   KSSTRING_Pin                = '{146F1A80-4791-11D0-A5D6-28DB04C10000}';
  11685.  
  11686.   KSNAME_Clock        : TGUID = '{53172480-4791-11D0-A5D6-28DB04C10000}';
  11687.   KSSTRING_Clock              = '{53172480-4791-11D0-A5D6-28DB04C10000}';
  11688.  
  11689.   KSNAME_Allocator    : TGUID = '{642F5D00-4791-11D0-A5D6-28DB04C10000}';
  11690.   KSSTRING_Allocator          = '{642F5D00-4791-11D0-A5D6-28DB04C10000}';
  11691.  
  11692.   KSSTRING_AllocatorEx        = '{091BB63B-603F-11D1-B067-00A0C9062802}';
  11693.  
  11694.   KSNAME_TopologyNode : TGUID = '{0621061A-EE75-11D0-B915-00A0C9223196}';
  11695.   KSSTRING_TopologyNode       = '{0621061A-EE75-11D0-B915-00A0C9223196}';
  11696.  
  11697. //===========================================================================
  11698.  
  11699. // MEDIATYPE_NULL
  11700. const
  11701.   KSDATAFORMAT_TYPE_WILDCARD       : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11702.  
  11703. // MEDIASUBTYPE_NULL
  11704.   KSDATAFORMAT_SUBTYPE_WILDCARD    : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11705.  
  11706. // MEDIATYPE_Stream
  11707.   KSDATAFORMAT_TYPE_STREAM         : TGUID = '{E436EB83-524F-11CE-9F53-0020AF0BA770}';
  11708.  
  11709. // MEDIASUBTYPE_None
  11710.   KSDATAFORMAT_SUBTYPE_NONE        : TGUID = '{E436EB8E-524F-11CE-9F53-0020AF0BA770}';
  11711.  
  11712.   KSDATAFORMAT_SPECIFIER_WILDCARD  : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11713.  
  11714.   KSDATAFORMAT_SPECIFIER_FILENAME  : TGUID = '{AA797B40-E974-11CF-A5D6-28DB04C10000}';
  11715.   KSDATAFORMAT_SPECIFIER_FILEHANDLE: TGUID = '{65E8773C-8F56-11D0-A3B9-00A0C9223196}';
  11716.  
  11717. // FORMAT_None
  11718.   KSDATAFORMAT_SPECIFIER_NONE      : TGUID = '{0F6417D6-C318-11D0-A43F-00A0C9223196}';
  11719.  
  11720. //===========================================================================
  11721.  
  11722.   KSPROPSETID_Quality : TGUID = '{D16AD380-AC1A-11CF-A5D6-28DB04C10000}';
  11723.  
  11724. type
  11725.   TKSPROPERTY_QUALITY = (
  11726.     KSPROPERTY_QUALITY_REPORT,
  11727.     KSPROPERTY_QUALITY_ERROR
  11728.   );
  11729.  
  11730. {#define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler, SetHandler)\
  11731.     DEFINE_KSPROPERTY_ITEM(\
  11732.         KSPROPERTY_QUALITY_REPORT,\
  11733.         (GetHandler),\
  11734.         sizeof(KSPROPERTY),\
  11735.         sizeof(KSQUALITY),\
  11736.         (SetHandler),\
  11737.         NULL, 0, NULL, NULL, 0)
  11738.  
  11739. #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler, SetHandler)\
  11740.     DEFINE_KSPROPERTY_ITEM(\
  11741.         KSPROPERTY_QUALITY_ERROR,\
  11742.         (GetHandler),\
  11743.         sizeof(KSPROPERTY),\
  11744.         sizeof(KSERROR),\
  11745.         (SetHandler),\
  11746.         NULL, 0, NULL, NULL, 0) }
  11747.  
  11748. //===========================================================================
  11749. const
  11750.   KSPROPSETID_Connection : TGUID = '{1D58C920-AC9B-11CF-A5D6-28DB04C10000}';
  11751. type
  11752.   TKSPROPERTY_CONNECTION = (
  11753.     KSPROPERTY_CONNECTION_STATE,
  11754.     KSPROPERTY_CONNECTION_PRIORITY,
  11755.     KSPROPERTY_CONNECTION_DATAFORMAT,
  11756.     KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
  11757.     KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
  11758.     KSPROPERTY_CONNECTION_ACQUIREORDERING,
  11759.     KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
  11760.     KSPROPERTY_CONNECTION_STARTAT
  11761.   );
  11762.  
  11763. {#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
  11764.     DEFINE_KSPROPERTY_ITEM(\
  11765.         KSPROPERTY_CONNECTION_STATE,\
  11766.         (GetHandler),\
  11767.         sizeof(KSPROPERTY),\
  11768.         sizeof(KSSTATE),\
  11769.         (SetHandler),\
  11770.         NULL, 0, NULL, NULL, 0)
  11771.  
  11772. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
  11773.     DEFINE_KSPROPERTY_ITEM(\
  11774.         KSPROPERTY_CONNECTION_PRIORITY,\
  11775.         (GetHandler),\
  11776.         sizeof(KSPROPERTY),\
  11777.         sizeof(KSPRIORITY),\
  11778.         (SetHandler),\
  11779.         NULL, 0, NULL, NULL, 0)
  11780.  
  11781. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
  11782.     DEFINE_KSPROPERTY_ITEM(\
  11783.         KSPROPERTY_CONNECTION_DATAFORMAT,\
  11784.         (GetHandler),\
  11785.         sizeof(KSPROPERTY),\
  11786.         0,\
  11787.         (SetHandler),\
  11788.         NULL, 0, NULL, NULL, 0)
  11789.  
  11790. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
  11791.     DEFINE_KSPROPERTY_ITEM(\
  11792.         KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
  11793.         (Handler),\
  11794.         sizeof(KSPROPERTY),\
  11795.         sizeof(KSALLOCATOR_FRAMING),\
  11796.         NULL, NULL, 0, NULL, NULL, 0)
  11797.  
  11798. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
  11799.     DEFINE_KSPROPERTY_ITEM(\
  11800.         KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
  11801.         (Handler),\
  11802.         sizeof(KSPROPERTY),\
  11803.         sizeof(KSALLOCATOR_FRAMING_EX),\
  11804.         NULL, NULL, 0, NULL, NULL, 0)
  11805.  
  11806. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
  11807.     DEFINE_KSPROPERTY_ITEM(\
  11808.         KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
  11809.         NULL,\
  11810.         sizeof(KSPROPERTY),\
  11811.         sizeof(KSDATAFORMAT),\
  11812.         (Handler),\
  11813.         NULL, 0, NULL, NULL, 0)
  11814.  
  11815. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
  11816.     DEFINE_KSPROPERTY_ITEM(\
  11817.         KSPROPERTY_CONNECTION_ACQUIREORDERING,\
  11818.         (Handler),\
  11819.         sizeof(KSPROPERTY),\
  11820.         sizeof(int),\
  11821.         NULL, NULL, 0, NULL, NULL, 0)
  11822.  
  11823. #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
  11824.     DEFINE_KSPROPERTY_ITEM(\
  11825.         KSPROPERTY_CONNECTION_STARTAT,\
  11826.         NULL,\
  11827.         sizeof(KSPROPERTY),\
  11828.         sizeof(KSRELATIVEEVENT),\
  11829.         (Handler),\
  11830.         NULL, 0, NULL, NULL, 0)}
  11831.  
  11832. //===========================================================================
  11833. //
  11834. // pins flags
  11835. //
  11836. const
  11837.   KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER  = $00000001;
  11838.   KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY     = $00000002;
  11839.   KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY   = $00000004;
  11840.   KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE     = $00000008;
  11841.   KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY  = $80000000;
  11842.  
  11843.   KSALLOCATOR_OPTIONF_COMPATIBLE             = $00000001;
  11844.   KSALLOCATOR_OPTIONF_SYSTEM_MEMORY          = $00000002;
  11845.   KSALLOCATOR_OPTIONF_VALID                  = $00000003;
  11846. //
  11847. // pins extended framing flags
  11848. //
  11849.   KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT      = $00000010;
  11850.   KSALLOCATOR_FLAG_DEVICE_SPECIFIC           = $00000020;
  11851.   KSALLOCATOR_FLAG_CAN_ALLOCATE              = $00000040;
  11852.   KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO = $00000080;
  11853. //
  11854. // allocator pipes flags
  11855. //
  11856. // there is at least one data modification in a pipe
  11857.   KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY        = $00000100;
  11858.   KSALLOCATOR_FLAG_MULTIPLE_OUTPUT           = $00000200;
  11859.   KSALLOCATOR_FLAG_CYCLE                     = $00000400;
  11860.   KSALLOCATOR_FLAG_ALLOCATOR_EXISTS          = $00000800;
  11861. // there is no framing dependency between neighbouring pipes.
  11862.   KSALLOCATOR_FLAG_INDEPENDENT_RANGES        = $00001000;
  11863.   KSALLOCATOR_FLAG_ATTENTION_STEPPING        = $00002000;
  11864.  
  11865.  
  11866. //
  11867. // old Framing structure
  11868. //
  11869. type
  11870.   PKSALLOCATOR_FRAMING = ^TKSALLOCATOR_FRAMING;
  11871.   TKSALLOCATOR_FRAMING = record
  11872.   case integer of
  11873.   0: (
  11874.     OptionsFlags : ULONG);       // allocator options (create)
  11875.   1: (
  11876.     RequirementsFlags : ULONG;   // allocation requirements (query)
  11877.     PoolType      : ULONG;
  11878.     Frames        : ULONG; // total number of allowable outstanding frames
  11879.     FrameSize     : ULONG; // total size of frame
  11880.     FileAlignment : ULONG;
  11881.     Reserved      : ULONG);
  11882.   end;
  11883.  
  11884. //
  11885. // new Framing structure, eventually will replace KSALLOCATOR_FRAMING.
  11886. //
  11887.   PKS_FRAMING_RANGE = ^TKS_FRAMING_RANGE;
  11888.   TKS_FRAMING_RANGE = record
  11889.     MinFrameSize : ULONG;
  11890.     MaxFrameSize : ULONG;
  11891.     Stepping     : ULONG;
  11892.   end;
  11893.  
  11894.   PKS_FRAMING_RANGE_WEIGHTED = ^TKS_FRAMING_RANGE_WEIGHTED;
  11895.   TKS_FRAMING_RANGE_WEIGHTED = record
  11896.     Range            : TKS_FRAMING_RANGE;
  11897.     InPlaceWeight    : ULONG;
  11898.     NotInPlaceWeight : ULONG;
  11899.   end;
  11900.  
  11901.   PKS_COMPRESSION = ^TKS_COMPRESSION;
  11902.   TKS_COMPRESSION = record
  11903.     RatioNumerator      : ULONG;      // compression/expansion ratio
  11904.     RatioDenominator    : ULONG;
  11905.     RatioConstantMargin : ULONG;
  11906.   end;
  11907.  
  11908. //
  11909. // Memory Types and Buses are repeated in each entry.
  11910. // Easiest to use but takes a little more memory than the varsize layout Pin\Memories\Buses\Ranges.
  11911. //
  11912.   PKS_FRAMING_ITEM = ^TKS_FRAMING_ITEM;
  11913.   TKS_FRAMING_ITEM = record
  11914.     MemoryType       : TGUID;
  11915.     BusType          : TGUID;
  11916.     MemoryFlags      : ULONG;
  11917.     BusFlags         : ULONG;
  11918.     Flags            : ULONG;
  11919.     Frames           : ULONG; // total number of allowable outstanding frames
  11920.     FileAlignment    : ULONG;
  11921.     MemoryTypeWeight : ULONG; // this memory type Weight pin-wide
  11922.     PhysicalRange    : TKS_FRAMING_RANGE;
  11923.     FramingRange     : TKS_FRAMING_RANGE_WEIGHTED;
  11924.   end;
  11925.  
  11926.   PKSALLOCATOR_FRAMING_EX = ^TKSALLOCATOR_FRAMING_EX;
  11927.   TKSALLOCATOR_FRAMING_EX = record
  11928.     CountItems        : ULONG;         // count of FramingItem-s below.
  11929.     PinFlags          : ULONG;
  11930.     OutputCompression : TKS_COMPRESSION;
  11931.     PinWeight         : ULONG;          // this pin framing's Weight graph-wide
  11932.     FramingItem       : array[0..0] of TKS_FRAMING_ITEM;
  11933.   end;
  11934.  
  11935. //
  11936. // define memory type GUIDs
  11937. //
  11938. const
  11939.   KSMEMORY_TYPE_WILDCARD        : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11940.   KSMEMORY_TYPE_DONT_CARE       : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11941.   KS_TYPE_DONT_CARE             : TGUID = '{00000000-0000-0000-0000-000000000000}';
  11942.  
  11943.   KSMEMORY_TYPE_SYSTEM          : TGUID = '{091bb638-603f-11d1-b067-00a0c9062802}';
  11944.   KSMEMORY_TYPE_USER            : TGUID = '{8cb0fc28-7893-11d1-b069-00a0c9062802}';
  11945.   KSMEMORY_TYPE_KERNEL_PAGED    : TGUID = '{d833f8f8-7894-11d1-b069-00a0c9062802}';
  11946.   KSMEMORY_TYPE_KERNEL_NONPAGED : TGUID = '{4a6d5fc4-7895-11d1-b069-00a0c9062802}';
  11947.  
  11948. // old KS clients did not specify the device memory type
  11949.   KSMEMORY_TYPE_DEVICE_UNKNOWN  : TGUID = '{091bb639-603f-11d1-b067-00a0c9062802}';
  11950.  
  11951. //
  11952. // Helper framing macros.
  11953. //
  11954. {#define DECLARE_SIMPLE_FRAMING_EX(FramingExName, MemoryType, Flags, Frames, Alignment, MinFrameSize, MaxFrameSize) \
  11955.     const KSALLOCATOR_FRAMING_EX FramingExName = \
  11956.     {\
  11957.         1, \
  11958.         0, \
  11959.         {\
  11960.             1, \
  11961.             1, \
  11962.             0 \
  11963.         }//, \
  11964. //        0, \
  11965.         {\
  11966.             {\
  11967.                 MemoryType, \
  11968.                 STATIC_KS_TYPE_DONT_CARE, \
  11969.                 0, \
  11970.                 0, \
  11971.                 Flags, \
  11972.                 Frames, \
  11973.                 Alignment, \
  11974.                 0, \
  11975.                 {\
  11976.                     0, \
  11977.                     (ULONG)-1, \
  11978.                     1 \
  11979.                 }//, \
  11980.                 {\
  11981.                     {\
  11982.                         MinFrameSize, \
  11983.                         MaxFrameSize, \
  11984.                         1 \
  11985.                     }//, \
  11986.  //                   0, \
  11987.  //                   0  \
  11988.  //               }\
  11989.  //           }\
  11990.  //       }\
  11991.  //   }
  11992.  
  11993. {#define SetDefaultKsCompression(KsCompressionPointer) \
  11994. {\
  11995.     KsCompressionPointer->RatioNumerator = 1;\
  11996.     KsCompressionPointer->RatioDenominator = 1;\
  11997.     KsCompressionPointer->RatioConstantMargin = 0;\
  11998. }
  11999.  
  12000. {#define SetDontCareKsFramingRange(KsFramingRangePointer) \
  12001. {\
  12002.     KsFramingRangePointer->MinFrameSize = 0;\
  12003.     KsFramingRangePointer->MaxFrameSize = (ULONG) -1;\
  12004.     KsFramingRangePointer->Stepping = 1;\
  12005. }
  12006.  
  12007. {#define SetKsFramingRange(KsFramingRangePointer, P_MinFrameSize, P_MaxFrameSize) \
  12008. {\
  12009.     KsFramingRangePointer->MinFrameSize = P_MinFrameSize;\
  12010.     KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;\
  12011.     KsFramingRangePointer->Stepping = 1;\
  12012. }
  12013.  
  12014. {#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer, P_MinFrameSize, P_MaxFrameSize) \
  12015. {\
  12016.     KS_FRAMING_RANGE *KsFramingRange = &KsFramingRangeWeightedPointer->Range;\
  12017.     SetKsFramingRange(KsFramingRange, P_MinFrameSize, P_MaxFrameSize);\
  12018.     KsFramingRangeWeightedPointer->InPlaceWeight = 0;\
  12019.     KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;\
  12020. }
  12021.  
  12022. {#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer, P_MemoryType, P_Flags, P_Frames, P_Alignment, P_MinFrameSize, P_MaxFrameSize) \
  12023. {\
  12024.     KS_COMPRESSION *KsCompression = &FramingExPointer->OutputCompression;\
  12025.     KS_FRAMING_RANGE *KsFramingRange = &FramingExPointer->FramingItem[0].PhysicalRange;\
  12026.     KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = &FramingExPointer->FramingItem[0].FramingRange;\
  12027.     FramingExPointer->CountItems = 1;\
  12028.     FramingExPointer->PinFlags = 0;\
  12029.     SetDefaultKsCompression(KsCompression);\
  12030.     FramingExPointer->PinWeight = 0;\
  12031.     FramingExPointer->FramingItem[0].MemoryType = P_MemoryType;\
  12032.     FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;\
  12033.     FramingExPointer->FramingItem[0].MemoryFlags = 0;\
  12034.     FramingExPointer->FramingItem[0].BusFlags = 0;\
  12035.     FramingExPointer->FramingItem[0].Flags = P_Flags;\
  12036.     FramingExPointer->FramingItem[0].Frames = P_Frames;\
  12037.     FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;\
  12038.     FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;\
  12039.     SetDontCareKsFramingRange(KsFramingRange);\
  12040.     SetKsFramingRangeWeighted(KsFramingRangeWeighted, P_MinFrameSize, P_MaxFrameSize);\
  12041. }
  12042.  
  12043.   KSEVENTSETID_StreamAllocator : TGUID = '{75d95571-073c-11d0-a161-0020afd156e4}';
  12044.  
  12045. type
  12046.   TKSEVENT_STREAMALLOCATOR = (
  12047.     KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
  12048.     KSEVENT_STREAMALLOCATOR_FREEFRAME
  12049.   );
  12050.  
  12051. const
  12052.   KSMETHODSETID_StreamAllocator : TGUID = '{cf6e4341-ec87-11cf-a130-0020afd156e4}';
  12053.  
  12054. type
  12055.   TKSMETHOD_STREAMALLOCATOR = (
  12056.     KSMETHOD_STREAMALLOCATOR_ALLOC,
  12057.     KSMETHOD_STREAMALLOCATOR_FREE
  12058.   );
  12059.  
  12060. {#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)\
  12061.     DEFINE_KSMETHOD_ITEM(\
  12062.         KSMETHOD_STREAMALLOCATOR_ALLOC,\
  12063.         KSMETHOD_TYPE_WRITE,\
  12064.         (Handler),\
  12065.         sizeof(KSMETHOD),\
  12066.         sizeof(PVOID),\
  12067.         NULL)
  12068.  
  12069. #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)\
  12070.     DEFINE_KSMETHOD_ITEM(\
  12071.         KSMETHOD_STREAMALLOCATOR_FREE,\
  12072.         KSMETHOD_TYPE_READ,\
  12073.         (Handler),\
  12074.         sizeof(KSMETHOD),\
  12075.         sizeof(PVOID),\
  12076.         NULL)
  12077.  
  12078. #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet, MethodAlloc, MethodFree)\
  12079. DEFINE_KSMETHOD_TABLE(AllocatorSet) {\
  12080.     DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),\
  12081.     DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)\
  12082. }
  12083. const
  12084.   KSPROPSETID_StreamAllocator : TGUID = '{cf6e4342-ec87-11cf-a130-0020afd156e4}';
  12085.  
  12086. type
  12087.   PKSSTREAMALLOCATOR_STATUS = ^TKSSTREAMALLOCATOR_STATUS;
  12088.   TKSSTREAMALLOCATOR_STATUS = record
  12089.     Framing         : TKSALLOCATOR_FRAMING;
  12090.     AllocatedFrames : ULONG;
  12091.     Reserved        : ULONG;
  12092.   end;
  12093.  
  12094.   PKSSTREAMALLOCATOR_STATUS_EX = ^TKSSTREAMALLOCATOR_STATUS_EX;
  12095.   TKSSTREAMALLOCATOR_STATUS_EX = record
  12096.     Framing         : TKSALLOCATOR_FRAMING_EX;
  12097.     AllocatedFrames : ULONG;
  12098.     Reserved        : ULONG;
  12099.   end;
  12100.  
  12101. const
  12102.   KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT       = $00000001;
  12103.   KSSTREAM_HEADER_OPTIONSF_PREROLL           = $00000002;
  12104.   KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY = $00000004;
  12105.   KSSTREAM_HEADER_OPTIONSF_TYPECHANGED       = $00000008;
  12106.   KSSTREAM_HEADER_OPTIONSF_TIMEVALID         = $00000010;
  12107.   KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY = $00000040;
  12108.   KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE      = $00000080;
  12109.   KSSTREAM_HEADER_OPTIONSF_DURATIONVALID     = $00000100;
  12110.   KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM       = $00000200;
  12111.   KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA        = $80000000;
  12112.  
  12113. type
  12114.   PKSTIME = ^TKSTIME;
  12115.   TKSTIME = record
  12116.     Time        : int64;
  12117.     Numerator   : ULONG;
  12118.     Denominator : ULONG;
  12119.   end;
  12120.  
  12121.   PKSSTREAM_HEADER = ^TKSSTREAM_HEADER;
  12122.   TKSSTREAM_HEADER = record
  12123.     Size              : ULONG;
  12124.     TypeSpecificFlags : ULONG;
  12125.     PresentationTime  : TKSTIME;
  12126.     Duration          : int64;
  12127.     FrameExtent       : ULONG;
  12128.     DataUsed          : ULONG;
  12129.     Data              : Pointer;
  12130.     OptionsFlags      : ULONG;
  12131. //#if _WIN64
  12132. //  Reserved          : ULONG;
  12133. //#endif
  12134.   end;
  12135.  
  12136. const
  12137.   KSPROPSETID_StreamInterface : TGUID = '{1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a}';
  12138. type
  12139.   TKSPROPERTY_STREAMINTERFACE = (
  12140.     KSPROPERTY_STREAMINTERFACE_HEADERSIZE
  12141.   );
  12142.  
  12143. {#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( GetHandler )\
  12144.     DEFINE_KSPROPERTY_ITEM(\
  12145.         KSPROPERTY_STREAMINTERFACE_HEADERSIZE,\
  12146.         (GetHandler),\
  12147.         sizeof(KSPROPERTY),\
  12148.         sizeof(ULONG),\
  12149.         NULL, NULL, 0, NULL, NULL, 0)
  12150.  
  12151. #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,\
  12152.     HeaderSizeHandler)\
  12153. DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {\
  12154.     DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( HeaderSizeHandler )\
  12155. }
  12156. const
  12157.   KSPROPSETID_Stream : TGUId = '{65aaba60-98ae-11cf-a10d-0020afd156e4}';
  12158.  
  12159. type
  12160.   TKSPROPERTY_STREAM = (
  12161.     KSPROPERTY_STREAM_ALLOCATOR,
  12162.     KSPROPERTY_STREAM_QUALITY,
  12163.     KSPROPERTY_STREAM_DEGRADATION,
  12164.     KSPROPERTY_STREAM_MASTERCLOCK,
  12165.     KSPROPERTY_STREAM_TIMEFORMAT,
  12166.     KSPROPERTY_STREAM_PRESENTATIONTIME,
  12167.     KSPROPERTY_STREAM_PRESENTATIONEXTENT,
  12168.     KSPROPERTY_STREAM_FRAMETIME,
  12169.     KSPROPERTY_STREAM_RATECAPABILITY,
  12170.     KSPROPERTY_STREAM_RATE,
  12171.     KSPROPERTY_STREAM_PIPE_ID
  12172.   );
  12173.  
  12174. {#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
  12175.     DEFINE_KSPROPERTY_ITEM(\
  12176.         KSPROPERTY_STREAM_ALLOCATOR,\
  12177.         (GetHandler),\
  12178.         sizeof(KSPROPERTY),\
  12179.         sizeof(HANDLE),\
  12180.         (SetHandler),\
  12181.         NULL, 0, NULL, NULL, 0)
  12182.  
  12183. #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
  12184.     DEFINE_KSPROPERTY_ITEM(\
  12185.         KSPROPERTY_STREAM_QUALITY,\
  12186.         (Handler),\
  12187.         sizeof(KSPROPERTY),\
  12188.         sizeof(KSQUALITY_MANAGER),\
  12189.         NULL, NULL, 0, NULL, NULL, 0)
  12190.  
  12191. #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
  12192.     DEFINE_KSPROPERTY_ITEM(\
  12193.         KSPROPERTY_STREAM_DEGRADATION,\
  12194.         (GetHandler),\
  12195.         sizeof(KSPROPERTY),\
  12196.         0,\
  12197.         (SetHandler),\
  12198.         NULL, 0, NULL, NULL, 0)
  12199.  
  12200. #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
  12201.     DEFINE_KSPROPERTY_ITEM(\
  12202.         KSPROPERTY_STREAM_MASTERCLOCK,\
  12203.         (GetHandler),\
  12204.         sizeof(KSPROPERTY),\
  12205.         sizeof(HANDLE),\
  12206.         (SetHandler),\
  12207.         NULL, 0, NULL, NULL, 0)
  12208.  
  12209. #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
  12210.     DEFINE_KSPROPERTY_ITEM(\
  12211.         KSPROPERTY_STREAM_TIMEFORMAT,\
  12212.         (Handler),\
  12213.         sizeof(KSPROPERTY),\
  12214.         sizeof(GUID),\
  12215.         NULL, NULL, 0, NULL, NULL, 0)
  12216.  
  12217. #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
  12218.     DEFINE_KSPROPERTY_ITEM(\
  12219.         KSPROPERTY_STREAM_PRESENTATIONTIME,\
  12220.         (GetHandler),\
  12221.         sizeof(KSPROPERTY),\
  12222.         sizeof(KSTIME),\
  12223.         (SetHandler),\
  12224.         NULL, 0, NULL, NULL, 0)
  12225.  
  12226. #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
  12227.     DEFINE_KSPROPERTY_ITEM(\
  12228.         KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
  12229.         (Handler),\
  12230.         sizeof(KSPROPERTY),\
  12231.         sizeof(LONGLONG),\
  12232.         NULL, NULL, 0, NULL, NULL, 0)
  12233.  
  12234. #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
  12235.     DEFINE_KSPROPERTY_ITEM(\
  12236.         KSPROPERTY_STREAM_FRAMETIME,\
  12237.         (Handler),\
  12238.         sizeof(KSPROPERTY),\
  12239.         sizeof(KSFRAMETIME),\
  12240.         NULL, NULL, 0, NULL, NULL, 0)
  12241.  
  12242. #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
  12243.     DEFINE_KSPROPERTY_ITEM(\
  12244.         KSPROPERTY_STREAM_RATECAPABILITY,\
  12245.         (Handler),\
  12246.         sizeof(KSRATE_CAPABILITY),\
  12247.         sizeof(KSRATE),\
  12248.         NULL, NULL, 0, NULL, NULL, 0)
  12249.  
  12250. #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
  12251.     DEFINE_KSPROPERTY_ITEM(\
  12252.         KSPROPERTY_STREAM_RATE,\
  12253.         (GetHandler),\
  12254.         sizeof(KSPROPERTY),\
  12255.         sizeof(KSRATE),\
  12256.         (SetHandler),\
  12257.         NULL, 0, NULL, NULL, 0)
  12258.  
  12259. #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
  12260.     DEFINE_KSPROPERTY_ITEM(\
  12261.         KSPROPERTY_STREAM_PIPE_ID,\
  12262.         (GetHandler),\
  12263.         sizeof(KSPROPERTY),\
  12264.         sizeof(HANDLE),\
  12265.         (SetHandler),\
  12266.         NULL, 0, NULL, NULL, 0)  }
  12267.  
  12268.   PKSQUALITY_MANAGER = ^TKSQUALITY_MANAGER;
  12269.   TKSQUALITY_MANAGER = record
  12270.     QualityManager : THANDLE;
  12271.     Context        : Pointer;
  12272.   end;
  12273.  
  12274.   PKSFRAMETIME = ^TKSFRAMETIME;
  12275.   TKSFRAMETIME = record
  12276.     Duration   : int64;
  12277.     FrameFlags : ULONG;
  12278.     Reserved   : ULONG;
  12279.   end;
  12280.  
  12281. const
  12282.   KSFRAMETIME_VARIABLESIZE = $00000001;
  12283.  
  12284. type
  12285.   PKSRATE = ^TKSRATE;
  12286.   TKSRATE = record
  12287.     PresentationStart : int64;
  12288.     Duration          : int64;
  12289.     Interface_        : TKSPIN_INTERFACE;
  12290.     Rate              : Longint;
  12291.     Flags             : ULONG;
  12292.   end;
  12293.  
  12294. const
  12295.   KSRATE_NOPRESENTATIONSTART    = $00000001;
  12296.   KSRATE_NOPRESENTATIONDURATION = $00000002;
  12297.  
  12298. type
  12299.   PKSRATE_CAPABILITY = ^TKSRATE_CAPABILITY;
  12300.   TKSRATE_CAPABILITY = record
  12301.     Property_ : TKSPROPERTY;
  12302.     Rate      : TKSRATE;
  12303.   end;
  12304.  
  12305. const
  12306.   KSPROPSETID_Clock : TGUID = '{DF12A4C0-AC17-11CF-A5D6-28DB04C10000}';
  12307.  
  12308. //
  12309. // Performs a x*y/z operation on 64 bit quantities by splitting the operation. The equation
  12310. // is simplified with respect to adding in the remainder for the upper 32 bits.
  12311. //
  12312. // (xh * 10000000 / Frequency) * 2^32 + ((((xh * 10000000) % Frequency) * 2^32 + (xl * 10000000)) / Frequency)
  12313. //
  12314.   NANOSECONDS = 10000000;
  12315. {#define KSCONVERT_PERFORMANCE_TIME(Frequency, PerformanceTime) \
  12316.     ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS / (Frequency)) << 32) + \
  12317.     ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS) % (Frequency)) << 32) + \
  12318.     ((ULONGLONG)(PerformanceTime).LowPart * NANOSECONDS)) / (Frequency)))}
  12319.  
  12320. type
  12321.   PKSCLOCK_CREATE = ^TKSCLOCK_CREATE;
  12322.   TKSCLOCK_CREATE = record
  12323.     CreateFlags : ULONG;
  12324.   end;
  12325.  
  12326.   PKSCORRELATED_TIME = ^TKSCORRELATED_TIME;
  12327.   TKSCORRELATED_TIME = record
  12328.     Time       : int64;
  12329.     SystemTime : int64;
  12330.   end;
  12331.  
  12332.   PKSRESOLUTION = ^TKSRESOLUTION;
  12333.   TKSRESOLUTION = record
  12334.     Granularity : int64;
  12335.     Error       : int64;
  12336.   end;
  12337.  
  12338.   TKSPROPERTY_CLOCK = (
  12339.     KSPROPERTY_CLOCK_TIME,
  12340.     KSPROPERTY_CLOCK_PHYSICALTIME,
  12341.     KSPROPERTY_CLOCK_CORRELATEDTIME,
  12342.     KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
  12343.     KSPROPERTY_CLOCK_RESOLUTION,
  12344.     KSPROPERTY_CLOCK_STATE
  12345.   );
  12346.  
  12347. const
  12348.   KSEVENTSETID_Clock : TGUID = '{364D8E20-62C7-11CF-A5D6-28DB04C10000}';
  12349.  
  12350. type
  12351.   TKSEVENT_CLOCK_POSITION = (
  12352.     KSEVENT_CLOCK_INTERVAL_MARK,
  12353.     KSEVENT_CLOCK_POSITION_MARK
  12354.   );
  12355.  
  12356. const
  12357.   KSEVENTSETID_Connection : TGUID = '{7f4bcbe0-9ea5-11cf-a5d6-28db04c10000}';
  12358.  
  12359. type
  12360.   TKSEVENT_CONNECTION = (
  12361.     KSEVENT_CONNECTION_POSITIONUPDATE,
  12362.     KSEVENT_CONNECTION_DATADISCONTINUITY,
  12363.     KSEVENT_CONNECTION_TIMEDISCONTINUITY,
  12364.     KSEVENT_CONNECTION_PRIORITY,
  12365.     KSEVENT_CONNECTION_ENDOFSTREAM
  12366.   );
  12367.  
  12368.   PKSQUALITY = ^TKSQUALITY;
  12369.   TKSQUALITY = record
  12370.     Context    : Pointer;
  12371.     Proportion : ULONG;
  12372.     DeltaTime  : int64;
  12373.   end;
  12374.  
  12375.   PKSERROR = ^TKSERROR;
  12376.   TKSERROR = record
  12377.     Context : Pointer;
  12378.     Status  : ULONG;
  12379.   end;
  12380.  
  12381.   PKSDEGRADE = ^TKSDEGRADE;
  12382.   TKSDEGRADE = TKSIDENTIFIER;
  12383.  
  12384. const
  12385.   KSDEGRADESETID_Standard : TGUID = '{9F564180-704C-11D0-A5D6-28DB04C10000}';
  12386.  
  12387. type
  12388.   TKSDEGRADE_STANDARD = (
  12389.     KSDEGRADE_STANDARD_SAMPLE,
  12390.     KSDEGRADE_STANDARD_QUALITY,
  12391.     KSDEGRADE_STANDARD_COMPUTATION,
  12392.     KSDEGRADE_STANDARD_SKIP
  12393.   );
  12394.  
  12395. //#if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  12396. //#include <pshpack1.h>
  12397. //#endif
  12398.  
  12399.   PKSPROPERTY_SERIALHDR = ^TKSPROPERTY_SERIALHDR;
  12400.   TKSPROPERTY_SERIALHDR = record
  12401.     PropertySet : TGUID;
  12402.     Count       : ULONG;
  12403.   end;
  12404.  
  12405. //#if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  12406. //#include <poppack.h>
  12407. //#endif
  12408.  
  12409.   PKSPROPERTY_SERIAL = ^TKSPROPERTY_SERIAL;
  12410.   TKSPROPERTY_SERIAL = record
  12411.     PropTypeSet    : TKSIDENTIFIER;
  12412.     Id             : ULONG;
  12413.     PropertyLength : ULONG;
  12414.   end;
  12415.  
  12416. //===========================================================================
  12417. //
  12418. // exported prototypes
  12419.  
  12420.  
  12421. //  From WinNT.h (H.GOURVEST)
  12422. //  Define the access mask as a longword sized structure divided up as
  12423. //  follows:
  12424. //
  12425. //       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  12426. //       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  12427. //      +---------------+---------------+-------------------------------+
  12428. //      |G|G|G|G|Res'd|A| StandardRights|         SpecificRights        |
  12429. //      |R|W|E|A|     |S|               |                               |
  12430. //      +-+-------------+---------------+-------------------------------+
  12431. //
  12432. //      typedef struct _ACCESS_MASK {
  12433. //          WORD   SpecificRights;
  12434. //          BYTE  StandardRights;
  12435. //          BYTE  AccessSystemAcl : 1;
  12436. //          BYTE  Reserved : 3;
  12437. //          BYTE  GenericAll : 1;
  12438. //          BYTE  GenericExecute : 1;
  12439. //          BYTE  GenericWrite : 1;
  12440. //          BYTE  GenericRead : 1;
  12441. //      } ACCESS_MASK;
  12442. //      typedef ACCESS_MASK *PACCESS_MASK;
  12443. //
  12444. //  but to make life simple for programmer's we'll allow them to specify
  12445. //  a desired access mask by simply OR'ing together mulitple single rights
  12446. //  and treat an access mask as a DWORD.  For example
  12447. //
  12448. //      DesiredAccess = DELETE | READ_CONTROL
  12449. //
  12450. //  So we'll declare ACCESS_MASK as DWORD
  12451. //
  12452.  
  12453.   function KsCreateAllocator(ConnectionHandle: THandle;
  12454.              AllocatorFraming: PKSALLOCATOR_FRAMING;
  12455.              out AllocatorHandle: PHANDLE): DWORD; external 'KSUSER.DLL';
  12456.  
  12457.   function KsCreateClock(ConnectionHandle: THANDLE;
  12458.              ClockCreate: PKSCLOCK_CREATE;
  12459.              out ClockHandle: PHANDLE): DWORD; external 'KSUSER.DLL';
  12460.  
  12461.   function KsCreatePin(FilterHandle: THANDLE;
  12462.              Connect: PKSPIN_CONNECT;
  12463.              DesiredAccess: ACCESS_MASK ;
  12464.              out ConnectionHandle: PHANDLE): DWORD; external 'KSUSER.DLL';
  12465.  
  12466.   function KsCreateTopologyNode(ParentHandle: THANDLE;
  12467.              NodeCreate: PKSNODE_CREATE;
  12468.              DesiredAccess: ACCESS_MASK;
  12469.              out NodeHandle: PHANDLE): DWORD; external 'KSUSER.DLL';
  12470.  
  12471. {===============================================================================
  12472. *
  12473. * Copyright (C) Microsoft Corporation, 1996 - 1999
  12474. * Module Name:   ksproxy.h
  12475. * Abstract   :   Interface definitions for WDM-CSA proxy filters.
  12476. *
  12477. *==============================================================================}
  12478.  
  12479. const
  12480.   IID_IKsObject             : TGUID = (D1:$423c13a2;D2:$2070;D3:$11d0;D4:($9e,$f7,$00,$aa,$00,$a2,$16,$a1));
  12481.   IID_IKsPinEx              : TGUID = (D1:$7bb38260;D2:$d19c;D3:$11d2;D4:($b3,$8a,$00,$a0,$c9,$5e,$c2,$2e));
  12482. //  IID_IKsPin                : TGUID = (D1:$b61178d1;D2:$a2d9;D3:$11cf;D4:($9e,$53,$00,$aa,$00,$a2,$16,$a1));
  12483.   IID_IKsPinPipe            : TGUID = (D1:$e539cd90;D2:$a8b4;D3:$11d1;D4:($81,$89,$00,$a0,$c9,$06,$28,$02));
  12484. //  IID_IKsDataTypeHandler    : TGUID = (D1:$5ffbaa02;D2:$49a3;D3:$11d0;D4:($9f,$36,$00,$aa,$00,$a2,$16,$a1));
  12485.   IID_IKsDataTypeCompletion : TGUID = (D1:$827D1A0E;D2:$0F73;D3:$11D2;D4:($B2,$7A,$00,$A0,$C9,$22,$31,$96));
  12486. //  IID_IKsInterfaceHandler   : TGUID = (D1:$D3ABC7E0;D2:$9A61;D3:$11D0;D4:($A4,$0D,$00,$A0,$C9,$22,$31,$96));
  12487.   IID_IKsClockPropertySet   : TGUID = (D1:$5C5CBD84;D2:$E755;D3:$11D0;D4:($AC,$18,$00,$A0,$C9,$22,$31,$96));
  12488.   IID_IKsAllocator          : TGUID = (D1:$8da64899;D2:$c0d9;D3:$11d0;D4:($84,$13,$00,$00,$f8,$22,$fe,$8a));
  12489.   IID_IKsAllocatorEx        : TGUID = (D1:$091bb63a;D2:$603f;D3:$11d1;D4:($b0,$67,$00,$a0,$c9,$06,$28,$02));
  12490.  
  12491.   IID_IKsTopology           : TGUID = (D1:$28F54683;D2:$06FD;D3:$11D2;D4:($B2,$7A,$00,$A0,$C9,$22,$31,$96));
  12492.   IID_IKsAggregateControl   : TGUID = (D1:$7F40EAC0;D2:$3947;D3:$11D2;D4:($87,$4E,$00,$A0,$C9,$22,$31,$96));
  12493.  
  12494.   CLSID_Proxy               : TGUID = (D1:$17CCA71B;D2:$ECD7;D3:$11D0;D4:($B9,$08,$00,$A0,$C9,$22,$31,$96));
  12495.  
  12496.   IID_IKsQualityForwarder   : TGUID = '{97EBAACB-95BD-11D0-A3EA-00A0C9223196}';
  12497.  
  12498. type
  12499.   TKSALLOCATORMODE = (
  12500.     KsAllocatorMode_User,
  12501.     KsAllocatorMode_Kernel
  12502.   );
  12503.  
  12504.   PFRAMING_PROP = ^TFRAMING_PROP;
  12505.   TFRAMING_PROP = (
  12506.     FramingProp_Uninitialized,
  12507.     FramingProp_None,
  12508.     FramingProp_Old,
  12509.     FramingProp_Ex
  12510.   );
  12511.  
  12512.   TFRAMING_CACHE_OPS = (
  12513.     Framing_Cache_Update,     // request to bypass cache when read/write
  12514.     Framing_Cache_ReadLast,
  12515.     Framing_Cache_ReadOrig,
  12516.     Framing_Cache_Write
  12517.   );
  12518.  
  12519.   TOPTIMAL_WEIGHT_TOTALS = record
  12520.     MinTotalNominator : int64;
  12521.     MaxTotalNominator : int64;
  12522.     TotalDenominator  : int64;
  12523.   end;
  12524.  
  12525. //
  12526. // allocators strategy is defined by graph manager
  12527. //
  12528. const
  12529.   AllocatorStrategy_DontCare = 0;
  12530.  
  12531. //
  12532. // what to optimize
  12533. //
  12534.   AllocatorStrategy_MinimizeNumberOfFrames     = $00000001;
  12535.   AllocatorStrategy_MinimizeFrameSize          = $00000002;
  12536.   AllocatorStrategy_MinimizeNumberOfAllocators = $00000004;
  12537.   AllocatorStrategy_MaximizeSpeed              = $00000008;
  12538.  
  12539. //
  12540. // factors (flags) defining the Pipes properties
  12541. //
  12542.   PipeFactor_None               = 0;
  12543.   PipeFactor_UserModeUpstream   = $00000001;
  12544.   PipeFactor_UserModeDownstream = $00000002;
  12545.   PipeFactor_MemoryTypes        = $00000004;
  12546.   PipeFactor_Flags              = $00000008;
  12547.   PipeFactor_PhysicalRanges     = $00000010;
  12548.   PipeFactor_OptimalRanges      = $00000020;
  12549.   PipeFactor_FixedCompression   = $00000040;
  12550.   PipeFactor_UnknownCompression = $00000080;
  12551.   PipeFactor_Buffers            = $00000100;
  12552.   PipeFactor_Align              = $00000200;
  12553.  
  12554.   PipeFactor_PhysicalEnd        = $00000400;
  12555.   PipeFactor_LogicalEnd         = $00000800;
  12556.  
  12557. type
  12558.   TPIPE_STATE = (
  12559.     PipeState_DontCare,
  12560.     PipeState_RangeNotFixed,
  12561.     PipeState_RangeFixed,
  12562.     PipeState_CompressionUnknown,
  12563.     PipeState_Finalized
  12564.   );
  12565.  
  12566. //
  12567. // pipe dimensions relative to BeginPin.
  12568. //
  12569.   PPIPE_DIMENSIONS = ^TPIPE_DIMENSIONS;
  12570.   TPIPE_DIMENSIONS = record
  12571.     AllocatorPin    : TKS_COMPRESSION;
  12572.     MaxExpansionPin : TKS_COMPRESSION;
  12573.     EndPin          : TKS_COMPRESSION;
  12574.   end;
  12575.  
  12576.   PPIPE_ALLOCATOR_PLACE = ^TPIPE_ALLOCATOR_PLACE;
  12577.   TPIPE_ALLOCATOR_PLACE = (
  12578.     Pipe_Allocator_None,
  12579.     Pipe_Allocator_FirstPin,
  12580.     Pipe_Allocator_LastPin,
  12581.     Pipe_Allocator_MiddlePin
  12582.   );
  12583.  
  12584.   PKS_LogicalMemoryType = ^TKS_LogicalMemoryType;
  12585.   TKS_LogicalMemoryType = (
  12586.     KS_MemoryTypeDontCare,
  12587.     KS_MemoryTypeKernelPaged,
  12588.     KS_MemoryTypeKernelNonPaged,
  12589.     KS_MemoryTypeDeviceHostMapped,
  12590.     KS_MemoryTypeDeviceSpecific,
  12591.     KS_MemoryTypeUser,
  12592.     KS_MemoryTypeAnyHost
  12593.   );
  12594.  
  12595.   TPIPE_TERMINATION = record
  12596.     Flags          : ULONG;
  12597.     OutsideFactors : ULONG;
  12598.     Weigth         : ULONG;            // outside weight
  12599.     PhysicalRange  : TKS_FRAMING_RANGE;
  12600.     OptimalRange   : TKS_FRAMING_RANGE_WEIGHTED;
  12601.     Compression    : TKS_COMPRESSION;  // relative to the connected pin on a neighboring filter.
  12602.   end;
  12603.  
  12604.   IKsAllocatorEx = interface;
  12605.  
  12606. //
  12607. // extended allocator properties
  12608. //
  12609.   PALLOCATOR_PROPERTIES_EX =^TALLOCATOR_PROPERTIES_EX;
  12610.   TALLOCATOR_PROPERTIES_EX = record
  12611.     cBuffers          : longint;
  12612.     cbBuffer          : longint;
  12613.     cbAlign           : longint;
  12614.     cbPrefix          : longint;
  12615. // new part
  12616.     MemoryType        : TGUID;
  12617.     BusType           : TGUID;                 // one of the buses this pipe is using
  12618.     State             : TPIPE_STATE;
  12619.     Input             : TPIPE_TERMINATION;
  12620.     Output            : TPIPE_TERMINATION;
  12621.     Strategy          : ULONG;
  12622.     Flags             : ULONG;
  12623.     Weight            : ULONG;
  12624.     LogicalMemoryType : TKS_LogicalMemoryType;
  12625.     AllocatorPlace    : TPIPE_ALLOCATOR_PLACE;
  12626.     Dimensions        : TPIPE_DIMENSIONS;
  12627.     PhysicalRange     : TKS_FRAMING_RANGE;     // on allocator pin
  12628.     PrevSegment       : IKsAllocatorEx;        // doubly-linked list of KS allocators
  12629.     CountNextSegments : ULONG;                 // possible multiple dependent pipes
  12630.     NextSegments      : IKsAllocatorEx;
  12631.     InsideFactors     : ULONG;                 // existing factors (different from "don't care")
  12632.     NumberPins        : ULONG;
  12633.   end;
  12634.  
  12635.   IKsClockPropertySet = interface(IUnknown)
  12636.     ['{5C5CBD84-E755-11D0-AC18-00A0C9223196}']
  12637.     procedure KsGetTime(out Time: int64); stdcall;
  12638.     procedure KsSetTime(Time: int64); stdcall;
  12639.     procedure KsGetPhysicalTime(out Time: int64); stdcall;
  12640.     procedure KsSetPhysicalTime(Time: int64); stdcall;
  12641.     procedure KsGetCorrelatedTime(out CorrelatedTime: TKSCORRELATED_TIME); stdcall;
  12642.     procedure KsSetCorrelatedTime(CorrelatedTime: TKSCORRELATED_TIME); stdcall;
  12643.     procedure KsGetCorrelatedPhysicalTime(out CorrelatedTime: TKSCORRELATED_TIME); stdcall;
  12644.     procedure KsSetCorrelatedPhysicalTime(CorrelatedTime: TKSCORRELATED_TIME); stdcall;
  12645.     procedure KsGetResolution(out Resolution: TKSRESOLUTION); stdcall;
  12646.     procedure KsGetState(out State: TKSSTATE); stdcall;
  12647.   end;
  12648.  
  12649.   IKsAllocator = interface(IUnknown)
  12650.     ['{8da64899-c0d9-11d0-8413-0000f822fe8a}']
  12651.     function  KsGetAllocatorHandle: THANDLE; stdcall;
  12652.     function  KsGetAllocatorMode: TKSALLOCATORMODE; stdcall;
  12653.     procedure KsGetAllocatorStatus(AllocatorStatus: PKSSTREAMALLOCATOR_STATUS); stdcall;
  12654.     procedure KsSetAllocatorMode(Mode: TKSALLOCATORMODE); stdcall;
  12655.   end;
  12656.  
  12657.   IKsPin = interface;
  12658.  
  12659.   IKsAllocatorEx = interface(IKsAllocator)
  12660.     ['{091bb63a-603f-11d1-b067-00a0c9062802}']
  12661.     function  KsGetProperties: TALLOCATOR_PROPERTIES_EX; stdcall;
  12662.     procedure KsSetProperties(PROPERTIES: PALLOCATOR_PROPERTIES_EX); stdcall;
  12663.     procedure KsSetAllocatorHandle(AllocatorHandle: THANDLE); stdcall;
  12664.     function  KsCreateAllocatorAndGetHandle(KsPin: IKsPin): THANDLE; stdcall;
  12665.   end;
  12666.  
  12667.   TKSPEEKOPERATION = (
  12668.     KsPeekOperation_PeekOnly,
  12669.     KsPeekOperation_AddRef
  12670.   );
  12671.  
  12672.   PKSSTREAM_SEGMENT = ^TKSSTREAM_SEGMENT;
  12673.  
  12674.   IKsPin = interface(IUnknown)
  12675.     ['{b61178d1-a2d9-11cf-9e53-00aa00a216a1}']
  12676.     procedure KsQueryMediums(MediumList: PKSMULTIPLE_ITEM); stdcall;
  12677.     procedure KsQueryInterfaces(InterfaceList: PKSMULTIPLE_ITEM); stdcall;
  12678.     procedure KsCreateSinkPinHandle(Interface_: TKSPIN_INTERFACE; Medium: TKSPIN_MEDIUM); stdcall;
  12679.     procedure KsGetCurrentCommunication(Communication: PKSPIN_COMMUNICATION;
  12680.                 Interface_: PKSPIN_INTERFACE; Medium: PKSPIN_MEDIUM); stdcall;
  12681.     procedure KsPropagateAcquire; stdcall;
  12682.     procedure KsDeliver(Sample: IMediaSample; Flags: ULONG); stdcall;
  12683.     procedure KsMediaSamplesCompleted(StreamSegment: PKSSTREAM_SEGMENT); stdcall;
  12684.     function  KsPeekAllocator(Operation: TKSPEEKOPERATION): IMemAllocator; stdcall;
  12685.     procedure KsReceiveAllocator(MemAllocator: IMemAllocator); stdcall;
  12686.     procedure KsRenegotiateAllocator; stdcall;
  12687.     function  KsIncrementPendingIoCount: Longint; stdcall;
  12688.     function  KsDecrementPendingIoCount: Longint; stdcall;
  12689.     procedure KsQualityNotify(Proportion: ULONG; TimeDelta: TREFERENCE_TIME); stdcall;
  12690.   end;
  12691.  
  12692.   IKsPinEx = interface(IKsPin)
  12693.     ['{7bb38260-d19c-11d2-b38a-00a0c95ec22e}']
  12694.     procedure KsNotifyError(Sample: IMediaSample; hr: HRESULT);
  12695.   end;
  12696.  
  12697.   IKsPinPipe = interface(IUnknown)
  12698.     ['{e539cd90-a8b4-11d1-8189-00a0c9062802}']
  12699.     procedure KsGetPinFramingCache(FramingEx: PKSALLOCATOR_FRAMING_EX;
  12700.                 FramingProp: PFRAMING_PROP; Option: TFRAMING_CACHE_OPS); stdcall;
  12701.     procedure KsSetPinFramingCache(FramingEx: PKSALLOCATOR_FRAMING_EX;
  12702.                 FramingProp: PFRAMING_PROP; Option: TFRAMING_CACHE_OPS); stdcall;
  12703.     function KsGetConnectedPin: IPin; stdcall;
  12704.     function KsGetPipe(Operation: TKSPEEKOPERATION): IKsAllocatorEx; stdcall;
  12705.     procedure KsSetPipe(KsAllocator: IKsAllocatorEx); stdcall;
  12706.     function KsGetPipeAllocatorFlag: ULONG; stdcall;
  12707.     procedure KsSetPipeAllocatorFlag(Flag: ULONG); stdcall;
  12708.     function KsGetPinBusCache: TGUID; stdcall;
  12709.     procedure KsSetPinBusCache(const Bus: TGUID); stdcall;
  12710.     // very useful methods for tracing.
  12711.     function KsGetPinName: PWideChar; stdcall;
  12712.     function KsGetFilterName: PWideChar; stdcall;
  12713.   end;
  12714.  
  12715.   IKsPinFactory = interface(IUnknown)
  12716.     ['{CD5EBE6B-8B6E-11D1-8AE0-00A0C9223196}']
  12717.     procedure KsPinFactory(PinFactory: PULONG); stdcall;
  12718.   end;
  12719.  
  12720.   TKSIOOPERATION = (
  12721.     KsIoOperation_Write,
  12722.     KsIoOperation_Read
  12723.   );
  12724.  
  12725.   IKsDataTypeHandler = interface(IUnknown)
  12726.     ['{5ffbaa02-49a3-11d0-9f36-00aa00a216a1}']
  12727.     procedure KsCompleteIoOperation(Sample: IMediaSample; StreamHeader: Pointer;
  12728.                 IoOperation: TKSIOOPERATION; Cancelled: BOOL); stdcall;
  12729.     procedure KsIsMediaTypeInRanges(DataRanges: Pointer); stdcall;
  12730.     procedure KsPrepareIoOperation(Sample: IMediaSample; StreamHeader: Pointer;
  12731.                 IoOperation: TKSIOOPERATION); stdcall;
  12732.     procedure KsQueryExtendedSize(var ExtendedSize: ULONG); stdcall;
  12733.     procedure KsSetMediaType(const AmMediaType: TAM_MEDIA_TYPE); stdcall;
  12734.   end;
  12735.  
  12736.   IKsDataTypeCompletion = interface(IUnknown)
  12737.     ['{827D1A0E-0F73-11D2-B27A-00A0C9223196}']
  12738.     procedure KsCompleteMediaType(FilterHandle: THANDLE; PinFactoryId: ULONG;
  12739.                 var AmMediaType: TAM_MEDIA_TYPE); stdcall;
  12740.   end;
  12741.  
  12742.   IKsInterfaceHandler = interface(IUnknown)
  12743.     ['{D3ABC7E0-9A61-11d0-A40D-00A0C9223196}']
  12744.     procedure KsSetPin(KsPin: IKsPin); stdcall;
  12745.     procedure KsProcessMediaSamples(KsDataTypeHandler: IKsDataTypeHandler;
  12746.                 SampleList: IMediaSample; SampleCount: PLongint;
  12747.                 IoOperation: TKSIOOPERATION; StreamSegment: PKSSTREAM_SEGMENT); stdcall;
  12748.     procedure KsCompleteIo(StreamSegment: PKSSTREAM_SEGMENT); stdcall;
  12749.   end;
  12750.  
  12751.  
  12752. //
  12753. // This structure definition is the common header required by the proxy to
  12754. // dispatch the stream segment to the interface handler.  Interface handlers
  12755. // will create extended structures to include other information such as
  12756. // media samples, extended header size and so on.
  12757.  
  12758.   TKSSTREAM_SEGMENT = record
  12759.     KsInterfaceHandler : IKsInterfaceHandler;
  12760.     KsDataTypeHandler  : IKsDataTypeHandler;
  12761.     IoOperation        : TKSIOOPERATION;
  12762.     CompletionEvent    : THANDLE;
  12763.   end;
  12764.  
  12765.   IKsObject = interface(IUnknown)
  12766.     ['{423c13a2-2070-11d0-9ef7-00aa00a216a1}']
  12767.     function KsGetObjectHandle: THANDLE; stdcall;
  12768.   end;
  12769.  
  12770.   IKsQualityForwarder = interface(IUnknown)
  12771.     ['{97ebaacb-95bd-11d0-a3ea-00a0c9223196}']
  12772.     procedure KsFlushClient(Pin: IKsPin); stdcall;
  12773.   end;
  12774.  
  12775.   function KsResolveRequiredAttributes(DataRange: PKSDATARANGE;
  12776.              {OPTIONAL}Attributes: PKSMULTIPLE_ITEM): HRESULT; external 'KSPROXY.AX';
  12777.  
  12778.   function KsOpenDefaultDevice(Category: TGUID; Access: ACCESS_MASK;
  12779.              DeviceHandle: PHANDLE): HRESULT; external 'KSPROXY.AX';
  12780.  
  12781.   function KsSynchronousDeviceControl(Handle: THANDLE; IoControl: ULONG;
  12782.              InBuffer: Pointer; InLength: ULONG; OutBuffer: Pointer;
  12783.              OutLength: ULONG; BytesReturned: PULONG): HRESULT; external 'KSPROXY.AX';
  12784.  
  12785.   function KsGetMultiplePinFactoryItems(FilterHandle: THANDLE; PinFactoryId: ULONG;
  12786.              PropertyId: ULONG; Items: Pointer): HRESULT; external 'KSPROXY.AX';
  12787.  
  12788.   function KsGetMediaTypeCount(FilterHandle: THANDLE; PinFactoryId: ULONG;
  12789.              out MediaTypeCount: ULONG): HRESULT; external 'KSPROXY.AX';
  12790.  
  12791.   function KsGetMediaType(Position: integer; out AmMediaType: TAM_MEDIA_TYPE;
  12792.              FilterHandle: THANDLE; PinFactoryId: ULONG): HRESULT; external 'KSPROXY.AX';
  12793.  
  12794. type
  12795.   IKsAggregateControl = interface(IUnknown)
  12796.     ['{7F40EAC0-3947-11D2-874E-00A0C9223196}']
  12797.     procedure KsAddAggregate(const AggregateClass: TGUID); stdcall;
  12798.     procedure KsRemoveAggregate(const AggregateClass: TGUID); stdcall;
  12799.   end;
  12800.  
  12801.   IKsTopology = interface(IUnknown)
  12802.     ['{28F54683-06FD-11D2-B27A-00A0C9223196}']
  12803.     procedure CreateNodeInstance(NodeId: ULONG; Flags: ULONG; DesiredAccess: ACCESS_MASK;
  12804.               {OPTIONAL}UnkOuter: IUnknown; const InterfaceId: TGUID; out Interface_); stdcall;
  12805.   end;
  12806.  
  12807.  {*****************************************************************************
  12808.  *  Copyright (C) Microsoft Corporation, 1996 - 2000                          *
  12809.  *                                                                            *
  12810.  *  Module Name: ksmedia.h                                                    *
  12811.  *                                                                            *
  12812.  *  Abstract: WDM-CSA Multimedia Definitions.                                 *
  12813.  *                                                                            *
  12814.  *****************************************************************************}
  12815.  
  12816.   PKSMULTIPLE_DATA_PROP = ^TKSMULTIPLE_DATA_PROP;
  12817.   TKSMULTIPLE_DATA_PROP = record
  12818.     Property_    : TKSPROPERTY;
  12819.     MultipleItem : TKSMULTIPLE_ITEM;
  12820.   end;
  12821.  
  12822. const
  12823.   KSMEDIUMSETID_MidiBus  : TGUID = '{05908040-3246-11D0-A5D6-28DB04C10000}';
  12824.   KSMEDIUMSETID_VPBus    : TGUID = '{A18C15EC-CE43-11D0-ABE7-00A0C9223196}';
  12825.   KSINTERFACESETID_Media : TGUID = '{3A13EB40-30A7-11D0-A5D6-28DB04C10000}';
  12826.  
  12827. type
  12828.   TKSINTERFACE_MEDIA = (
  12829.     KSINTERFACE_MEDIA_MUSIC,
  12830.     KSINTERFACE_MEDIA_WAVE_BUFFERED,
  12831.     KSINTERFACE_MEDIA_WAVE_QUEUED
  12832.   );
  12833.  
  12834. // USB Terminals
  12835. //#define INIT_USB_TERMINAL(guid, id)\
  12836. {\
  12837.     (guid)->Data1 = 0xDFF219E0 + (USHORT)(id);\
  12838.     (guid)->Data2 = 0xF70F;\
  12839.     (guid)->Data3 = 0x11D0;\
  12840.     (guid)->Data4[0] = 0xb9;\
  12841.     (guid)->Data4[1] = 0x17;\
  12842.     (guid)->Data4[2] = 0x00;\
  12843.     (guid)->Data4[3] = 0xa0;\
  12844.     (guid)->Data4[4] = 0xc9;\
  12845.     (guid)->Data4[5] = 0x22;\
  12846.     (guid)->Data4[6] = 0x31;\
  12847.     (guid)->Data4[7] = 0x96;\
  12848. }
  12849.  
  12850. {#define EXTRACT_USB_TERMINAL(guid)\
  12851.     (USHORT)((guid)->Data1 - 0xDFF219E0)
  12852. #define DEFINE_USB_TERMINAL_GUID(id)\
  12853.     0xDFF219E0+(USHORT)(id), 0xF70F, 0x11D0, 0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
  12854. const
  12855.   KSNODETYPE_MICROPHONE                      : TGUID = '{DFF21BE1-F70F-11D0-B917-00A0C9223196}';
  12856.   KSNODETYPE_DESKTOP_MICROPHONE              : TGUID = '{DFF21BE2-F70F-11D0-B917-00A0C9223196}';
  12857.   KSNODETYPE_PERSONAL_MICROPHONE             : TGUID = '{DFF21BE3-F70F-11D0-B917-00A0C9223196}';
  12858.   KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE     : TGUID = '{DFF21BE4-F70F-11D0-B917-00A0C9223196}';
  12859.   KSNODETYPE_MICROPHONE_ARRAY                : TGUID = '{DFF21BE5-F70F-11D0-B917-00A0C9223196}';
  12860.   KSNODETYPE_PROCESSING_MICROPHONE_ARRAY     : TGUID = '{DFF21BE6-F70F-11D0-B917-00A0C9223196}';
  12861.   KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR      : TGUID = '{830a44f2-a32d-476b-be97-42845673b35a}';
  12862.   KSNODETYPE_SPEAKER                         : TGUID = '{DFF21CE1-F70F-11D0-B917-00A0C9223196}';
  12863.   KSNODETYPE_HEADPHONES                      : TGUID = '{DFF21CE2-F70F-11D0-B917-00A0C9223196}';
  12864.   KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO      : TGUID = '{DFF21CE3-F70F-11D0-B917-00A0C9223196}';
  12865.   KSNODETYPE_DESKTOP_SPEAKER                 : TGUID = '{DFF21CE4-F70F-11D0-B917-00A0C9223196}';
  12866.   KSNODETYPE_ROOM_SPEAKER                    : TGUID = '{DFF21CE5-F70F-11D0-B917-00A0C9223196}';
  12867.   KSNODETYPE_COMMUNICATION_SPEAKER           : TGUID = '{DFF21CE6-F70F-11D0-B917-00A0C9223196}';
  12868.   KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER   : TGUID = '{DFF21CE7-F70F-11D0-B917-00A0C9223196}';
  12869.   KSNODETYPE_HANDSET                         : TGUID = '{DFF21DE1-F70F-11D0-B917-00A0C9223196}';
  12870.   KSNODETYPE_HEADSET                         : TGUID = '{DFF21DE2-F70F-11D0-B917-00A0C9223196}';
  12871.   KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION  : TGUID = '{DFF21DE3-F70F-11D0-B917-00A0C9223196}';
  12872.   KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE   : TGUID = '{DFF21DE4-F70F-11D0-B917-00A0C9223196}';
  12873.   KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE     : TGUID = '{DFF21DE5-F70F-11D0-B917-00A0C9223196}';
  12874.   KSNODETYPE_PHONE_LINE                      : TGUID = '{DFF21EE1-F70F-11D0-B917-00A0C9223196}';
  12875.   KSNODETYPE_TELEPHONE                       : TGUID = '{DFF21EE2-F70F-11D0-B917-00A0C9223196}';
  12876.   KSNODETYPE_DOWN_LINE_PHONE                 : TGUID = '{DFF21EE3-F70F-11D0-B917-00A0C9223196}';
  12877.   KSNODETYPE_ANALOG_CONNECTOR                : TGUID = '{DFF21FE1-F70F-11D0-B917-00A0C9223196}';
  12878.   KSNODETYPE_DIGITAL_AUDIO_INTERFACE         : TGUID = '{DFF21FE2-F70F-11D0-B917-00A0C9223196}';
  12879.   KSNODETYPE_LINE_CONNECTOR                  : TGUID = '{DFF21FE3-F70F-11D0-B917-00A0C9223196}';
  12880.   KSNODETYPE_LEGACY_AUDIO_CONNECTOR          : TGUID = '{DFF21FE4-F70F-11D0-B917-00A0C9223196}';
  12881.   KSNODETYPE_SPDIF_INTERFACE                 : TGUID = '{DFF21FE5-F70F-11D0-B917-00A0C9223196}';
  12882.   KSNODETYPE_1394_DA_STREAM                  : TGUID = '{DFF21FE6-F70F-11D0-B917-00A0C9223196}';
  12883.   KSNODETYPE_1394_DV_STREAM_SOUNDTRACK       : TGUID = '{DFF21FE7-F70F-11D0-B917-00A0C9223196}';
  12884.   KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE  : TGUID = '{DFF220E1-F70F-11D0-B917-00A0C9223196}';
  12885.   KSNODETYPE_EQUALIZATION_NOISE              : TGUID = '{DFF220E2-F70F-11D0-B917-00A0C9223196}';
  12886.   KSNODETYPE_CD_PLAYER                       : TGUID = '{DFF220E3-F70F-11D0-B917-00A0C9223196}';
  12887.   KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE       : TGUID = '{DFF220E4-F70F-11D0-B917-00A0C9223196}';
  12888.   KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE : TGUID = '{DFF220E5-F70F-11D0-B917-00A0C9223196}';
  12889.   KSNODETYPE_MINIDISK                        : TGUID = '{DFF220E6-F70F-11D0-B917-00A0C9223196}';
  12890.   KSNODETYPE_ANALOG_TAPE                     : TGUID = '{DFF220E7-F70F-11D0-B917-00A0C9223196}';
  12891.   KSNODETYPE_PHONOGRAPH                      : TGUID = '{DFF220E8-F70F-11D0-B917-00A0C9223196}';
  12892.   KSNODETYPE_VCR_AUDIO                       : TGUID = '{DFF220E9-F70F-11D0-B917-00A0C9223196}';
  12893.   KSNODETYPE_VIDEO_DISC_AUDIO                : TGUID = '{DFF220EA-F70F-11D0-B917-00A0C9223196}';
  12894.   KSNODETYPE_DVD_AUDIO                       : TGUID = '{DFF220EB-F70F-11D0-B917-00A0C9223196}';
  12895.   KSNODETYPE_TV_TUNER_AUDIO                  : TGUID = '{DFF220EC-F70F-11D0-B917-00A0C9223196}';
  12896.   KSNODETYPE_SATELLITE_RECEIVER_AUDIO        : TGUID = '{DFF220ED-F70F-11D0-B917-00A0C9223196}';
  12897.   KSNODETYPE_CABLE_TUNER_AUDIO               : TGUID = '{DFF220EE-F70F-11D0-B917-00A0C9223196}';
  12898.   KSNODETYPE_DSS_AUDIO                       : TGUID = '{DFF220EF-F70F-11D0-B917-00A0C9223196}';
  12899.   KSNODETYPE_RADIO_RECEIVER                  : TGUID = '{DFF220F0-F70F-11D0-B917-00A0C9223196}';
  12900.   KSNODETYPE_RADIO_TRANSMITTER               : TGUID = '{DFF220F1-F70F-11D0-B917-00A0C9223196}';
  12901.   KSNODETYPE_MULTITRACK_RECORDER             : TGUID = '{DFF220F2-F70F-11D0-B917-00A0C9223196}';
  12902.   KSNODETYPE_SYNTHESIZER                     : TGUID = '{DFF220F3-F70F-11D0-B917-00A0C9223196}';
  12903. // Microsoft's WDMAUD virtual swsynth pin name guid
  12904.   KSNODETYPE_SWSYNTH                         : TGUID = '{423274A0-8B81-11D1-A050-0000F8004788}';
  12905. // Microsoft's SWMIDI midi pin and node name guid
  12906.   KSNODETYPE_SWMIDI                          : TGUID = '{CB9BEFA0-A251-11D1-A050-0000F8004788}';
  12907.   KSNODETYPE_DRM_DESCRAMBLE                  : TGUID = '{FFBB6E3F-CCFE-4D84-90D9-421418B03A8E}';
  12908. // General categories
  12909.   KSCATEGORY_AUDIO                           : TGUID = '{6994AD04-93EF-11D0-A3CC-00A0C9223196}';
  12910.   KSCATEGORY_VIDEO                           : TGUID = '{6994AD05-93EF-11D0-A3CC-00A0C9223196}';
  12911.   KSCATEGORY_TEXT                            : TGUID = '{6994AD06-93EF-11D0-A3CC-00A0C9223196}';
  12912.   KSCATEGORY_NETWORK                         : TGUID = '{67C9CC3C-69C4-11D2-8759-00A0C9223196}';
  12913.   KSCATEGORY_TOPOLOGY                        : TGUID = '{DDA54A40-1E4C-11D1-A050-405705C10000}';
  12914.   KSCATEGORY_VIRTUAL                         : TGUID = '{3503EAC4-1F26-11D1-8AB0-00A0C9223196}';
  12915.   KSCATEGORY_ACOUSTIC_ECHO_CANCEL            : TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}';
  12916.   KSCATEGORY_SYSAUDIO                        : TGUID = '{A7C7A5B1-5AF3-11D1-9CED-00A024BF0407}';
  12917.   KSCATEGORY_WDMAUD                          : TGUID = '{3E227E76-690D-11D2-8161-0000F8775BF1}';
  12918.   KSCATEGORY_AUDIO_GFX                       : TGUID = '{9BAF9572-340C-11D3-ABDC-00A0C90AB16F}';
  12919.   KSCATEGORY_AUDIO_SPLITTER                  : TGUID = '{9EA331FA-B91B-45F8-9285-BD2BC77AFCDE}';
  12920.  
  12921.   KSCATEGORY_SYNTHESIZER                     : TGUID = '{DFF220F3-F70F-11D0-B917-00A0C9223196}'; //KSNODETYPE_SYNTHESIZER
  12922.   KSCATEGORY_DRM_DESCRAMBLE                  : TGUID = '{FFBB6E3F-CCFE-4D84-90D9-421418B03A8E}'; //KSNODETYPE_DRM_DESCRAMBLE
  12923.  
  12924.   KSCATEGORY_AUDIO_DEVICE                    : TGUID = '{FBF6F530-07B9-11D2-A71E-0000F8004788}';
  12925.   KSCATEGORY_PREFERRED_WAVEOUT_DEVICE        : TGUID = '{D6C5066E-72C1-11D2-9755-0000F8004788}';
  12926.   KSCATEGORY_PREFERRED_WAVEIN_DEVICE         : TGUID = '{D6C50671-72C1-11D2-9755-0000F8004788}';
  12927.   KSCATEGORY_PREFERRED_MIDIOUT_DEVICE        : TGUID = '{D6C50674-72C1-11D2-9755-0000F8004788}';
  12928. // Special pin category for wdmaud
  12929.   KSCATEGORY_WDMAUD_USE_PIN_NAME             : TGUID = '{47A4FA20-A251-11D1-A050-0000F8004788}';
  12930. // Escalante Platform Interface
  12931.   KSCATEGORY_ESCALANTE_PLATFORM_DRIVER       : TGUID = '{74f3aea8-9768-11d1-8e07-00a0c95ec22e}';
  12932. // -- major types ---
  12933.  
  12934. // 'vids' == MEDIATYPE_Video,
  12935.   KSDATAFORMAT_TYPE_VIDEO                    : TGUID = '{73646976-0000-0010-8000-00aa00389b71}';
  12936. // 'auds' == MEDIATYPE_Audio
  12937.   KSDATAFORMAT_TYPE_AUDIO                    : TGUID = '{73647561-0000-0010-8000-00aa00389b71}';
  12938. // 'txts' == MEDIATYPE_Text
  12939.   KSDATAFORMAT_TYPE_TEXT                     : TGUID = '{73747874-0000-0010-8000-00aa00389b71}';
  12940.  
  12941. {#if !defined( DEFINE_WAVEFORMATEX_GUID )
  12942. #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  12943. #endif}
  12944.  
  12945.   KSDATAFORMAT_SUBTYPE_WAVEFORMATEX          : TGUID = '{00000000-0000-0010-8000-00aa00389b71}';
  12946.  
  12947. //#define INIT_WAVEFORMATEX_GUID(Guid, x)\
  12948. {\
  12949.     *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;\
  12950.     (Guid)->Data1 = (USHORT)(x);\
  12951. }
  12952.  
  12953. {#define EXTRACT_WAVEFORMATEX_ID(Guid)\
  12954.     (USHORT)((Guid)->Data1)
  12955.  
  12956. #define IS_VALID_WAVEFORMATEX_GUID(Guid)\
  12957.     (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
  12958.  
  12959. #if !defined(INIT_MMREG_MID)}
  12960. //{d5a47fa7-6d98-11d1-a21a-00a0c9223196}
  12961. //#define INIT_MMREG_MID(guid, id)\
  12962. {\
  12963.     (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);\
  12964.     (guid)->Data2 = 0x6d98;\
  12965.     (guid)->Data3 = 0x11d1;\
  12966.     (guid)->Data4[0] = 0xa2;\
  12967.     (guid)->Data4[1] = 0x1a;\
  12968.     (guid)->Data4[2] = 0x00;\
  12969.     (guid)->Data4[3] = 0xa0;\
  12970.     (guid)->Data4[4] = 0xc9;\
  12971.     (guid)->Data4[5] = 0x22;\
  12972.     (guid)->Data4[6] = 0x31;\
  12973.     (guid)->Data4[7] = 0x96;\
  12974. }
  12975. {#define EXTRACT_MMREG_MID(guid)\
  12976.     (USHORT)((guid)->Data1 - 0xd5a47fa7)
  12977. #define DEFINE_MMREG_MID_GUID(id)\
  12978.     0xd5a47fa7+(USHORT)(id), 0x6d98, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  12979.  
  12980. #define IS_COMPATIBLE_MMREG_MID(guid)\
  12981.     (((guid)->Data1 >= 0xd5a47fa7) &&\
  12982.     ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&\
  12983.     ((guid)->Data2 == 0x6d98) &&\
  12984.     ((guid)->Data3 == 0x11d1) &&\
  12985.     ((guid)->Data4[0] == 0xa2) &&\
  12986.     ((guid)->Data4[1] == 0x1a) &&\
  12987.     ((guid)->Data4[2] == 0x00) &&\
  12988.     ((guid)->Data4[3] == 0xa0) &&\
  12989.     ((guid)->Data4[4] == 0xc9) &&\
  12990.     ((guid)->Data4[5] == 0x22) &&\
  12991.     ((guid)->Data4[6] == 0x31) &&\
  12992.     ((guid)->Data4[7] == 0x96))
  12993. #endif // !defined(INIT_MMREG_MID)
  12994.  
  12995. #if !defined(INIT_MMREG_PID)
  12996. //{e36dc2ac-6d9a-11d1-a21a-00a0c9223196}
  12997. //#define INIT_MMREG_PID(guid, id)\
  12998. {\
  12999.     (guid)->Data1 = 0xe36dc2ac + (USHORT)(id);\
  13000.     (guid)->Data2 = 0x6d9a;\
  13001.     (guid)->Data3 = 0x11d1;\
  13002.     (guid)->Data4[0] = 0xa2;\
  13003.     (guid)->Data4[1] = 0x1a;\
  13004.     (guid)->Data4[2] = 0x00;\
  13005.     (guid)->Data4[3] = 0xa0;\
  13006.     (guid)->Data4[4] = 0xc9;\
  13007.     (guid)->Data4[5] = 0x22;\
  13008.     (guid)->Data4[6] = 0x31;\
  13009.     (guid)->Data4[7] = 0x96;\
  13010. }
  13011. {#define EXTRACT_MMREG_PID(guid)\
  13012.     (USHORT)((guid)->Data1 - 0xe36dc2ac)
  13013. #define DEFINE_MMREG_PID_GUID(id)\
  13014.     0xe36dc2ac+(USHORT)(id), 0x6d9a, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  13015.  
  13016. #define IS_COMPATIBLE_MMREG_PID(guid)\
  13017.     (((guid)->Data1 >= 0xe36dc2ac) &&\
  13018.     ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&\
  13019.     ((guid)->Data2 == 0x6d9a) &&\
  13020.     ((guid)->Data3 == 0x11d1) &&\
  13021.     ((guid)->Data4[0] == 0xa2) &&\
  13022.     ((guid)->Data4[1] == 0x1a) &&\
  13023.     ((guid)->Data4[2] == 0x00) &&\
  13024.     ((guid)->Data4[3] == 0xa0) &&\
  13025.     ((guid)->Data4[4] == 0xc9) &&\
  13026.     ((guid)->Data4[5] == 0x22) &&\
  13027.     ((guid)->Data4[6] == 0x31) &&\
  13028.     ((guid)->Data4[7] == 0x96))
  13029. #endif // !defined(INIT_MMREG_PID)}
  13030.  
  13031.  KSDATAFORMAT_SUBTYPE_ANALOG         : TGUID = '{6dba3190-67bd-11cf-a0f7-0020afd156e4}';
  13032.  KSDATAFORMAT_SUBTYPE_PCM            : TGUID = '{00000001-0000-0010-8000-00aa00389b71}';
  13033.  KSDATAFORMAT_SUBTYPE_IEEE_FLOAT     : TGUID = '{00000003-0000-0010-8000-00aa00389b71}';
  13034.  KSDATAFORMAT_SUBTYPE_DRM            : TGUID = '{00000009-0000-0010-8000-00aa00389b71}';
  13035.  KSDATAFORMAT_SUBTYPE_ALAW           : TGUID = '{00000006-0000-0010-8000-00aa00389b71}';
  13036.  KSDATAFORMAT_SUBTYPE_MULAW          : TGUID = '{00000007-0000-0010-8000-00aa00389b71}';
  13037.  KSDATAFORMAT_SUBTYPE_ADPCM          : TGUID = '{00000002-0000-0010-8000-00aa00389b71}';
  13038.  KSDATAFORMAT_SUBTYPE_MPEG           : TGUID = '{00000050-0000-0010-8000-00aa00389b71}';
  13039.  KSDATAFORMAT_SPECIFIER_VC_ID        : TGUID = '{AD98D184-AAC3-11D0-A41C-00A0C9223196}';
  13040.  KSDATAFORMAT_SPECIFIER_WAVEFORMATEX : TGUID = '{05589f81-c356-11ce-bf01-00aa0055595a}';
  13041.  KSDATAFORMAT_SPECIFIER_DSOUND       : TGUID = '{518590a2-a184-11d0-8522-00c04fd9baf3}';
  13042.  
  13043. type
  13044.   PKSDATAFORMAT_WAVEFORMATEX = ^TKSDATAFORMAT_WAVEFORMATEX;
  13045.   TKSDATAFORMAT_WAVEFORMATEX = record
  13046.     DataFormat   : TKSDATAFORMAT;
  13047.     WaveFormatEx : TWAVEFORMATEX;
  13048.   end;
  13049.  
  13050. // DirectSound buffer description
  13051.   PKSDSOUND_BUFFERDESC = ^TKSDSOUND_BUFFERDESC;
  13052.   TKSDSOUND_BUFFERDESC = record
  13053.     Flags        : ULONG;
  13054.     Control      : ULONG;
  13055.     WaveFormatEx : TWAVEFORMATEX;
  13056.   end;
  13057.  
  13058. // DirectSound format
  13059.   PKSDATAFORMAT_DSOUND = ^TKSDATAFORMAT_DSOUND;
  13060.   TKSDATAFORMAT_DSOUND = record
  13061.     DataFormat :TKSDATAFORMAT;
  13062.     BufferDesc :TKSDSOUND_BUFFERDESC;
  13063.   end;
  13064.  
  13065. const
  13066. // DirectSound buffer flags
  13067.   KSDSOUND_BUFFER_PRIMARY     = $00000001;
  13068.   KSDSOUND_BUFFER_STATIC      = $00000002;
  13069.   KSDSOUND_BUFFER_LOCHARDWARE = $00000004;
  13070.   KSDSOUND_BUFFER_LOCSOFTWARE = $00000008;
  13071.  
  13072. // DirectSound buffer control flags
  13073.   KSDSOUND_BUFFER_CTRL_3D             = $00000001;
  13074.   KSDSOUND_BUFFER_CTRL_FREQUENCY      = $00000002;
  13075.   KSDSOUND_BUFFER_CTRL_PAN            = $00000004;
  13076.   KSDSOUND_BUFFER_CTRL_VOLUME         = $00000008;
  13077.   KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY = $00000010;
  13078.  
  13079.   KSDSOUND_BUFFER_CTRL_HRTF_3D        = $40000000;
  13080.  
  13081. type
  13082.   PKSAUDIO_POSITION = ^TKSAUDIO_POSITION;
  13083.   TKSAUDIO_POSITION = record
  13084.     PlayOffset  :int64;
  13085.     WriteOffset :int64;
  13086.   end;
  13087.  
  13088. // DirectSound3D FIR context
  13089.   PKSDS3D_ITD_PARAMS = ^TKSDS3D_ITD_PARAMS;
  13090.   TKSDS3D_ITD_PARAMS = record
  13091.     Channel             : longint;
  13092.     VolSmoothScale      : single;
  13093.     TotalDryAttenuation : single;
  13094.     TotalWetAttenuation : single;
  13095.     SmoothFrequency     : longint;
  13096.     Delay               : longint;
  13097.   end;
  13098.  
  13099.   PKSDS3D_ITD_PARAMS_MSG = ^TKSDS3D_ITD_PARAMS_MSG;
  13100.   TKSDS3D_ITD_PARAMS_MSG = record
  13101.     Enabled     :ULONG;
  13102.     LeftParams  :TKSDS3D_ITD_PARAMS;
  13103.     RightParams :TKSDS3D_ITD_PARAMS;
  13104.     Reserved    :ULONG;
  13105.   end;
  13106.  
  13107. // DirectSound3D HRTF messages
  13108.  
  13109.   PKSDS3D_HRTF_PARAMS_MSG = ^TKSDS3D_HRTF_PARAMS_MSG;
  13110.   TKSDS3D_HRTF_PARAMS_MSG = record
  13111.     Size            :ULONG; // This is the size of the struct in bytes
  13112.     Enabled         :ULONG;
  13113.     SwapChannels    :BOOL;
  13114.     ZeroAzimuth     :BOOL;
  13115.     CrossFadeOutput :BOOL;
  13116.     FilterSize      :ULONG; // This is the additional size of the filter coeff in bytes
  13117.   end;
  13118.  
  13119. // HRTF filter quality levels
  13120.   TKSDS3D_HRTF_FILTER_QUALITY = (
  13121.     FULL_FILTER,
  13122.     LIGHT_FILTER,
  13123.     KSDS3D_FILTER_QUALITY_COUNT
  13124.   );
  13125.  
  13126.   PKSDS3D_HRTF_INIT_MSG = ^TKSDS3D_HRTF_INIT_MSG;
  13127.   TKSDS3D_HRTF_INIT_MSG = record
  13128.     Size                      : ULONG; // This is the size of the struct in bytes
  13129.     Quality                   : TKSDS3D_HRTF_FILTER_QUALITY;
  13130.     SampleRate                : single;
  13131.     MaxFilterSize             : ULONG;
  13132.     FilterTransientMuteLength : ULONG;
  13133.     FilterOverlapBufferLength : ULONG;
  13134.     OutputOverlapBufferLength : ULONG;
  13135.     Reserved                  : ULONG;
  13136.   end;
  13137.  
  13138. // Coefficient formats
  13139.   TKSDS3D_HRTF_COEFF_FORMAT = (
  13140.     FLOAT_COEFF,
  13141.     SHORT_COEFF,
  13142.     KSDS3D_COEFF_COUNT
  13143.   );
  13144.  
  13145. // Filter methods
  13146.   TKSDS3D_HRTF_FILTER_METHOD = (
  13147.     DIRECT_FORM,
  13148.     CASCADE_FORM,
  13149.     KSDS3D_FILTER_METHOD_COUNT
  13150.   );
  13151.  
  13152. // Filter methods
  13153.   TKSDS3D_HRTF_FILTER_VERSION = (
  13154.     DS3D_HRTF_VERSION_1
  13155.   );
  13156.  
  13157.   PKSDS3D_HRTF_FILTER_FORMAT_MSG = ^TKSDS3D_HRTF_FILTER_FORMAT_MSG;
  13158.   TKSDS3D_HRTF_FILTER_FORMAT_MSG = record
  13159.     FilterMethod : TKSDS3D_HRTF_FILTER_METHOD;
  13160.     CoeffFormat  : TKSDS3D_HRTF_COEFF_FORMAT;
  13161.     Version      : TKSDS3D_HRTF_FILTER_VERSION;
  13162.     Reserved     : ULONG;
  13163.   end;
  13164.  
  13165. //===========================================================================
  13166. // DirectSound3D HAL
  13167.  
  13168.  
  13169.   PDS3DVECTOR = ^TDS3DVECTOR;
  13170.   TDS3DVECTOR = record
  13171.     case integer of
  13172.     0: (
  13173.       x   : single;
  13174.       y   : single;
  13175.       z   : single);
  13176.     1: (
  13177.       dvX : single;
  13178.       dvY : single;
  13179.       dvZ : single);
  13180.     end;
  13181.  
  13182. //===========================================================================
  13183. //===========================================================================
  13184.  
  13185. // KSPROPSETID_DirectSound3DListener : {437B3414-D060-11d0-8583-00C04FD9BAF3}
  13186. const
  13187.   KSPROPSETID_DirectSound3DListener : TGUID = '{437b3414-d060-11d0-8583-00c04fd9baf3}';
  13188.  
  13189. type
  13190.   TKSPROPERTY_DIRECTSOUND3DLISTENER = (
  13191.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
  13192.     KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
  13193.     KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
  13194.     KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
  13195.     KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
  13196.     KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
  13197.     KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
  13198.     KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
  13199.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
  13200.   );
  13201.  
  13202.   PKSDS3D_LISTENER_ALL = ^TKSDS3D_LISTENER_ALL;
  13203.   TKSDS3D_LISTENER_ALL = record
  13204.     Position       : TDS3DVECTOR;
  13205.     Velocity       : TDS3DVECTOR;
  13206.     OrientFront    : TDS3DVECTOR;
  13207.     OrientTop      : TDS3DVECTOR;
  13208.     DistanceFactor : single;
  13209.     RolloffFactor  : single;
  13210.     DopplerFactor  : single;
  13211.   end;
  13212.  
  13213.   PKSDS3D_LISTENER_ORIENTATION = ^TKSDS3D_LISTENER_ORIENTATION;
  13214.   TKSDS3D_LISTENER_ORIENTATION = record
  13215.     Front : TDS3DVECTOR;
  13216.     Top   : TDS3DVECTOR;
  13217.   end;
  13218.  
  13219. //===========================================================================
  13220. //===========================================================================
  13221. // KSPROPSETID_DirectSound3DBuffer : {437B3411-D060-11d0-8583-00C04FD9BAF3}
  13222. const
  13223.   KSPROPSETID_DirectSound3DBuffer : TGUID = '{437B3411-D060-11d0-8583-00C04FD9BAF3}';
  13224.  
  13225. type
  13226.   TKSPROPERTY_DIRECTSOUND3DBUFFER = (
  13227.     KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
  13228.     KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
  13229.     KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
  13230.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
  13231.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
  13232.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
  13233.     KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
  13234.     KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
  13235.     KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
  13236.   );
  13237.  
  13238.   PKSDS3D_BUFFER_ALL = ^TKSDS3D_BUFFER_ALL;
  13239.   TKSDS3D_BUFFER_ALL = record
  13240.     Position          : TDS3DVECTOR;
  13241.     Velocity          : TDS3DVECTOR;
  13242.     InsideConeAngle   : ULONG;
  13243.     OutsideConeAngle  : ULONG;
  13244.     ConeOrientation   : TDS3DVECTOR;
  13245.     ConeOutsideVolume : longint;
  13246.     MinDistance       : single;
  13247.     MaxDistance       : single;
  13248.     Mode              : ULONG;
  13249.   end;
  13250.  
  13251.   PKSDS3D_BUFFER_CONE_ANGLES = ^TKSDS3D_BUFFER_CONE_ANGLES;
  13252.   TKSDS3D_BUFFER_CONE_ANGLES = record
  13253.     InsideConeAngle  : ULONG;
  13254.     OutsideConeAngle : ULONG;
  13255.   end;
  13256.  
  13257. const
  13258.   KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE = -1;
  13259.   KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN       = 5;
  13260.   KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW    = 10;
  13261.   KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE      = 20;
  13262.   KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX       = 180;
  13263.  
  13264.   KSDSOUND_3D_MODE_NORMAL       = $00000000;
  13265.   KSDSOUND_3D_MODE_HEADRELATIVE = $00000001;
  13266.   KSDSOUND_3D_MODE_DISABLE      = $00000002;
  13267.  
  13268. type
  13269.   PKSDATARANGE_AUDIO = ^TKSDATARANGE_AUDIO;
  13270.   TKSDATARANGE_AUDIO = record
  13271.     DataRange              : TKSDATARANGE;
  13272.     MaximumChannels        : ULONG;
  13273.     MinimumBitsPerSample   : ULONG;
  13274.     MaximumBitsPerSample   : ULONG;
  13275.     MinimumSampleFrequency : ULONG;
  13276.     MaximumSampleFrequency : ULONG;
  13277.   end;
  13278.  
  13279. //---------------------------------------------------------------------------
  13280. const
  13281.   KSDATAFORMAT_SUBTYPE_RIFF     : TGUID = '{4995DAEE-9EE6-11D0-A40E-00A0C9223196}';
  13282.   KSDATAFORMAT_SUBTYPE_RIFFWAVE : TGUID = '{e436eb8b-524f-11ce-9f53-0020af0ba770}';
  13283.  
  13284. //===========================================================================
  13285. //===========================================================================
  13286.  
  13287.   KSPROPSETID_Bibliographic     : TGUID = '{07BA150E-E2B1-11D0-AC17-00A0C9223196}';
  13288.  
  13289. //Repeatable tags contain all entries within the property, each preceeded by length
  13290. type
  13291.   TKSPROPERTY_BIBLIOGRAPHIC = TOleEnum;
  13292. const
  13293.     KSPROPERTY_BIBLIOGRAPHIC_LEADER                      = 'RDL ';
  13294.     KSPROPERTY_BIBLIOGRAPHIC_LCCN                        = '010 ';
  13295.     KSPROPERTY_BIBLIOGRAPHIC_ISBN                        = '020 ';
  13296.     KSPROPERTY_BIBLIOGRAPHIC_ISSN                        = '220 ';
  13297.     KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE            = '040 ';
  13298.     KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME            = '001 ';
  13299.     KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY           = '011 ';
  13300.     KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME             = '111 ';
  13301.     KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE            = '031 ';
  13302.     KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE                = '042 ';
  13303.     KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT              = '542 ';
  13304.     KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE            = '642 ';
  13305.     KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION                 = '062 ';
  13306.     KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION         = '003 ';
  13307.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE             = '044 ';
  13308.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT             = '094 ';
  13309.     KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE                 = '005 ';
  13310.     KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE            = '405 ';
  13311.     KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE                = '505 ';
  13312.     KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT              = '805 ';
  13313.     KSPROPERTY_BIBLIOGRAPHIC_CITATION                    = '015 ';
  13314.     KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT                 = '115 ';
  13315.     KSPROPERTY_BIBLIOGRAPHIC_SUMMARY                     = '025 ';
  13316.     KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE              = '125 ';
  13317.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE          = '035 ';
  13318.     KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS               = '835 ';
  13319.     KSPROPERTY_BIBLIOGRAPHIC_AWARDS                      = '685 ';
  13320.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME      = '006 ';
  13321.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM       = '056 ';
  13322.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC        = '156 ';
  13323.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE              = '556 ';
  13324.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM         = '856 ';
  13325.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE      = '037 ';
  13326.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED           = '047 ';
  13327.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ';
  13328.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 ';
  13329.  
  13330.   KSPROPSETID_TopologyNode : TGUID = '{45FFAAA1-6E1B-11D0-BCF2-444553540000}';
  13331.  
  13332. type
  13333.   TKSPROPERTY_TOPOLOGYNODE = (
  13334.     KSPROPERTY_TOPOLOGYNODE_Invalid,
  13335.     KSPROPERTY_TOPOLOGYNODE_ENABLE,
  13336.     KSPROPERTY_TOPOLOGYNODE_RESET
  13337.   );
  13338.  
  13339. //===========================================================================
  13340. const
  13341.   KSPROPSETID_DrmAudioStream : TGUID = '{2F2C8DDD-4198-4fac-BA29-61BB05B7DE06}';
  13342.  
  13343. type
  13344.   TKSPROPERTY_DRMAUDIOSTREAM = (
  13345.     KSPROPERTY_DRMAUDIOSTREAM_CONTENTID,
  13346.     KSPROPERTY_DRMAUDIOSTREAM_AUTHENTICATEFUNCTION
  13347.   );
  13348.  
  13349. //===========================================================================
  13350. const
  13351.   KSPROPSETID_Audio : TGUID = '{45FFAAA0-6E1B-11D0-BCF2-444553540000}';
  13352.  
  13353. type
  13354.   TKSPROPERTY_AUDIO = (
  13355.     KSPROPERTY_AUDIO_Invalid,
  13356.     KSPROPERTY_AUDIO_LATENCY,
  13357.     KSPROPERTY_AUDIO_COPY_PROTECTION,
  13358.     KSPROPERTY_AUDIO_CHANNEL_CONFIG,
  13359.     KSPROPERTY_AUDIO_VOLUMELEVEL,
  13360.     KSPROPERTY_AUDIO_POSITION,
  13361.     KSPROPERTY_AUDIO_DYNAMIC_RANGE,
  13362.     KSPROPERTY_AUDIO_QUALITY,
  13363.     KSPROPERTY_AUDIO_SAMPLING_RATE,
  13364.     KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
  13365.     KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
  13366.     KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
  13367.     KSPROPERTY_AUDIO_MUX_SOURCE,
  13368.     KSPROPERTY_AUDIO_MUTE,
  13369.     KSPROPERTY_AUDIO_BASS,
  13370.     KSPROPERTY_AUDIO_MID,
  13371.     KSPROPERTY_AUDIO_TREBLE,
  13372.     KSPROPERTY_AUDIO_BASS_BOOST,
  13373.     KSPROPERTY_AUDIO_EQ_LEVEL,
  13374.     KSPROPERTY_AUDIO_NUM_EQ_BANDS,
  13375.     KSPROPERTY_AUDIO_EQ_BANDS,
  13376.     KSPROPERTY_AUDIO_AGC,
  13377.     KSPROPERTY_AUDIO_DELAY,
  13378.     KSPROPERTY_AUDIO_LOUDNESS,
  13379.     KSPROPERTY_AUDIO_WIDE_MODE,
  13380.     KSPROPERTY_AUDIO_WIDENESS,
  13381.     KSPROPERTY_AUDIO_REVERB_LEVEL,
  13382.     KSPROPERTY_AUDIO_CHORUS_LEVEL,
  13383.     KSPROPERTY_AUDIO_DEV_SPECIFIC,
  13384.     KSPROPERTY_AUDIO_DEMUX_DEST,
  13385.     KSPROPERTY_AUDIO_STEREO_ENHANCE,
  13386.     KSPROPERTY_AUDIO_MANUFACTURE_GUID,
  13387.     KSPROPERTY_AUDIO_PRODUCT_GUID,
  13388.     KSPROPERTY_AUDIO_CPU_RESOURCES,
  13389.     KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
  13390.     KSPROPERTY_AUDIO_SURROUND_ENCODE,
  13391.     KSPROPERTY_AUDIO_3D_INTERFACE,
  13392.     KSPROPERTY_AUDIO_PEAKMETER,
  13393.     KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
  13394.   );
  13395.  
  13396. // Audio quality constants
  13397. const
  13398.   KSAUDIO_QUALITY_WORST    = $0;
  13399.   KSAUDIO_QUALITY_PC       = $1;
  13400.   KSAUDIO_QUALITY_BASIC    = $2;
  13401.   KSAUDIO_QUALITY_ADVANCED = $3;
  13402.  
  13403. // Audio CPU resource constants
  13404.   KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU = $00000000;
  13405.   KSAUDIO_CPU_RESOURCES_HOST_CPU     = $7FFFFFFF;
  13406.  
  13407. type
  13408.   PKSAUDIO_COPY_PROTECTION = ^TKSAUDIO_COPY_PROTECTION;
  13409.   TKSAUDIO_COPY_PROTECTION = record
  13410.     fCopyrighted : BOOL;
  13411.     fOriginal    : BOOL;
  13412.   end;
  13413.  
  13414.   PKSAUDIO_CHANNEL_CONFIG = ^TKSAUDIO_CHANNEL_CONFIG;
  13415.   TKSAUDIO_CHANNEL_CONFIG = record
  13416.     ActiveSpeakerPositions : Longint;
  13417.   end;
  13418.  
  13419. // Speaker Positions:
  13420. const
  13421.   SPEAKER_FRONT_LEFT            = $1;
  13422.   SPEAKER_FRONT_RIGHT           = $2;
  13423.   SPEAKER_FRONT_CENTER          = $4;
  13424.   SPEAKER_LOW_FREQUENCY         = $8;
  13425.   SPEAKER_BACK_LEFT             = $10;
  13426.   SPEAKER_BACK_RIGHT            = $20;
  13427.   SPEAKER_FRONT_LEFT_OF_CENTER  = $40;
  13428.   SPEAKER_FRONT_RIGHT_OF_CENTER = $80;
  13429.   SPEAKER_BACK_CENTER           = $100;
  13430.   SPEAKER_SIDE_LEFT             = $200;
  13431.   SPEAKER_SIDE_RIGHT            = $400;
  13432.   SPEAKER_TOP_CENTER            = $800;
  13433.   SPEAKER_TOP_FRONT_LEFT        = $1000;
  13434.   SPEAKER_TOP_FRONT_CENTER      = $2000;
  13435.   SPEAKER_TOP_FRONT_RIGHT       = $4000;
  13436.   SPEAKER_TOP_BACK_LEFT         = $8000;
  13437.   SPEAKER_TOP_BACK_CENTER       = $10000;
  13438.   SPEAKER_TOP_BACK_RIGHT        = $20000;
  13439.  
  13440. // Bit mask locations reserved for future use
  13441.   SPEAKER_RESERVED  = $7FFC0000;
  13442.  
  13443. // Used to specify that any possible permutation of speaker configurations
  13444.   SPEAKER_ALL       = $80000000;
  13445.  
  13446. // DirectSound Speaker Config
  13447.   KSAUDIO_SPEAKER_MONO     =       (SPEAKER_FRONT_CENTER);
  13448.   KSAUDIO_SPEAKER_STEREO   =       (SPEAKER_FRONT_LEFT           or SPEAKER_FRONT_RIGHT);
  13449.   KSAUDIO_SPEAKER_QUAD     =       (SPEAKER_FRONT_LEFT           or SPEAKER_FRONT_RIGHT or
  13450.                                     SPEAKER_BACK_LEFT            or SPEAKER_BACK_RIGHT);
  13451.   KSAUDIO_SPEAKER_SURROUND =       (SPEAKER_FRONT_LEFT           or SPEAKER_FRONT_RIGHT or
  13452.                                     SPEAKER_FRONT_CENTER         or SPEAKER_BACK_CENTER);
  13453.   KSAUDIO_SPEAKER_5POINT1  =       (SPEAKER_FRONT_LEFT           or SPEAKER_FRONT_RIGHT or
  13454.                                     SPEAKER_FRONT_CENTER         or SPEAKER_LOW_FREQUENCY or
  13455.                                     SPEAKER_BACK_LEFT            or SPEAKER_BACK_RIGHT);
  13456.   KSAUDIO_SPEAKER_7POINT1  =       (SPEAKER_FRONT_LEFT           or SPEAKER_FRONT_RIGHT or
  13457.                                     SPEAKER_FRONT_CENTER         or SPEAKER_LOW_FREQUENCY or
  13458.                                     SPEAKER_BACK_LEFT            or SPEAKER_BACK_RIGHT or
  13459.                                     SPEAKER_FRONT_LEFT_OF_CENTER or SPEAKER_FRONT_RIGHT_OF_CENTER);
  13460.  
  13461. // DVD Speaker Positions
  13462.   KSAUDIO_SPEAKER_GROUND_FRONT_LEFT   = SPEAKER_FRONT_LEFT;
  13463.   KSAUDIO_SPEAKER_GROUND_FRONT_CENTER = SPEAKER_FRONT_CENTER;
  13464.   KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT  = SPEAKER_FRONT_RIGHT;
  13465.   KSAUDIO_SPEAKER_GROUND_REAR_LEFT    = SPEAKER_BACK_LEFT;
  13466.   KSAUDIO_SPEAKER_GROUND_REAR_RIGHT   = SPEAKER_BACK_RIGHT;
  13467.   KSAUDIO_SPEAKER_TOP_MIDDLE          = SPEAKER_TOP_CENTER;
  13468.   KSAUDIO_SPEAKER_SUPER_WOOFER        = SPEAKER_LOW_FREQUENCY;
  13469.  
  13470. type
  13471.   PKSAUDIO_DYNAMIC_RANGE = ^TKSAUDIO_DYNAMIC_RANGE;
  13472.   TKSAUDIO_DYNAMIC_RANGE = record
  13473.     QuietCompression : ULONG;
  13474.     LoudCompression  : ULONG;
  13475.   end;
  13476.  
  13477.   PKSAUDIO_MIXLEVEL = ^TKSAUDIO_MIXLEVEL;
  13478.   TKSAUDIO_MIXLEVEL = record
  13479.     Mute  : BOOL;
  13480.     Level : Longint;
  13481.   end;
  13482.  
  13483.   PKSAUDIO_MIX_CAPS = ^TKSAUDIO_MIX_CAPS;
  13484.   TKSAUDIO_MIX_CAPS = record
  13485.     Mute    : BOOL;
  13486.     Minimum : longint;
  13487.     Maximum : longint;
  13488.     Reset   : longint;
  13489.   end;
  13490.  
  13491.   PKSAUDIO_MIXCAP_TABLE = ^TKSAUDIO_MIXCAP_TABLE;
  13492.   TKSAUDIO_MIXCAP_TABLE = record
  13493.     InputChannels  : ULONG;
  13494.     OutputChannels : ULONG;
  13495.     Capabilities   : array[0..0] of TKSAUDIO_MIX_CAPS;
  13496.   end;
  13497.  
  13498.   TSE_TECHNIQUE = (
  13499.     SE_TECH_NONE,
  13500.     SE_TECH_ANALOG_DEVICES_PHAT,
  13501.     SE_TECH_CREATIVE,
  13502.     SE_TECH_NATIONAL_SEMI,
  13503.     SE_TECH_YAMAHA_YMERSION,
  13504.     SE_TECH_BBE,
  13505.     SE_TECH_CRYSTAL_SEMI,
  13506.     SE_TECH_QSOUND_QXPANDER,
  13507.     SE_TECH_SPATIALIZER,
  13508.     SE_TECH_SRS,
  13509.     SE_TECH_PLATFORM_TECH,
  13510.     SE_TECH_AKM,
  13511.     SE_TECH_AUREAL,
  13512.     SE_TECH_AZTECH,
  13513.     SE_TECH_BINAURA,
  13514.     SE_TECH_ESS_TECH,
  13515.     SE_TECH_HARMAN_VMAX,
  13516.     SE_TECH_NVIDEA,
  13517.     SE_TECH_PHILIPS_INCREDIBLE,
  13518.     SE_TECH_TEXAS_INST,
  13519.     SE_TECH_VLSI_TECH
  13520.   );
  13521.  
  13522.   PKSAUDIO_STEREO_ENHANCE = ^TKSAUDIO_STEREO_ENHANCE;
  13523.   TKSAUDIO_STEREO_ENHANCE = record
  13524.     Technique : TSE_TECHNIQUE;
  13525.     Center    : ULONG;
  13526.     Depth     : ULONG;
  13527.     Reserved  : ULONG;
  13528.   end;
  13529.  
  13530. //===========================================================================
  13531. // Topology Node Type GUIDs
  13532. const
  13533.   KSNODETYPE_DAC                        : TGUID = '{507AE360-C554-11D0-8A2B-00A0C9255AC1}';
  13534.   KSNODETYPE_ADC                        : TGUID = '{4D837FE0-C555-11D0-8A2B-00A0C9255AC1}';
  13535.   KSNODETYPE_SRC                        : TGUID = '{9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1}';
  13536.   KSNODETYPE_SUPERMIX                   : TGUID = '{E573ADC0-C555-11D0-8A2B-00A0C9255AC1}';
  13537.   KSNODETYPE_MUX                        : TGUID = '{2CEAF780-C556-11D0-8A2B-00A0C9255AC1}';
  13538.   KSNODETYPE_DEMUX                      : TGUID = '{C0EB67D4-E807-11D0-958A-00C04FB925D3}';
  13539.   KSNODETYPE_SUM                        : TGUID = '{DA441A60-C556-11D0-8A2B-00A0C9255AC1}';
  13540.   KSNODETYPE_MUTE                       : TGUID = '{02B223C0-C557-11D0-8A2B-00A0C9255AC1}';
  13541.   KSNODETYPE_VOLUME                     : TGUID = '{3A5ACC00-C557-11D0-8A2B-00A0C9255AC1}';
  13542.   KSNODETYPE_TONE                       : TGUID = '{7607E580-C557-11D0-8A2B-00A0C9255AC1}';
  13543.   KSNODETYPE_EQUALIZER                  : TGUID = '{9D41B4A0-C557-11D0-8A2B-00A0C9255AC1}';
  13544.   KSNODETYPE_AGC                        : TGUID = '{E88C9BA0-C557-11D0-8A2B-00A0C9255AC1}';
  13545.   KSNODETYPE_NOISE_SUPPRESS             : TGUID = '{E07F903F-62FD-4e60-8CDD-DEA7236665B5}';
  13546.   KSNODETYPE_DELAY                      : TGUID = '{144981E0-C558-11D0-8A2B-00A0C9255AC1}';
  13547.   KSNODETYPE_LOUDNESS                   : TGUID = '{41887440-C558-11D0-8A2B-00A0C9255AC1}';
  13548.   KSNODETYPE_PROLOGIC_DECODER           : TGUID = '{831C2C80-C558-11D0-8A2B-00A0C9255AC1}';
  13549.   KSNODETYPE_STEREO_WIDE                : TGUID = '{A9E69800-C558-11D0-8A2B-00A0C9255AC1}';
  13550.   KSNODETYPE_STEREO_ENHANCE             : TGUID = '{AF6878AC-E83F-11D0-958A-00C04FB925D3}';
  13551.   KSNODETYPE_REVERB                     : TGUID = '{EF0328E0-C558-11D0-8A2B-00A0C9255AC1}';
  13552.   KSNODETYPE_CHORUS                     : TGUID = '{20173F20-C559-11D0-8A2B-00A0C9255AC1}';
  13553.   KSNODETYPE_3D_EFFECTS                 : TGUID = '{55515860-C559-11D0-8A2B-00A0C9255AC1}';
  13554.  
  13555.   KSNODETYPE_ACOUSTIC_ECHO_CANCEL       : TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}'; //KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  13556.   KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR : TGUID = '{830a44f2-a32d-476b-be97-42845673b35a}'; //KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
  13557.  
  13558.   KSNODETYPE_DEV_SPECIFIC               : TGUID = '{941C7AC0-C559-11D0-8A2B-00A0C9255AC1}';
  13559.   KSNODETYPE_SURROUND_ENCODER           : TGUID = '{8074C5B2-3C66-11D2-B45A-3078302C2030}';
  13560.   KSNODETYPE_PEAKMETER                  : TGUID = '{A085651E-5F0D-4b36-A869-D195D6AB4B9E}';
  13561.  
  13562. //===========================================================================
  13563. // Topology Node Name GUIDs for common audio nodes
  13564.   KSAUDFNAME_BASS                       : TGUID = '{185FEDE0-9905-11D1-95A9-00C04FB925D3}';
  13565.   KSAUDFNAME_TREBLE                     : TGUID = '{185FEDE1-9905-11D1-95A9-00C04FB925D3}';
  13566.   KSAUDFNAME_3D_STEREO                  : TGUID = '{185FEDE2-9905-11D1-95A9-00C04FB925D3}';
  13567.   KSAUDFNAME_MASTER_VOLUME              : TGUID = '{185FEDE3-9905-11D1-95A9-00C04FB925D3}';
  13568.   KSAUDFNAME_MASTER_MUTE                : TGUID = '{185FEDE4-9905-11D1-95A9-00C04FB925D3}';
  13569.   KSAUDFNAME_WAVE_VOLUME                : TGUID = '{185FEDE5-9905-11D1-95A9-00C04FB925D3}';
  13570.   KSAUDFNAME_WAVE_MUTE                  : TGUID = '{185FEDE6-9905-11D1-95A9-00C04FB925D3}';
  13571.   KSAUDFNAME_MIDI_VOLUME                : TGUID = '{185FEDE7-9905-11D1-95A9-00C04FB925D3}';
  13572.   KSAUDFNAME_MIDI_MUTE                  : TGUID = '{185FEDE8-9905-11D1-95A9-00C04FB925D3}';
  13573.   KSAUDFNAME_CD_VOLUME                  : TGUID = '{185FEDE9-9905-11D1-95A9-00C04FB925D3}';
  13574.   KSAUDFNAME_CD_MUTE                    : TGUID = '{185FEDEA-9905-11D1-95A9-00C04FB925D3}';
  13575.   KSAUDFNAME_LINE_VOLUME                : TGUID = '{185FEDEB-9905-11D1-95A9-00C04FB925D3}';
  13576.   KSAUDFNAME_LINE_MUTE                  : TGUID = '{185FEDEC-9905-11D1-95A9-00C04FB925D3}';
  13577.   KSAUDFNAME_MIC_VOLUME                 : TGUID = '{185FEDED-9905-11D1-95A9-00C04FB925D3}';
  13578.   KSAUDFNAME_MIC_MUTE                   : TGUID = '{185FEDEE-9905-11D1-95A9-00C04FB925D3}';
  13579.   KSAUDFNAME_RECORDING_SOURCE           : TGUID = '{185FEDEF-9905-11D1-95A9-00C04FB925D3}';
  13580.   KSAUDFNAME_PC_SPEAKER_VOLUME          : TGUID = '{185FEDF0-9905-11D1-95A9-00C04FB925D3}';
  13581.   KSAUDFNAME_PC_SPEAKER_MUTE            : TGUID = '{185FEDF1-9905-11D1-95A9-00C04FB925D3}';
  13582.   KSAUDFNAME_MIDI_IN_VOLUME             : TGUID = '{185FEDF2-9905-11D1-95A9-00C04FB925D3}';
  13583.   KSAUDFNAME_CD_IN_VOLUME               : TGUID = '{185FEDF3-9905-11D1-95A9-00C04FB925D3}';
  13584.   KSAUDFNAME_LINE_IN_VOLUME             : TGUID = '{185FEDF4-9905-11D1-95A9-00C04FB925D3}';
  13585.   KSAUDFNAME_MIC_IN_VOLUME              : TGUID = '{185FEDF5-9905-11D1-95A9-00C04FB925D3}';
  13586.   KSAUDFNAME_WAVE_IN_VOLUME             : TGUID = '{185FEDF6-9905-11D1-95A9-00C04FB925D3}';
  13587.   KSAUDFNAME_VOLUME_CONTROL             : TGUID = '{185FEDF7-9905-11D1-95A9-00C04FB925D3}';
  13588.   KSAUDFNAME_MIDI                       : TGUID = '{185FEDF8-9905-11D1-95A9-00C04FB925D3}';
  13589.   KSAUDFNAME_LINE_IN                    : TGUID = '{185FEDF9-9905-11D1-95A9-00C04FB925D3}';
  13590.   KSAUDFNAME_RECORDING_CONTROL          : TGUID = '{185FEDFA-9905-11D1-95A9-00C04FB925D3}';
  13591.   KSAUDFNAME_CD_AUDIO                   : TGUID = '{185FEDFB-9905-11D1-95A9-00C04FB925D3}';
  13592.   KSAUDFNAME_AUX_VOLUME                 : TGUID = '{185FEDFC-9905-11D1-95A9-00C04FB925D3}';
  13593.   KSAUDFNAME_AUX_MUTE                   : TGUID = '{185FEDFD-9905-11D1-95A9-00C04FB925D3}';
  13594.   KSAUDFNAME_AUX                        : TGUID = '{185FEDFE-9905-11D1-95A9-00C04FB925D3}';
  13595.   KSAUDFNAME_PC_SPEAKER                 : TGUID = '{185FEDFF-9905-11D1-95A9-00C04FB925D3}';
  13596.   KSAUDFNAME_WAVE_OUT_MIX               : TGUID = '{185FEE00-9905-11D1-95A9-00C04FB925D3}';
  13597.   KSAUDFNAME_MONO_OUT                   : TGUID = '{F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68}';
  13598.   KSAUDFNAME_STEREO_MIX                 : TGUID = '{00DFF077-96E3-11d2-AC4C-00C04F8EFB68}';
  13599.   KSAUDFNAME_MONO_MIX                   : TGUID = '{00DFF078-96E3-11d2-AC4C-00C04F8EFB68}';
  13600.   KSAUDFNAME_MONO_OUT_VOLUME            : TGUID = '{1AD247EB-96E3-11d2-AC4C-00C04F8EFB68}';
  13601.   KSAUDFNAME_MONO_OUT_MUTE              : TGUID = '{1AD247EC-96E3-11d2-AC4C-00C04F8EFB68}';
  13602.   KSAUDFNAME_STEREO_MIX_VOLUME          : TGUID = '{1AD247ED-96E3-11d2-AC4C-00C04F8EFB68}';
  13603.   KSAUDFNAME_STEREO_MIX_MUTE            : TGUID = '{22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68}';
  13604.   KSAUDFNAME_MONO_MIX_VOLUME            : TGUID = '{22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68}';
  13605.   KSAUDFNAME_MONO_MIX_MUTE              : TGUID = '{2BC31D69-96E3-11d2-AC4C-00C04F8EFB68}';
  13606.   KSAUDFNAME_MICROPHONE_BOOST           : TGUID = '{2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68}';
  13607.   KSAUDFNAME_ALTERNATE_MICROPHONE       : TGUID = '{2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68}';
  13608.   KSAUDFNAME_3D_DEPTH                   : TGUID = '{63FF5747-991F-11d2-AC4D-00C04F8EFB68}';
  13609.   KSAUDFNAME_3D_CENTER                  : TGUID = '{9F0670B4-991F-11d2-AC4D-00C04F8EFB68}';
  13610.   KSAUDFNAME_VIDEO_VOLUME               : TGUID = '{9B46E708-992A-11d2-AC4D-00C04F8EFB68}';
  13611.   KSAUDFNAME_VIDEO_MUTE                 : TGUID = '{9B46E709-992A-11d2-AC4D-00C04F8EFB68}';
  13612.   KSAUDFNAME_VIDEO                      : TGUID = '{915DAEC4-A434-11d2-AC52-00C04F8EFB68}';
  13613.   KSAUDFNAME_PEAKMETER                  : TGUID = '{57E24340-FC5B-4612-A562-72B11A29DFAE}';
  13614.  
  13615. // Internal topology node pin definitions
  13616.  
  13617.   KSNODEPIN_STANDARD_IN     = 1;
  13618.   KSNODEPIN_STANDARD_OUT    = 0;
  13619.  
  13620.   KSNODEPIN_SUM_MUX_IN      = 1; // can be >= 1
  13621.   KSNODEPIN_SUM_MUX_OUT     = 0;
  13622.  
  13623.   KSNODEPIN_DEMUX_IN        = 0;
  13624.   KSNODEPIN_DEMUX_OUT       = 1; // can be >= 1
  13625.  
  13626.   KSNODEPIN_AEC_RENDER_IN   = 1;
  13627.   KSNODEPIN_AEC_RENDER_OUT  = 0;
  13628.   KSNODEPIN_AEC_CAPTURE_IN  = 2;
  13629.   KSNODEPIN_AEC_CAPTURE_OUT = 3;
  13630.  
  13631. //===========================================================================
  13632. //===========================================================================
  13633.  
  13634.   KSMETHODSETID_Wavetable : TGUID = '{DCEF31EB-D907-11D0-9583-00C04FB925D3}';
  13635.  
  13636. type
  13637.   TKSMETHOD_WAVETABLE = (
  13638.     KSMETHOD_WAVETABLE_WAVE_ALLOC,
  13639.     KSMETHOD_WAVETABLE_WAVE_FREE,
  13640.     KSMETHOD_WAVETABLE_WAVE_FIND,
  13641.     KSMETHOD_WAVETABLE_WAVE_WRITE
  13642.   );
  13643.  
  13644.   PKSWAVETABLE_WAVE_DESC = ^TKSWAVETABLE_WAVE_DESC;
  13645.   TKSWAVETABLE_WAVE_DESC = record
  13646.     Identifier : TKSIDENTIFIER; // wave identifier
  13647.     Size       : ULONG;         // wave size
  13648.     Looped     : BOOL;          // wave looped flag
  13649.     LoopPoint  : ULONG;         // wave loop point
  13650.     InROM      : BOOL;          // wave InROM flag
  13651.     Format     : TKSDATAFORMAT; // wave format
  13652.   end;
  13653.  
  13654. //===========================================================================
  13655. //===========================================================================
  13656.  
  13657. //
  13658. //  Property sets and items
  13659. //
  13660.  
  13661. //===========================================================================
  13662. //===========================================================================
  13663.  
  13664. const
  13665.   KSPROPSETID_Itd3d : TGUID = '{6429f090-9fd9-11d0-a75b-00a0c90365e3}';
  13666.  
  13667. type
  13668.   TKSPROPERTY_ITD3D = (
  13669.     KSPROPERTY_ITD3D_PARAMS
  13670.   );
  13671.  
  13672. //===========================================================================
  13673. //===========================================================================
  13674. const
  13675.   KSPROPSETID_Hrtf3d: TGUID = '{b66decb0-a083-11d0-851e-00c04fd9baf3}';
  13676.  
  13677. type
  13678.   TKSPROPERTY_HRTF3D = (
  13679.     KSPROPERTY_HRTF3D_PARAMS,
  13680.     KSPROPERTY_HRTF3D_INITIALIZE,
  13681.     KSPROPERTY_HRTF3D_FILTER_FORMAT
  13682.   );
  13683.  
  13684. //===========================================================================
  13685. //===========================================================================
  13686. const
  13687.   KSPROPSETID_Wave_Queued   : TGUID = '{16a15b10-16f0-11d0-a195-0020afd156e4}';
  13688.  
  13689.   KSPROPERTY_WAVE_QUEUED_POSITION   = $00000001;
  13690.  
  13691.   KSMETHODSETID_Wave_Queued : TGUID = '{7432c160-8827-11cf-a102-0020afd156e4}';
  13692.  
  13693.   KSMETHOD_WAVE_QUEUED_BREAKLOOP    = $00000001;
  13694.  
  13695.   KSPROPSETID_Wave          : TGUID = '{924e54b0-630f-11cf-ada7-08003e30494a}';
  13696.  
  13697. type
  13698.   TKSPROPERTY_WAVE = (
  13699.     KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
  13700.     KSPROPERTY_WAVE_INPUT_CAPABILITIES,
  13701.     KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
  13702.     KSPROPERTY_WAVE_BUFFER,
  13703.     KSPROPERTY_WAVE_FREQUENCY,
  13704.     KSPROPERTY_WAVE_VOLUME,
  13705.     KSPROPERTY_WAVE_PAN
  13706.   );
  13707.  
  13708.   PKSWAVE_COMPATCAPS = ^TKSWAVE_COMPATCAPS;
  13709.   TKSWAVE_COMPATCAPS = record
  13710.     ulDeviceType : ULONG;
  13711.   end;
  13712.  
  13713. const
  13714.   KSWAVE_COMPATCAPS_INPUT  = $00000000;
  13715.   KSWAVE_COMPATCAPS_OUTPUT = $00000001;
  13716.  
  13717. type
  13718.   PKSWAVE_INPUT_CAPABILITIES = ^TKSWAVE_INPUT_CAPABILITIES;
  13719.   TKSWAVE_INPUT_CAPABILITIES = record
  13720.     MaximumChannelsPerConnection : ULONG;
  13721.     MinimumBitsPerSample         : ULONG;
  13722.     MaximumBitsPerSample         : ULONG;
  13723.     MinimumSampleFrequency       : ULONG;
  13724.     MaximumSampleFrequency       : ULONG;
  13725.     TotalConnections             : ULONG;
  13726.     ActiveConnections            : ULONG;
  13727.   end;
  13728.  
  13729.   PKSWAVE_OUTPUT_CAPABILITIES = ^TKSWAVE_OUTPUT_CAPABILITIES;
  13730.   TKSWAVE_OUTPUT_CAPABILITIES = record
  13731.     MaximumChannelsPerConnection      : ULONG;
  13732.     MinimumBitsPerSample              : ULONG;
  13733.     MaximumBitsPerSample              : ULONG;
  13734.     MinimumSampleFrequency            : ULONG;
  13735.     MaximumSampleFrequency            : ULONG;
  13736.     TotalConnections                  : ULONG;
  13737.     StaticConnections                 : ULONG;
  13738.     StreamingConnections              : ULONG;
  13739.     ActiveConnections                 : ULONG;
  13740.     ActiveStaticConnections           : ULONG;
  13741.     ActiveStreamingConnections        : ULONG;
  13742.     Total3DConnections                : ULONG;
  13743.     Static3DConnections               : ULONG;
  13744.     Streaming3DConnections            : ULONG;
  13745.     Active3DConnections               : ULONG;
  13746.     ActiveStatic3DConnections         : ULONG;
  13747.     ActiveStreaming3DConnections      : ULONG;
  13748.     TotalSampleMemory                 : ULONG;
  13749.     FreeSampleMemory                  : ULONG;
  13750.     LargestFreeContiguousSampleMemory : ULONG;
  13751.   end;
  13752.  
  13753.   PKSWAVE_VOLUME = ^TKSWAVE_VOLUME;
  13754.   TKSWAVE_VOLUME = record
  13755.     LeftAttenuation  : longint;
  13756.     RightAttenuation : longint;
  13757.   end;
  13758.  
  13759. const
  13760.   KSWAVE_BUFFER_ATTRIBUTEF_LOOPING = $00000001;
  13761.   KSWAVE_BUFFER_ATTRIBUTEF_STATIC  = $00000002;
  13762.  
  13763. type
  13764.   PKSWAVE_BUFFER = ^TKSWAVE_BUFFER;
  13765.   TKSWAVE_BUFFER = record
  13766.     Attributes    : ULONG;
  13767.     BufferSize    : ULONG;
  13768.     BufferAddress : Pointer;
  13769.   end;
  13770.  
  13771. //===========================================================================
  13772. //===========================================================================
  13773. const
  13774.  KSMUSIC_TECHNOLOGY_PORT      : TGUID = '{86C92E60-62E8-11CF-A5D6-28DB04C10000}';
  13775.  KSMUSIC_TECHNOLOGY_SQSYNTH   : TGUID = '{0ECF4380-62E9-11CF-A5D6-28DB04C10000}';
  13776.  KSMUSIC_TECHNOLOGY_FMSYNTH   : TGUID = '{252C5C80-62E9-11CF-A5D6-28DB04C10000}';
  13777.  KSMUSIC_TECHNOLOGY_WAVETABLE : TGUID = '{394EC7C0-62E9-11CF-A5D6-28DB04C10000}';
  13778.  KSMUSIC_TECHNOLOGY_SWSYNTH   : TGUID = '{37407736-3620-11D1-85D3-0000F8754380}';
  13779.  KSPROPSETID_WaveTable        : TGUID = '{8539E660-62E9-11CF-A5D6-28DB04C10000}';
  13780.  
  13781. type
  13782.   TKSPROPERTY_WAVETABLE = (
  13783.     KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
  13784.     KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
  13785.     KSPROPERTY_WAVETABLE_MEMORY,
  13786.     KSPROPERTY_WAVETABLE_VERSION
  13787.   );
  13788.  
  13789.   PKSDATARANGE_MUSIC = ^TKSDATARANGE_MUSIC;
  13790.   TKSDATARANGE_MUSIC = record
  13791.     DataRange   : TKSDATARANGE;
  13792.     Technology  : TGUID;
  13793.     Channels    : ULONG;
  13794.     Notes       : ULONG;
  13795.     ChannelMask : ULONG;
  13796.   end;
  13797.  
  13798. //===========================================================================
  13799. const
  13800.   KSEVENTSETID_Cyclic : TGUID = '{142C1AC0-072A-11D0-A5D6-28DB04C10000}';
  13801.  
  13802. type
  13803.   TKSEVENT_CYCLIC_TIME = (
  13804.     KSEVENT_CYCLIC_TIME_INTERVAL
  13805.   );
  13806.  
  13807. const
  13808.   KSPROPSETID_Cyclic: TGUID = '{3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000}';
  13809.  
  13810. type
  13811.   TKSPROPERTY_CYCLIC = (
  13812.     KSPROPERTY_CYCLIC_POSITION
  13813.   );
  13814.  
  13815. //===========================================================================
  13816. const
  13817.   KSEVENTSETID_AudioControlChange: TGUID = '{E85E9698-FA2F-11D1-95BD-00C04FB925D3}';
  13818.  
  13819. type
  13820.   TKSEVENT_AUDIO_CONTROL_CHANGE = (
  13821.     KSEVENT_CONTROL_CHANGE
  13822.   );
  13823.  
  13824. //===========================================================================
  13825. const
  13826.   KSEVENTSETID_LoopedStreaming : TGUID = '{4682B940-C6EF-11D0-96D8-00AA0051E51D}';
  13827.  
  13828. type
  13829.   TKSEVENT_LOOPEDSTREAMING = (
  13830.     KSEVENT_LOOPEDSTREAMING_POSITION
  13831.   );
  13832.  
  13833.   PLOOPEDSTREAMING_POSITION_EVENT_DATA = ^TLOOPEDSTREAMING_POSITION_EVENT_DATA;
  13834.   TLOOPEDSTREAMING_POSITION_EVENT_DATA = record
  13835.     KsEventData : TKSEVENTDATA;
  13836.     Position    : int64;
  13837.   end;
  13838.  
  13839. const
  13840.   KSEVENTSETID_Sysaudio : TGUID = '{04800320-4491-11D1-A050-405705C10000}';
  13841.  
  13842. type
  13843.   TKSEVENT_SYSAUDIO = (
  13844.     KSEVENT_SYSAUDIO_ADDREMOVE_DEVICE,
  13845.     KSEVENT_SYSAUDIO_CHANGE_DEVICE
  13846.   );
  13847.  
  13848. const
  13849.   KSPROPSETID_Sysaudio : TGUID = '{CBE3FAA0-CC75-11D0-B465-00001A1818E6}';
  13850.  
  13851. type
  13852.   TKSPROPERTY_SYSAUDIO = (
  13853.     KSPROPERTY_SYSAUDIO_DEVICE_Invalid,
  13854.     KSPROPERTY_SYSAUDIO_DEVICE_COUNT,
  13855.     KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME,
  13856.     KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE,
  13857.     KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME,
  13858.     KSPROPERTY_SYSAUDIO_SELECT_GRAPH,
  13859.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE,
  13860.     KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT,
  13861.     KSPROPERTY_SYSAUDIO_ALWAYS_CREATE_VIRTUAL_SOURCE,
  13862.     KSPROPERTY_SYSAUDIO_ADDREMOVE_LOCK,
  13863.     KSPROPERTY_SYSAUDIO_ADDREMOVE_UNLOCK,
  13864.     KSPROPERTY_SYSAUDIO_RENDER_PIN_INSTANCES,
  13865.     KSPROPERTY_SYSAUDIO_RENDER_CONNECTION_INDEX,
  13866.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE_ONLY,
  13867.     KSPROPERTY_SYSAUDIO_INSTANCE_INFO,
  13868.     KSPROPERTY_SYSAUDIO_PREFERRED_DEVICE
  13869.   );
  13870.  
  13871.   PSYSAUDIO_CREATE_VIRTUAL_SOURCE = ^TSYSAUDIO_CREATE_VIRTUAL_SOURCE;
  13872.   TSYSAUDIO_CREATE_VIRTUAL_SOURCE = record
  13873.     Property_   : TKSPROPERTY;
  13874.     PinCategory : TGUID;
  13875.     PinName     : TGUID;
  13876.   end;
  13877.  
  13878.   PSYSAUDIO_SELECT_GRAPH = ^TSYSAUDIO_SELECT_GRAPH;
  13879.   TSYSAUDIO_SELECT_GRAPH = record
  13880.      Property_ : TKSPROPERTY;
  13881.      PinId     : ULONG;
  13882.      NodeId    : ULONG;
  13883.      Flags     : ULONG;
  13884.      Reserved  : ULONG;
  13885.   end;
  13886.  
  13887.   PSYSAUDIO_INSTANCE_INFO = ^TSYSAUDIO_INSTANCE_INFO;
  13888.   TSYSAUDIO_INSTANCE_INFO = record
  13889.     Property_    : TKSPROPERTY;
  13890.     Flags        : ULONG;
  13891.     DeviceNumber : ULONG;
  13892.   end;
  13893.  
  13894. const
  13895.   SYSAUDIO_FLAGS_DONT_COMBINE_PINS = $00000001;
  13896.  
  13897. type
  13898.   PSYSAUDIO_PREFERRED_DEVICE = ^TSYSAUDIO_PREFERRED_DEVICE;
  13899.   TSYSAUDIO_PREFERRED_DEVICE = record
  13900.     Property_ : TKSPROPERTY;
  13901.     Flags     : ULONG;
  13902.     Index     : ULONG; // KSPROPERTY_SYSAUDIO_DEFAULT_TYPE
  13903.   end;
  13904.  
  13905. const
  13906.   SYSAUDIO_FLAGS_CLEAR_PREFERRED = $00000002;
  13907.  
  13908. type
  13909.   TKSPROPERTY_SYSAUDIO_DEFAULT_TYPE= ( // preferred device index
  13910.     KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT,
  13911.     KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
  13912.     KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
  13913.     KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
  13914.     KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
  13915.   );
  13916.  
  13917. const
  13918.    KSPROPSETID_Sysaudio_Pin : TGUID = '{A3A53220-C6E4-11D0-B465-00001A1818E6}';
  13919.  
  13920. type
  13921.   TKSPROPERTY_SYSAUDIO_PIN = (
  13922.     KSPROPERTY_SYSAUDIO_TOPOLOGY_CONNECTION_INDEX,
  13923.     KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE,
  13924.     KSPROPERTY_SYSAUDIO_PIN_VOLUME_NODE
  13925.   );
  13926.  
  13927.   PSYSAUDIO_ATTACH_VIRTUAL_SOURCE = ^TSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
  13928.   TSYSAUDIO_ATTACH_VIRTUAL_SOURCE = record
  13929.     Property_  : TKSPROPERTY;
  13930.     MixerPinId : ULONG;
  13931.     Reserved   : ULONG;
  13932.   end;
  13933.  
  13934.   PKSNODEPROPERTY = ^TKSNODEPROPERTY;
  13935.   TKSNODEPROPERTY = record
  13936.     Property_ : TKSPROPERTY;
  13937.     NodeId    : ULONG;
  13938.     Reserved  : ULONG;
  13939.   end;
  13940.  
  13941.   PKSNODEPROPERTY_AUDIO_CHANNEL = ^TKSNODEPROPERTY_AUDIO_CHANNEL;
  13942.   TKSNODEPROPERTY_AUDIO_CHANNEL = record
  13943.     NodeProperty : TKSNODEPROPERTY;
  13944.     Channel      : Longint; // value to get or set
  13945.     Reserved     : ULONG;
  13946.   end;
  13947.  
  13948.   PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC = ^TKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
  13949.   TKSNODEPROPERTY_AUDIO_DEV_SPECIFIC = record
  13950.     NodeProperty  :TKSNODEPROPERTY;
  13951.     DevSpecificId :ULONG;
  13952.     DeviceInfo    :ULONG;
  13953.     Length        :ULONG;
  13954.   end;
  13955.  
  13956.   PKSNODEPROPERTY_AUDIO_3D_LISTENER = ^TKSNODEPROPERTY_AUDIO_3D_LISTENER;
  13957.   TKSNODEPROPERTY_AUDIO_3D_LISTENER = record
  13958.     NodeProperty : TKSNODEPROPERTY;
  13959.     ListenerId   : pointer;
  13960.     Reserved     : ULONG;
  13961.   end;
  13962.  
  13963.   PKSNODEPROPERTY_AUDIO_PROPERTY = ^TKSNODEPROPERTY_AUDIO_PROPERTY;
  13964.   TKSNODEPROPERTY_AUDIO_PROPERTY = record
  13965.     NodeProperty : TKSNODEPROPERTY;
  13966.     AppContext   : Pointer;
  13967.     Length       : ULONG;
  13968.     Reserved     : ULONG;
  13969.   end;
  13970.  
  13971. //===========================================================================
  13972. const
  13973.   KSPROPSETID_Linear : TGUID = '{5A2FFE80-16B9-11D0-A5D6-28DB04C10000}';
  13974.  
  13975. type
  13976.   TKSPROPERTY_LINEAR = (
  13977.     KSPROPERTY_LINEAR_POSITION
  13978.   );
  13979.  
  13980. //===========================================================================
  13981.  
  13982. //
  13983. // Midi definitions
  13984. //
  13985.  
  13986. //
  13987. //  Formats
  13988. //
  13989. const
  13990.  KSDATAFORMAT_TYPE_MUSIC       : TGUID = '{E725D360-62CC-11CF-A5D6-28DB04C10000}';
  13991. // 'mids' == MEDIATYPE_Midi
  13992.  KSDATAFORMAT_TYPE_MIDI        : TGUID = '{7364696D-0000-0010-8000-00aa00389b71}';
  13993.  KSDATAFORMAT_SUBTYPE_MIDI     : TGUID = '{1D262760-E957-11CF-A5D6-28DB04C10000}';
  13994.  KSDATAFORMAT_SUBTYPE_MIDI_BUS : TGUID = '{2CA15FA0-6CFE-11CF-A5D6-28DB04C10000}';
  13995.  KSDATAFORMAT_SUBTYPE_RIFFMIDI : TGUID = '{4995DAF0-9EE6-11D0-A40E-00A0C9223196}';
  13996.  
  13997. //
  13998. //  KSDATAFORMAT_SUBTYPE_DIRECTMUSIC
  13999. //    see DMusicKS.h
  14000. //
  14001.  
  14002. // WARNING! This structure MUST be dword aligned
  14003. // regardless of the number of data bytes.
  14004. type
  14005.   PKSMUSICFORMAT = ^TKSMUSICFORMAT;
  14006.   TKSMUSICFORMAT = record
  14007.     TimeDeltaMs : ULONG   ;     // Delta Milliseconds from the previous midiformat
  14008.                                 // in the packet. The first midiformat in the packet
  14009.                                 // is a delta from the PTS in the KSSTREAM_HEADER.
  14010.     ByteCount   : ULONG   ;     // Number of bytes of data that follow this struct.
  14011.   end;
  14012.  
  14013. //
  14014. // This entire set of MPEG Standard/Dialect Guids are obsolete. Do not use them.
  14015. //
  14016. //====================================================================================================
  14017. //====================================================================================================
  14018. // The following official MPEG Formats, Subtypes and Specifiers are listed as required or optional
  14019. // These official MPEG GUIDs are the preferred method of supporting MPEG/AC-3 media types in new code.
  14020. // Older MPEG GUIDs should also be supported for compatibilty, but these new modes are still required.
  14021. //====================================================================================================
  14022. //====================================================================================================
  14023.  
  14024. {
  14025. This is a summary of what media types/specifiers will be required for all DVD+DSS+DVB+DTV MPEG decoders.
  14026. These media types are what the decoder driver must accept, hardware support for all of these media types
  14027. may or may not actually be provided by the decoder natively.  These media types are intended to define
  14028. the "officially" supported MPEG/AC-3 media types that all WHQL certified decoders must implement.  This
  14029. specifically includes driver and/or hardware support for all the required standards and dialects.
  14030.  
  14031. All MPEG video decoders must support all of the MPEG video modes shown as [required] below.
  14032. All MPEG audio decoders must support all of the MPEG audio modes shown as [required] below.
  14033. All AC-3 audio decoders must support all of the AC-3 audio modes shown as [required] below.
  14034. The line items shown as [optional] need not be implemented, but are possible formats that might be implemented.
  14035.  
  14036. Note that the input/output pin formats are defined by 2 or 3 GUIDs: TYPE, SUBTYPE, and maybe SPECIFIER.
  14037. The specifiers are included if the data format is a "dialect" that needs to be differentiated during decoding.
  14038. The decoder MUST be prepared to deal with ALL requests for _required_ "Standard" formats OR _required_ "Dialects".
  14039.  
  14040. STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM         [required]
  14041.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [required]
  14042.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  14043.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [required]
  14044.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  14045.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  14046.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  14047.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  14048.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  14049.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  14050.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  14051. STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET                [required]
  14052.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [optional]
  14053.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  14054.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [optional]
  14055.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  14056.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  14057.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  14058.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  14059.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [required]
  14060.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  14061.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  14062. STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER               [required]
  14063.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  14064.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  14065.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  14066.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  14067.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  14068.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  14069.  
  14070. Note that the SPECIFIER GUIDs normally identify particular versions of MPEG such as DSS and DVD.
  14071. This approach was taken to minimize the number of DSS/DVB/DVD/DTV etc. media SUBTYPES.
  14072. These specifiers are currently required to disambiguate MPEG syntax _parsing_ by the decoder
  14073. using alternate parsing routines or downloadable firmware or hardware decode settings.
  14074.  
  14075. In the future these specifiers will be extended to cover new KS MPEG flavors such as DVB and DTV.
  14076. Thus, the optional specifiers will be subject to clarification and/or definition as they are needed.
  14077.  
  14078. Important note: Per the ITU MPEG specs, MPEG 2 media may contain pure MPEG 1 syntax and
  14079. any "MPEG 2" PES packets may actually contain MPEG 1 payloads and MPEG 1 syntax.  Some MPEG
  14080. broadcasts can revert from MPEG2 to MPEG1 format data at their discretion, without warning.
  14081.  
  14082. CAUTION: Decoders MUST attempt to process MPEG data AS SOON AS POSSIBLE after reception.
  14083. In particular, elementary MPEG or MPEG PES packet streams should not be aggregated into DVD
  14084. "pack headers" internally before submission to the codec hardware if AT ALL POSSIBLE.  The
  14085. reason is that mpeg data may need to be processed immediately but there may be no additional
  14086. MPEG data forthcoming to fill up the PES packet OR DVD "pack" in a timely fashion.  This is
  14087. particularly true of MPEG dialects that utilize "repeat field signally" to reuse the last
  14088. decoded MPEG video field.
  14089.  
  14090. }
  14091.  
  14092. /////////////////////////////////////////////////////////////////////////
  14093. // The major data type GUIDs that define the data packet encapsulation //
  14094. /////////////////////////////////////////////////////////////////////////
  14095. const
  14096. // STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM
  14097.   KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM : TGUID = '{36523B11-8EE5-11d1-8CA3-0060B057664A}';
  14098.  
  14099. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET
  14100.   KSDATAFORMAT_TYPE_STANDARD_PES_PACKET        : TGUID = '{36523B12-8EE5-11d1-8CA3-0060B057664A}';
  14101.  
  14102. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER
  14103.   KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER       : TGUID = '{36523B13-8EE5-11d1-8CA3-0060B057664A}';
  14104.  
  14105. ///////////////////////////////////////////////////////////////////////////////
  14106. // The minor data subtype GUIDs that define the exact class of the data type.//
  14107. ///////////////////////////////////////////////////////////////////////////////
  14108.  
  14109. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO
  14110.   KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO    : TGUID = '{36523B21-8EE5-11d1-8CA3-0060B057664A}';
  14111.  
  14112. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO
  14113.   KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO    : TGUID = '{36523B22-8EE5-11d1-8CA3-0060B057664A}';
  14114.  
  14115. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO
  14116.   KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO    : TGUID = '{36523B23-8EE5-11d1-8CA3-0060B057664A}';
  14117.  
  14118. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO
  14119.   KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO    : TGUID = '{36523B24-8EE5-11d1-8CA3-0060B057664A}';
  14120.  
  14121. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO
  14122.   KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO      : TGUID = '{36523B25-8EE5-11d1-8CA3-0060B057664A}';
  14123.  
  14124. ///////////////////////////////////////////////////////////////////////////////
  14125. // The low-level specifier GUIDs that define the flavor of the data subtype. //
  14126. // Some SUBTYPES, notably MPEG2_VIDEO, MPEG2_AUDIO have different dialects.  //
  14127. // These specifiers are intended to be accompanied by a specifier structure. //
  14128. ///////////////////////////////////////////////////////////////////////////////
  14129.  
  14130. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO
  14131.   KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO    : TGUID = '{36523B31-8EE5-11d1-8CA3-0060B057664A}';
  14132.  
  14133. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO
  14134.   KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO    : TGUID = '{36523B32-8EE5-11d1-8CA3-0060B057664A}';
  14135.  
  14136. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO    Associated with KS_MPEGVIDEOINFO2 defined later
  14137.   KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO    : TGUID = '{36523B33-8EE5-11d1-8CA3-0060B057664A}';
  14138.  
  14139. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO    Associated with KS_MPEGAUDIOINFO defined later
  14140.   KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO    : TGUID = '{36523B34-8EE5-11d1-8CA3-0060B057664A}';
  14141.  
  14142. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO
  14143.   KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO      : TGUID = '{36523B35-8EE5-11d1-8CA3-0060B057664A}';
  14144.  
  14145. //====================================================================================================
  14146. //====================================================================================================
  14147. //                              *** COMPATIBILITY WARNING ***
  14148. // The *following* older DSS, MPEG, DVD & AC-3 GUID definitions are retained for backward compability.
  14149. // These MPEG GUIDs should also be supported for compatibilty, but the above newer modes are still required.
  14150. //====================================================================================================
  14151. //====================================================================================================
  14152.  
  14153. //
  14154. // DSS definitions
  14155. //
  14156.  
  14157.   KSDATAFORMAT_SUBTYPE_DSS_VIDEO : TGUID = '{a0af4f81-e163-11d0-bad9-00609744111a}';
  14158.   KSDATAFORMAT_SUBTYPE_DSS_AUDIO : TGUID = '{a0af4f82-e163-11d0-bad9-00609744111a}';
  14159.  
  14160. //
  14161. // End of obsolete MPEG definitions.
  14162. //
  14163.  
  14164. //
  14165. // mpeg 1 definitions
  14166. //
  14167.   KSDATAFORMAT_SUBTYPE_MPEG1Packet   : TGUID = '{e436eb80-524f-11ce-9F53-0020af0ba770}';
  14168.   KSDATAFORMAT_SUBTYPE_MPEG1Payload  : TGUID = '{e436eb81-524f-11ce-9F53-0020af0ba770}';
  14169.  
  14170. // MEDIASUBTYPE_MPEG1Video
  14171.   KSDATAFORMAT_SUBTYPE_MPEG1Video    : TGUID = '{e436eb86-524f-11ce-9f53-0020af0ba770}';
  14172.  
  14173. //FORMAT_MPEGVideo
  14174.   KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO : TGUID = '{05589f82-c356-11ce-bf01-00aa0055595a}';
  14175.  
  14176. //
  14177. // mpeg 2 definitions
  14178. //
  14179.   KSDATAFORMAT_TYPE_MPEG2_PES        : TGUID = '{e06d8020-db46-11cf-b4d1-00805f6cbbea}';
  14180.   KSDATAFORMAT_TYPE_MPEG2_PROGRAM    : TGUID = '{e06d8022-db46-11cf-b4d1-00805f6cbbea}';
  14181.   KSDATAFORMAT_TYPE_MPEG2_TRANSPORT  : TGUID = '{e06d8023-db46-11cf-b4d1-00805f6cbbea}';
  14182.   KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO   : TGUID = '{e06d8026-db46-11cf-b4d1-00805f6cbbea}';
  14183.  
  14184. // use MPEGVIDEOINFO2 (defined below) with KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO
  14185.   KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO : TGUID = '{e06d80e3-db46-11cf-b4d1-00805f6cbbea}';
  14186.  
  14187. //
  14188. // Mpeg2 video properties
  14189. //
  14190.   KSPROPSETID_Mpeg2Vid : TGUID = '{C8E11B60-0CC9-11D0-BD69-003505C103A9}';
  14191.  
  14192. type
  14193.   TKSPROPERTY_MPEG2VID = (
  14194.     KSPROPERTY_MPEG2VID_MODES,          // available output modes of decoder
  14195.     KSPROPERTY_MPEG2VID_CUR_MODE,       // current mode of the decoder
  14196.     KSPROPERTY_MPEG2VID_4_3_RECT,       // output coordinates for 4:3 source
  14197.     KSPROPERTY_MPEG2VID_16_9_RECT,      // output coordinates for 16:9 source
  14198.     KSPROPERTY_MPEG2VID_16_9_PANSCAN    // pan and scan vectors
  14199.   );
  14200.  
  14201. //
  14202. // bit field definitions for MPEG2 VIDEO mode
  14203. //
  14204. const
  14205.   KSMPEGVIDMODE_PANSCAN = $0001;
  14206.   KSMPEGVIDMODE_LTRBOX  = $0002;
  14207.   KSMPEGVIDMODE_SCALE   = $0004;
  14208.  
  14209. //
  14210. // rectangle definitions for the 4/3 and 16/9 cropping properties of
  14211. // the MPEG2Video decoder
  14212. //
  14213. type
  14214.   PKSMPEGVID_RECT = ^TKSMPEGVID_RECT;
  14215.   TKSMPEGVID_RECT = record
  14216.     StartX : ULONG;
  14217.     StartY : ULONG;
  14218.     EndX   : ULONG;
  14219.     EndY   : ULONG;
  14220.   end;
  14221.  
  14222. //
  14223. // Params for pan / scan
  14224. //
  14225.  
  14226.  
  14227. //
  14228. // MPEG2 Audio definition
  14229. //
  14230. const
  14231.   KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO   : TGUID = '{e06d802b-db46-11cf-b4d1-00805f6cbbea}';
  14232.   KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO : TGUID = '{e06d80e5-db46-11cf-b4d1-00805f6cbbea}';
  14233.  
  14234. //
  14235. // DVD LPCM Audio definition
  14236. //
  14237.  
  14238.   KSDATAFORMAT_SUBTYPE_LPCM_AUDIO    : TGUID = '{e06d8032-db46-11cf-b4d1-00805f6cbbea}';
  14239.   KSDATAFORMAT_SPECIFIER_LPCM_AUDIO  : TGUID = '{e06d80e6-db46-11cf-b4d1-00805f6cbbea}';
  14240.  
  14241. //
  14242. // AC-3 definition
  14243. //
  14244.  
  14245.   KSDATAFORMAT_SUBTYPE_AC3_AUDIO     : TGUID = '{e06d802c-db46-11cf-b4d1-00805f6cbbea}';
  14246.   KSDATAFORMAT_SPECIFIER_AC3_AUDIO   : TGUID = '{e06d80e4-db46-11cf-b4d1-00805f6cbbea}';
  14247.   KSPROPSETID_AC3                    : TGUID = '{BFABE720-6E1F-11D0-BCF2-444553540000}';
  14248.  
  14249. type
  14250.   TKSPROPERTY_AC3 = (
  14251.     KSPROPERTY_AC3_Invalid,
  14252.     KSPROPERTY_AC3_ERROR_CONCEALMENT,
  14253.     KSPROPERTY_AC3_ALTERNATE_AUDIO,
  14254.     KSPROPERTY_AC3_DOWNMIX,
  14255.     KSPROPERTY_AC3_BIT_STREAM_MODE,
  14256.     KSPROPERTY_AC3_DIALOGUE_LEVEL,
  14257.     KSPROPERTY_AC3_LANGUAGE_CODE,
  14258.     KSPROPERTY_AC3_ROOM_TYPE
  14259.   );
  14260.  
  14261.   PKSAC3_ERROR_CONCEALMENT = ^TKSAC3_ERROR_CONCEALMENT;
  14262.   TKSAC3_ERROR_CONCEALMENT = record
  14263.     fRepeatPreviousBlock : BOOL;
  14264.     fErrorInCurrentBlock : BOOL;
  14265.   end;
  14266.  
  14267.   PKSAC3_ALTERNATE_AUDIO = ^TKSAC3_ALTERNATE_AUDIO;
  14268.   TKSAC3_ALTERNATE_AUDIO = record
  14269.     fStereo  : BOOL;
  14270.     DualMode : ULONG;
  14271.   end;
  14272.  
  14273. const
  14274.   KSAC3_ALTERNATE_AUDIO_1    = 1;
  14275.   KSAC3_ALTERNATE_AUDIO_2    = 2;
  14276.   KSAC3_ALTERNATE_AUDIO_BOTH = 3;
  14277.  
  14278. type
  14279.   PKSAC3_DOWNMIX = ^TKSAC3_DOWNMIX;
  14280.   TKSAC3_DOWNMIX = record
  14281.     fDownMix       : BOOL;
  14282.     fDolbySurround : BOOL;
  14283.   end;
  14284.  
  14285.   PKSAC3_BIT_STREAM_MODE = ^TKSAC3_BIT_STREAM_MODE;
  14286.   TKSAC3_BIT_STREAM_MODE = record
  14287.     BitStreamMode : Longint;
  14288.   end;
  14289.  
  14290. const
  14291.   KSAC3_SERVICE_MAIN_AUDIO        = 0;
  14292.   KSAC3_SERVICE_NO_DIALOG         = 1;
  14293.   KSAC3_SERVICE_VISUALLY_IMPAIRED = 2;
  14294.   KSAC3_SERVICE_HEARING_IMPAIRED  = 3;
  14295.   KSAC3_SERVICE_DIALOG_ONLY       = 4;
  14296.   KSAC3_SERVICE_COMMENTARY        = 5;
  14297.   KSAC3_SERVICE_EMERGENCY_FLASH   = 6;
  14298.   KSAC3_SERVICE_VOICE_OVER        = 7;
  14299.  
  14300. type
  14301.   PKSAC3_DIALOGUE_LEVEL = ^TKSAC3_DIALOGUE_LEVEL;
  14302.   TKSAC3_DIALOGUE_LEVEL = record
  14303.     DialogueLevel : ULONG;
  14304.   end;
  14305.  
  14306.   PKSAC3_ROOM_TYPE = ^TKSAC3_ROOM_TYPE;
  14307.   TKSAC3_ROOM_TYPE = record
  14308.     fLargeRoom : BOOL;
  14309.   end;
  14310.  
  14311. //
  14312. // DTS and SDDS definitions (media subtype GUIDs)
  14313. //
  14314. const
  14315. KSDATAFORMAT_SUBTYPE_DTS_AUDIO  : TGUID = '{e06d8033-db46-11cf-b4d1-00805f6cbbea}';
  14316. KSDATAFORMAT_SUBTYPE_SDDS_AUDIO : TGUID = '{e06d8034-db46-11cf-b4d1-00805f6cbbea}';
  14317.  
  14318. //
  14319. // audio decoder output properties
  14320. //
  14321.  
  14322. KSPROPSETID_AudioDecoderOut     : TGUID = '{6ca6e020-43bd-11d0-bd6a-003505c103a9}';
  14323.  
  14324. type
  14325.   TKSPROPERTY_AUDDECOUT = (
  14326.     KSPROPERTY_AUDDECOUT_MODES,        // available output modes of decoder
  14327.     KSPROPERTY_AUDDECOUT_CUR_MODE      // current mode of the decoder
  14328.   );
  14329.  
  14330. const
  14331.   KSAUDDECOUTMODE_STEREO_ANALOG = $0001;
  14332.   KSAUDDECOUTMODE_PCM_51        = $0002;
  14333.   KSAUDDECOUTMODE_SPDIFF        = $0004;
  14334.  
  14335. //
  14336. // subpicture definition
  14337. //
  14338.  
  14339.   KSDATAFORMAT_SUBTYPE_SUBPICTURE : TGUID = '{e06d802d-db46-11cf-b4d1-00805f6cbbea}';
  14340.   KSPROPSETID_DvdSubPic           : TGUID = '{ac390460-43af-11d0-bd6a-003505c103a9}';
  14341.  
  14342. type
  14343.   TKSPROPERTY_DVDSUBPIC = (
  14344.     KSPROPERTY_DVDSUBPIC_PALETTE,
  14345.     KSPROPERTY_DVDSUBPIC_HLI,
  14346.     KSPROPERTY_DVDSUBPIC_COMPOSIT_ON  // TRUE for subpicture is displayed
  14347.   );
  14348.  
  14349.   PKS_DVD_YCrCb = ^TKS_DVD_YCrCb;
  14350.   TKS_DVD_YCrCb = record
  14351.     Reserved : byte;
  14352.     Y        : byte;
  14353.     Cr       : byte;
  14354.     Cb       : byte;
  14355.   end;
  14356.  
  14357. // The KS_DVD_YUV structure is now superseded by KS_DVD_YCrCb above and is
  14358. //   here for backward compatibility only
  14359.  
  14360.   PKS_DVD_YUV = ^TKS_DVD_YUV;
  14361.   TKS_DVD_YUV = record
  14362.     Reserved : byte;
  14363.     Y        : byte;
  14364.     V        : byte;
  14365.     U        : byte;
  14366.   end;
  14367.  
  14368.   PKSPROPERTY_SPPAL = ^TKSPROPERTY_SPPAL;
  14369.   TKSPROPERTY_SPPAL = record
  14370.     sppal : array[0..15] of TKS_DVD_YUV;
  14371.   end;
  14372.  
  14373.   PKS_COLCON = ^TKS_COLCON;
  14374.   TKS_COLCON = record
  14375.     emph1col : byte; //:4;
  14376.     emph2col : byte; //:4;
  14377.     backcol  : byte; //:4;
  14378.     patcol   : byte; //:4;
  14379.     emph1con : byte; //:4;
  14380.     emph2con : byte; //:4;
  14381.     backcon  : byte; //:4;
  14382.     patcon   : byte; //:4;
  14383.   end;
  14384.  
  14385.   PKSPROPERTY_SPHLI = ^TKSPROPERTY_SPHLI;
  14386.   TKSPROPERTY_SPHLI = record
  14387.     HLISS    : WORD;
  14388.     Reserved : WORD;
  14389.     StartPTM : ULONG;      // start presentation time in x/90000
  14390.     EndPTM   : ULONG;      // end PTM in x/90000
  14391.     StartX   : WORD;
  14392.     StartY   : WORD;
  14393.     StopX    : WORD;
  14394.     StopY    : WORD;
  14395.     ColCon   : TKS_COLCON; // color contrast description (4 bytes as given in HLI)
  14396.   end;
  14397.  
  14398.   PKSPROPERTY_COMPOSIT_ON = ^TKSPROPERTY_COMPOSIT_ON;
  14399.   TKSPROPERTY_COMPOSIT_ON = BOOL;
  14400.  
  14401. const
  14402.   KSPROPSETID_CopyProt : TGUID = '{0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3}';
  14403.  
  14404. type
  14405.   TKSPROPERTY_COPYPROT = TOleEnum;
  14406. const
  14407.     KSPROPERTY_DVDCOPY_CHLG_KEY       = $01;
  14408.     KSPROPERTY_DVDCOPY_DVD_KEY1       = $02;
  14409.     KSPROPERTY_DVDCOPY_DEC_KEY2       = $03;
  14410.     KSPROPERTY_DVDCOPY_TITLE_KEY      = $04;
  14411.     KSPROPERTY_COPY_MACROVISION       = $05;
  14412.     KSPROPERTY_DVDCOPY_REGION         = $06;
  14413.     KSPROPERTY_DVDCOPY_SET_COPY_STATE = $07;
  14414.     KSPROPERTY_DVDCOPY_DISC_KEY       = $80;
  14415.  
  14416. type
  14417.   PKS_DVDCOPY_CHLGKEY = ^TKS_DVDCOPY_CHLGKEY;
  14418.   TKS_DVDCOPY_CHLGKEY = record
  14419.    ChlgKey   : array[0..9] of BYTE;
  14420.    Reserved  : array[0..1] of BYTE;
  14421.   end;
  14422.  
  14423.   PKS_DVDCOPY_BUSKEY = ^TKS_DVDCOPY_BUSKEY;
  14424.   TKS_DVDCOPY_BUSKEY = record
  14425.     BusKey   : array[0..4] of BYTE;
  14426.     Reserved : array[0..0] of BYTE;
  14427.   end;
  14428.  
  14429.   PKS_DVDCOPY_DISCKEY = ^TKS_DVDCOPY_DISCKEY;
  14430.   TKS_DVDCOPY_DISCKEY = record
  14431.     DiscKey : array[0..2047] of BYTE;
  14432.   end;
  14433.  
  14434.   PKS_DVDCOPY_REGION = ^TKS_DVDCOPY_REGION;
  14435.   TKS_DVDCOPY_REGION = record
  14436.     Reserved   : UCHAR;
  14437.     RegionData : UCHAR;
  14438.     Reserved2  : array[0..1] of UCHAR;
  14439.   end;
  14440.  
  14441.   PKS_DVDCOPY_TITLEKEY = ^TKS_DVDCOPY_TITLEKEY;
  14442.   TKS_DVDCOPY_TITLEKEY = record
  14443.     KeyFlags   : ULONG;
  14444.     ReservedNT : array[0..1] of ULONG;
  14445.     TitleKey   : array[0..5] of UCHAR;
  14446.     Reserved   : array[0..1] of UCHAR;
  14447.   end;
  14448.  
  14449.   PKS_COPY_MACROVISION = ^TKS_COPY_MACROVISION;
  14450.   TKS_COPY_MACROVISION = record
  14451.     MACROVISIONLevel : ULONG;
  14452.   end;
  14453.  
  14454.   PKS_DVDCOPY_SET_COPY_STATE = ^TKS_DVDCOPY_SET_COPY_STATE;
  14455.   TKS_DVDCOPY_SET_COPY_STATE = record
  14456.     DVDCopyState : ULONG;
  14457.   end;
  14458.  
  14459.   TKS_DVDCOPYSTATE = (
  14460.     KS_DVDCOPYSTATE_INITIALIZE,         // indicates we are starting a full
  14461.                                         // copy protection sequence.
  14462.     KS_DVDCOPYSTATE_INITIALIZE_TITLE,   // indicates we are starting a title
  14463.                                         // key copy protection sequence
  14464.     KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  14465.     KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  14466.     KS_DVDCOPYSTATE_DONE
  14467.   );
  14468.  
  14469.   PKS_COPY_MACROVISION_LEVEL = ^TKS_COPY_MACROVISION_LEVEL;
  14470.   TKS_COPY_MACROVISION_LEVEL = (
  14471.     KS_MACROVISION_DISABLED,
  14472.     KS_MACROVISION_LEVEL1,
  14473.     KS_MACROVISION_LEVEL2,
  14474.     KS_MACROVISION_LEVEL3
  14475.   );
  14476.  
  14477. //
  14478. // CGMS Copy Protection Flags
  14479. //
  14480. const
  14481.   KS_DVD_CGMS_RESERVED_MASK     = $00000078;
  14482.  
  14483.   KS_DVD_CGMS_COPY_PROTECT_MASK = $00000018;
  14484.   KS_DVD_CGMS_COPY_PERMITTED    = $00000000;
  14485.   KS_DVD_CGMS_COPY_ONCE         = $00000010;
  14486.   KS_DVD_CGMS_NO_COPY           = $00000018;
  14487.  
  14488.   KS_DVD_COPYRIGHT_MASK         = $00000040;
  14489.   KS_DVD_NOT_COPYRIGHTED        = $00000000;
  14490.   KS_DVD_COPYRIGHTED            = $00000040;
  14491.  
  14492.   KS_DVD_SECTOR_PROTECT_MASK    = $00000020;
  14493.   KS_DVD_SECTOR_NOT_PROTECTED   = $00000000;
  14494.   KS_DVD_SECTOR_PROTECTED       = $00000020;
  14495.  
  14496. //===========================================================================
  14497. // The following MUST match the structures in WinGDI.h and AMVideo.h
  14498. //===========================================================================
  14499.  
  14500. KSCATEGORY_TVTUNER                 : TGUID = '{a799a800-a46d-11d0-a18c-00a02401dcd4}';
  14501. KSCATEGORY_CROSSBAR                : TGUID = '{a799a801-a46d-11d0-a18c-00a02401dcd4}';
  14502. KSCATEGORY_TVAUDIO                 : TGUID = '{a799a802-a46d-11d0-a18c-00a02401dcd4}';
  14503. KSCATEGORY_VPMUX                   : TGUID = '{a799a803-a46d-11d0-a18c-00a02401dcd4}';
  14504. KSCATEGORY_VBICODEC                : TGUID = '{07dad660-22f1-11d1-a9f4-00c04fbbde8f}';
  14505.  
  14506. // SUBTYPE_VPVideo
  14507. KSDATAFORMAT_SUBTYPE_VPVideo       : TGUID = '{5a9b6a40-1a22-11d1-bad9-00609744111a}';
  14508.  
  14509. // SUBTYPE_VPVBI
  14510. KSDATAFORMAT_SUBTYPE_VPVBI         : TGUID = '{5a9b6a41-1a22-11d1-bad9-00609744111a}';
  14511.  
  14512. // FORMAT_VideoInfo
  14513. KSDATAFORMAT_SPECIFIER_VIDEOINFO   : TGUID = '{05589f80-c356-11ce-bf01-00aa0055595a}';
  14514.  
  14515. // FORMAT_VideoInfo2
  14516. KSDATAFORMAT_SPECIFIER_VIDEOINFO2  : TGUID = '{f72a76A0-eb0a-11d0-ace4-0000c0cc16ba}';
  14517.  
  14518. // MEDIATYPE_AnalogVideo
  14519. KSDATAFORMAT_TYPE_ANALOGVIDEO      : TGUID = '{0482dde1-7817-11cf-8a03-00aa006ecb65}';
  14520.  
  14521. // FORMAT_AnalogVideo
  14522. KSDATAFORMAT_SPECIFIER_ANALOGVIDEO : TGUID = '{0482dde0-7817-11cf-8a03-00aa006ecb65}';
  14523.  
  14524. // FORMAT_VBI
  14525. KSDATAFORMAT_SPECIFIER_VBI         : TGUID = '{f72a76e0-eb0a-11d0-ace4-0000c0cc16ba}';
  14526.  
  14527. // MEDIATYPE_VBI
  14528. KSDATAFORMAT_TYPE_VBI              : TGUID = '{f72a76e1-eb0a-11d0-ace4-0000c0cc16ba}';
  14529.  
  14530. // SUBTYPE_RAW8
  14531. KSDATAFORMAT_SUBTYPE_RAW8          : TGUID = '{ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf}';
  14532.  
  14533. // MEDIASUBTYPE_CC
  14534. KSDATAFORMAT_SUBTYPE_CC            : TGUID = '{33214CC1-011F-11D2-B4B1-00A0D102CFBE}';
  14535.  
  14536. // MEDIASUBTYPE_NABTS
  14537. KSDATAFORMAT_SUBTYPE_NABTS         : TGUID = '{f72a76e2-eb0a-11d0-ace4-0000c0cc16ba}';
  14538.  
  14539. // MEDIASUBTYPE_TELETEXT
  14540. KSDATAFORMAT_SUBTYPE_TELETEXT      : TGUID = '{f72a76e3-eb0a-11d0-ace4-0000c0cc16ba}';
  14541.  
  14542.  
  14543. // constants for the biCompression field
  14544.   KS_BI_RGB       = 0;
  14545.   KS_BI_RLE8      = 1;
  14546.   KS_BI_RLE4      = 2;
  14547.   KS_BI_BITFIELDS = 3;
  14548.  
  14549. type
  14550.   PKS_RGBQUAD = ^TKS_RGBQUAD;
  14551.   TKS_RGBQUAD = record // rgbq
  14552.     rgbBlue     : BYTE;
  14553.     rgbGreen    : BYTE;
  14554.     rgbRed      : BYTE;
  14555.     rgbReserved : BYTE;
  14556.   end;
  14557.  
  14558. // constants for palettes
  14559. const
  14560.   KS_iPALETTE_COLORS  = 256; // Maximum colours in palette
  14561.   KS_iEGA_COLORS      = 16;  // Number colours in EGA palette
  14562.   KS_iMASK_COLORS     = 3;   // Maximum three components
  14563.   KS_iTRUECOLOR       = 16;  // Minimum true colour device
  14564.   KS_iRED             = 0;   // Index position for RED mask
  14565.   KS_iGREEN           = 1;   // Index position for GREEN mask
  14566.   KS_iBLUE            = 2;   // Index position for BLUE mask
  14567.   KS_iPALETTE         = 8;   // Maximum colour depth using a palette
  14568.   KS_iMAXBITS         = 8;   // Maximum bits per colour component
  14569.   KS_SIZE_EGA_PALETTE = (KS_iEGA_COLORS * sizeof(TKS_RGBQUAD));
  14570.   KS_SIZE_PALETTE     = (KS_iPALETTE_COLORS * sizeof(TKS_RGBQUAD));
  14571.  
  14572. type
  14573.   PKS_BITMAPINFOHEADER = ^TKS_BITMAPINFOHEADER;
  14574.   TKS_BITMAPINFOHEADER = record
  14575.     biSize          : DWORD;
  14576.     biWidth         : longint;
  14577.     biHeight        : longint;
  14578.     biPlanes        : WORD;
  14579.     biBitCount      : WORD;
  14580.     biCompression   : DWORD;
  14581.     biSizeImage     : DWORD;
  14582.     biXPelsPerMeter : longint;
  14583.     biYPelsPerMeter : longint;
  14584.     biClrUsed       : DWORD;
  14585.     biClrImportant  : DWORD;
  14586.   end;
  14587.  
  14588. // Used for true colour images that also have a palette
  14589.  
  14590.   PKS_TRUECOLORINFO = ^TKS_TRUECOLORINFO;
  14591.   TKS_TRUECOLORINFO = record
  14592.     dwBitMasks : array[0..KS_iMASK_COLORS-1]    of DWORD;
  14593.     bmiColors  : array[0..KS_iPALETTE_COLORS-1] of TKS_RGBQUAD;
  14594.   end;
  14595.  
  14596. //  KS_WIDTHBYTES(bits)  ((DWORD)(((bits)+31) & (~31)) / 8)
  14597. //  KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
  14598. //  KS__DIBSIZE(bi)      (KS_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
  14599. //  KS_DIBSIZE(bi)       ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
  14600.  
  14601. //  typedef  REFERENCE_TIME: int64;
  14602.  
  14603. // The BITMAPINFOHEADER contains all the details about the video stream such
  14604. // as the actual image dimensions and their pixel depth. A source filter may
  14605. // also request that the sink take only a section of the video by providing a
  14606. // clipping rectangle in rcSource. In the worst case where the sink filter
  14607. // forgets to check this on connection it will simply render the whole thing
  14608. // which isn't a disaster. Ideally a sink filter will check the rcSource and
  14609. // if it doesn't support image extraction and the rectangle is not empty then
  14610. // it will reject the connection. A filter should use SetRectEmpty to reset a
  14611. // rectangle to all zeroes (and IsRectEmpty to later check the rectangle).
  14612. // The rcTarget specifies the destination rectangle for the video, for most
  14613. // source filters they will set this to all zeroes, a downstream filter may
  14614. // request that the video be placed in a particular area of the buffers it
  14615. // supplies in which case it will call QueryAccept with a non empty target
  14616.  
  14617.   PKS_VIDEOINFOHEADER = ^TKS_VIDEOINFOHEADER;
  14618.   TKS_VIDEOINFOHEADER = record
  14619.     rcSource        : TRECT;               // The bit we really want to use
  14620.     rcTarget        : TRECT;               // Where the video should go
  14621.     dwBitRate       : DWORD;               // Approximate bit data rate
  14622.     dwBitErrorRate  : DWORD;               // Bit error rate for this stream
  14623.     AvgTimePerFrame : TREFERENCE_TIME;     // Average time per frame (100ns units)
  14624.     bmiHeader       : TKS_BITMAPINFOHEADER;
  14625.   end;
  14626.  
  14627. // !!! WARNING !!!
  14628. // DO NOT use the following structure unless you are sure that the BITMAPINFOHEADER
  14629. // has a normal biSize == sizeof(BITMAPINFOHEADER) !
  14630. // !!! WARNING !!!
  14631.  
  14632.   PKS_VIDEOINFO = ^TKS_VIDEOINFO;
  14633.   TKS_VIDEOINFO = record
  14634.     rcSource        : TRECT;           // The bit we really want to use
  14635.     rcTarget        : TRECT;           // Where the video should go
  14636.     dwBitRate       : DWORD;           // Approximate bit data rate
  14637.     dwBitErrorRate  : DWORD;           // Bit error rate for this stream
  14638.     AvgTimePerFrame : TREFERENCE_TIME; // Average time per frame (100ns units)
  14639.     bmiHeader       : TKS_BITMAPINFOHEADER;
  14640.     case integer of
  14641.       0: (bmiColors     : array[0..KS_iPALETTE_COLORS-1] of TKS_RGBQUAD); // Colour palette
  14642.       1: (dwBitMasks    : array[0..KS_iMASK_COLORS-1] of DWORD);          // True colour masks
  14643.       2: (TrueColorInfo : TKS_TRUECOLORINFO);                             // Both of the above
  14644.   end;
  14645.  
  14646. const
  14647.   KS_SIZE_MASKS     = (KS_iMASK_COLORS * sizeof(DWORD));
  14648. //  KS_SIZE_PREHEADER = (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
  14649.  
  14650. // For normal size
  14651. // #define KS_SIZE_VIDEOHEADER (sizeof(KS_BITMAPINFOHEADER) + KS_SIZE_PREHEADER)
  14652. // !!! for abnormal biSizes
  14653. //#define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
  14654.  
  14655. // VBI
  14656. // Used for NABTS, CC, Intercast,
  14657. type
  14658.   PKS_VBIINFOHEADER = ^TKS_VBIINFOHEADER;
  14659.   TKS_VBIINFOHEADER = record
  14660.     StartLine           : ULONG; // inclusive
  14661.     EndLine             : ULONG; // inclusive
  14662.     SamplingFrequency   : ULONG; // Hz.
  14663.     MinLineStartTime    : ULONG; // microSec * 100 from HSync LE
  14664.     MaxLineStartTime    : ULONG; // microSec * 100 from HSync LE
  14665.     ActualLineStartTime : ULONG; // microSec * 100 from HSync LE
  14666.     ActualLineEndTime   : ULONG; // microSec * 100 from HSync LE
  14667.     VideoStandard       : ULONG; // KS_AnalogVideoStandard*
  14668.     SamplesPerLine      : ULONG;
  14669.     StrideInBytes       : ULONG; // May be > SamplesPerLine
  14670.     BufferSize          : ULONG; // Bytes
  14671.   end;
  14672.  
  14673. // VBI Sampling Rates
  14674. const
  14675.   KS_VBIDATARATE_NABTS         = 5727272;
  14676.   KS_VBIDATARATE_CC            = 503493;    // ~= 1/1.986125e-6
  14677.   KS_VBISAMPLINGRATE_4X_NABTS  = longint(4*KS_VBIDATARATE_NABTS);
  14678.   KS_VBISAMPLINGRATE_47X_NABTS = longint(27000000);
  14679.   KS_VBISAMPLINGRATE_5X_NABTS  = longint(5*KS_VBIDATARATE_NABTS);
  14680.  
  14681.   KS_47NABTS_SCALER = KS_VBISAMPLINGRATE_47X_NABTS/KS_VBIDATARATE_NABTS;
  14682.  
  14683. // Analog video variant - Use this when the format is FORMAT_AnalogVideo
  14684. //
  14685. // rcSource defines the portion of the active video signal to use
  14686. // rcTarget defines the destination rectangle
  14687. //    both of the above are relative to the dwActiveWidth and dwActiveHeight fields
  14688. // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
  14689. // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM  (but could change for HDTV)
  14690. type
  14691.   PKS_ANALOGVIDEOINFO = ^TKS_ANALOGVIDEOINFO;
  14692.   TKS_ANALOGVIDEOINFO = record
  14693.     rcSource        : TRECT;           // Width max is 720, height varies w/ TransmissionStd
  14694.     rcTarget        : TRECT;           // Where the video should go
  14695.     dwActiveWidth   : DWORD;           // Always 720 (CCIR-601 active samples per line)
  14696.     dwActiveHeight  : DWORD;           // 483 for NTSC, 575 for PAL/SECAM
  14697.     AvgTimePerFrame : TREFERENCE_TIME; // Normal ActiveMovie units (100 nS)
  14698.   end;
  14699.  
  14700. //===========================================================================
  14701. // Data packet passed on Analog video stream channel change
  14702. //===========================================================================
  14703. const
  14704.   KS_TVTUNER_CHANGE_BEGIN_TUNE = $0001;  // Starting a tuning operation
  14705.   KS_TVTUNER_CHANGE_END_TUNE   = $0002;  // Ending a tuning operation
  14706.  
  14707. type
  14708.   PKS_TVTUNER_CHANGE_INFO = ^TKS_TVTUNER_CHANGE_INFO;
  14709.   TKS_TVTUNER_CHANGE_INFO = record
  14710.    dwFlags               : DWORD; // KS_TVTUNER_CHANGE_*
  14711.    dwCountryCode         : DWORD;
  14712.    dwAnalogVideoStandard : DWORD; // KS_AnalogVideoStandard
  14713.    dwChannel             : DWORD;
  14714.   end;
  14715.  
  14716. //===========================================================================
  14717. // Video format blocks
  14718. //===========================================================================
  14719.  
  14720.  TKS_MPEG2Level = (
  14721.     KS_MPEG2Level_Low,
  14722.     KS_MPEG2Level_Main,
  14723.     KS_MPEG2Level_High1440,
  14724.     KS_MPEG2Level_High
  14725.   );
  14726.  
  14727.   TKS_MPEG2Profile = (
  14728.     KS_MPEG2Profile_Simple,
  14729.     KS_MPEG2Profile_Main,
  14730.     KS_MPEG2Profile_SNRScalable,
  14731.     KS_MPEG2Profile_SpatiallyScalable,
  14732.     KS_MPEG2Profile_High
  14733.   );
  14734.  
  14735. const
  14736.   KS_INTERLACE_IsInterlaced          = $00000001;  // if 0, other interlace bits are irrelevent
  14737.   KS_INTERLACE_1FieldPerSample       = $00000002;  // else 2 fields per media sample
  14738.   KS_INTERLACE_Field1First           = $00000004;  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  14739.   KS_INTERLACE_UNUSED                = $00000008;  //
  14740.   KS_INTERLACE_FieldPatternMask      = $00000030;  // use this mask with AMINTERLACE_FieldPat*
  14741.   KS_INTERLACE_FieldPatField1Only    = $00000000;  // Data never contains a Field2
  14742.   KS_INTERLACE_FieldPatField2Only    = $00000010;  // Data never contains a Field1
  14743.   KS_INTERLACE_FieldPatBothRegular   = $00000020;  // There will be a Field2 for every Field1 (required for Weave?)
  14744.   KS_INTERLACE_FieldPatBothIrregular = $00000030;  // Random pattern of Field1s and Field2s
  14745.   KS_INTERLACE_DisplayModeMask       = $000000c0;
  14746.   KS_INTERLACE_DisplayModeBobOnly    = $00000000;
  14747.   KS_INTERLACE_DisplayModeWeaveOnly  = $00000040;
  14748.   KS_INTERLACE_DisplayModeBobOrWeave = $00000080;
  14749.  
  14750.  
  14751.  
  14752.   KS_MPEG2_DoPanScan           = $00000001;  //if set, the MPEG-2 video decoder should crop output image
  14753.                                              //  based on pan-scan vectors in picture_display_extension
  14754.                                              //  and change the picture aspect ratio accordingly.
  14755.   KS_MPEG2_DVDLine21Field1     = $00000002;  //if set, the MPEG-2 decoder must be able to produce an output
  14756.                                              //  pin for DVD style closed caption data found in GOP layer of field 1
  14757.   KS_MPEG2_DVDLine21Field2     = $00000004;  //if set, the MPEG-2 decoder must be able to produce an output
  14758.                                              //  pin for DVD style closed caption data found in GOP layer of field 2
  14759.   KS_MPEG2_SourceIsLetterboxed = $00000008;  //if set, indicates that black bars have been encoded in the top
  14760.                                              //  and bottom of the video.
  14761.   KS_MPEG2_FilmCameraMode      = $00000010;  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  14762.                                              //  indicates that "camera mode" was used.
  14763.   KS_MPEG2_LetterboxAnalogOut  = $00000020;  //if set and this stream is sent to an analog output, it should
  14764.                      //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  14765.   KS_MPEG2_DSS_UserData        = $00000040;  //if set, the MPEG-2 decoder must process DSS style user data
  14766.   KS_MPEG2_DVB_UserData        = $00000080;  //if set, the MPEG-2 decoder must process DVB style user data
  14767.   KS_MPEG2_27MhzTimebase       = $00000100;  //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  14768.  
  14769. type
  14770.   PKS_VIDEOINFOHEADER2 = ^TKS_VIDEOINFOHEADER2;
  14771.   TKS_VIDEOINFOHEADER2 = record
  14772.     rcSource           : TRECT;
  14773.     rcTarget           : TRECT;
  14774.     dwBitRate          : DWORD;
  14775.     dwBitErrorRate     : DWORD;
  14776.     AvgTimePerFrame    : TREFERENCE_TIME;
  14777.     dwInterlaceFlags   : DWORD; // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  14778.     dwCopyProtectFlags : DWORD; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  14779.     dwPictAspectRatioX : DWORD; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
  14780.     dwPictAspectRatioY : DWORD; // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  14781.     dwReserved1        : DWORD; // must be 0; reject connection otherwise
  14782.     dwReserved2        : DWORD; // must be 0; reject connection otherwise
  14783.     bmiHeader          : TKS_BITMAPINFOHEADER;
  14784.   end;
  14785.  
  14786.   PKS_MPEG1VIDEOINFO = ^TKS_MPEG1VIDEOINFO;
  14787.   TKS_MPEG1VIDEOINFO = record
  14788.     hdr              : TKS_VIDEOINFOHEADER ; // Compatible with VIDEOINFO
  14789.     dwStartTimeCode  : DWORD ;               // 25-bit Group of pictures time code at start of data
  14790.     cbSequenceHeader : DWORD ;               // Length in bytes of bSequenceHeader
  14791.     bSequenceHeader  : array[0..0] of BYTE;  // Sequence header including quantization matrices if any
  14792.   end;
  14793.  
  14794. const
  14795.   KS_MAX_SIZE_MPEG1_SEQUENCE_INFO = 140;
  14796. //  KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  14797. //  KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  14798.  
  14799. type
  14800.   PKS_MPEGVIDEOINFO2 = ^TKS_MPEGVIDEOINFO2;
  14801.   TKS_MPEGVIDEOINFO2 = record
  14802.     hdr              : TKS_VIDEOINFOHEADER2;
  14803.     dwStartTimeCode  : DWORD;                //  ?? not used for DVD ??
  14804.     cbSequenceHeader : DWORD;                // is 0 for DVD (no sequence header)
  14805.     dwProfile        : DWORD;                // use enum MPEG2Profile
  14806.     dwLevel          : DWORD;                // use enum MPEG2Level
  14807.     dwFlags          : DWORD;                // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  14808.     bSequenceHeader  : array[0..0] of DWORD; // DWORD instead of Byte for alignment purposes
  14809.                                              //   For MPEG-2, if a sequence_header is included, the sequence_extension
  14810.                                              //   should also be included
  14811.   end;
  14812.  
  14813. const
  14814. //  KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  14815. //  KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  14816.  
  14817. //===========================================================================
  14818. // Audio format blocks
  14819. //===========================================================================
  14820.  
  14821. //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  14822.   KS_MPEGAUDIOINFO_27MhzTimebase = $00000001;
  14823.  
  14824. type
  14825.   PKS_MPEGAUDIOINFO = ^TKS_MPEGAUDIOINFO;
  14826.   TKS_MPEGAUDIOINFO = record
  14827.     dwFlags     : DWORD; // use KS_MPEGAUDIOINFO_* defines.  Reject connection if undefined bits are not 0
  14828.     dwReserved1 : DWORD; // must be 0; reject connection otherwise
  14829.     dwReserved2 : DWORD; // must be 0; reject connection otherwise
  14830.     dwReserved3 : DWORD; // must be 0; reject connection otherwise
  14831.   end;
  14832.  
  14833. //===========================================================================
  14834. // Video DATAFORMATs
  14835. //===========================================================================
  14836.  
  14837.   PKS_DATAFORMAT_VIDEOINFOHEADER = ^TKS_DATAFORMAT_VIDEOINFOHEADER;
  14838.   TKS_DATAFORMAT_VIDEOINFOHEADER = record
  14839.     DataFormat      : TKSDATAFORMAT;
  14840.     VideoInfoHeader : TKS_VIDEOINFOHEADER;
  14841.   end;
  14842.  
  14843.   PKS_DATAFORMAT_VIDEOINFOHEADER2 = ^TKS_DATAFORMAT_VIDEOINFOHEADER2;
  14844.   TKS_DATAFORMAT_VIDEOINFOHEADER2 = record
  14845.     DataFormat       : TKSDATAFORMAT;
  14846.     VideoInfoHeader2 : TKS_VIDEOINFOHEADER2;
  14847.   end;
  14848.  
  14849.   PKS_DATAFORMAT_VIDEOINFO_PALETTE = ^TKS_DATAFORMAT_VIDEOINFO_PALETTE;
  14850.   TKS_DATAFORMAT_VIDEOINFO_PALETTE = record
  14851.     DataFormat : TKSDATAFORMAT;
  14852.     VideoInfo  : TKS_VIDEOINFO;
  14853.   end;
  14854.  
  14855.   PKS_DATAFORMAT_VBIINFOHEADER = ^TKS_DATAFORMAT_VBIINFOHEADER;
  14856.   TKS_DATAFORMAT_VBIINFOHEADER = record
  14857.     DataFormat    : TKSDATAFORMAT;
  14858.     VBIInfoHeader : TKS_VBIINFOHEADER;
  14859.   end;
  14860.  
  14861.   PKS_VIDEO_STREAM_CONFIG_CAPS = ^TKS_VIDEO_STREAM_CONFIG_CAPS;
  14862.   TKS_VIDEO_STREAM_CONFIG_CAPS = record
  14863.     guid               : TGUID;   // will be MEDIATYPE_Video
  14864.     VideoStandard      : ULONG;   // logical OR of all AnalogVideoStandards
  14865.                                   // supported
  14866.     InputSize          : TSIZE;   // the inherent size of the incoming signal
  14867.                                   // (every pixel unique)
  14868.     MinCroppingSize    : TSIZE;   // smallest rcSrc cropping rect allowed
  14869.     MaxCroppingSize    : TSIZE;   // largest rcSrc cropping rect allowed
  14870.     CropGranularityX   : integer; // granularity of cropping size
  14871.     CropGranularityY   : integer;
  14872.     CropAlignX         : integer; // alignment of cropping rect
  14873.     CropAlignY         : integer;
  14874.     MinOutputSize      : TSIZE;   // smallest bitmap stream can produce
  14875.     MaxOutputSize      : TSIZE;   // largest  bitmap stream can produce
  14876.     OutputGranularityX : integer; // granularity of output bitmap size
  14877.     OutputGranularityY : integer;
  14878.     StretchTapsX       : integer; // 0, no stretch, 1 pix dup, 2 interp, ...
  14879.     StretchTapsY       : integer; //    Describes quality of hardware scaler
  14880.     ShrinkTapsX        : integer; //
  14881.     ShrinkTapsY        : integer; //
  14882.     MinFrameInterval   : int64;   // 100 nS units
  14883.     MaxFrameInterval   : int64;
  14884.     MinBitsPerSecond   : longint;
  14885.     MaxBitsPerSecond   : longint;
  14886.   end;
  14887.  
  14888. //===========================================================================
  14889. // Video DATARANGEs
  14890. //===========================================================================
  14891.  
  14892.   PKS_DATARANGE_VIDEO = ^TKS_DATARANGE_VIDEO;
  14893.   TKS_DATARANGE_VIDEO = record
  14894.    DataRange              : TKSDATARANGE;
  14895.    bFixedSizeSamples      : BOOL;                         // all samples same size?
  14896.    bTemporalCompression   : BOOL;                         // all I frames?
  14897.    StreamDescriptionFlags : DWORD;                        // KS_VIDEO_DESC_*
  14898.    MemoryAllocationFlags  : DWORD;                        // KS_VIDEO_ALLOC_*
  14899.    ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS;
  14900.    VideoInfoHeader        : TKS_VIDEOINFOHEADER;          // default format
  14901.   end;
  14902.  
  14903.  PKS_DATARANGE_VIDEO2 = ^TKS_DATARANGE_VIDEO2;
  14904.  TKS_DATARANGE_VIDEO2 = record
  14905.    DataRange              : TKSDATARANGE;
  14906.    bFixedSizeSamples      : BOOL;  // all samples same size?
  14907.    bTemporalCompression   : BOOL;  // all I frames?
  14908.    StreamDescriptionFlags : DWORD; // KS_VIDEO_DESC_*
  14909.    MemoryAllocationFlags  : DWORD; // KS_VIDEO_ALLOC_*
  14910.    ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS;
  14911.    VideoInfoHeader        : TKS_VIDEOINFOHEADER2;        // default format
  14912.  end;
  14913.  
  14914.   PKS_DATARANGE_MPEG1_VIDEO = ^TKS_DATARANGE_MPEG1_VIDEO;
  14915.   TKS_DATARANGE_MPEG1_VIDEO = record
  14916.     DataRange              : TKSDATARANGE ;
  14917.     bFixedSizeSamples      : BOOL ;  // all samples same size?
  14918.     bTemporalCompression   : BOOL ;  // all I frames?
  14919.     StreamDescriptionFlags : DWORD ; // KS_VIDEO_DESC_*
  14920.     MemoryAllocationFlags  : DWORD ; // KS_VIDEO_ALLOC_*
  14921.     ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS ;
  14922.     VideoInfoHeader        : TKS_MPEG1VIDEOINFO ; // default format
  14923.   end;
  14924.  
  14925.   PKS_DATARANGE_MPEG2_VIDEO = ^TKS_DATARANGE_MPEG2_VIDEO;
  14926.   TKS_DATARANGE_MPEG2_VIDEO = record
  14927.     DataRange              : TKSDATARANGE;
  14928.     bFixedSizeSamples      : BOOL;        // all samples same size?
  14929.     bTemporalCompression   : BOOL;        // all I frames?
  14930.     StreamDescriptionFlags : DWORD;       // KS_VIDEO_DESC_*
  14931.     MemoryAllocationFlags  : DWORD;       // KS_VIDEO_ALLOC_*
  14932.     ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS;
  14933.     VideoInfoHeader        : TKS_MPEGVIDEOINFO2;        // default format
  14934.   end;
  14935.  
  14936.   PKS_DATARANGE_VIDEO_PALETTE = ^TKS_DATARANGE_VIDEO_PALETTE;
  14937.   TKS_DATARANGE_VIDEO_PALETTE = record
  14938.     DataRange              : TKSDATARANGE;
  14939.     bFixedSizeSamples      : BOOL;  // all samples same size?
  14940.     bTemporalCompression   : BOOL;  // all I frames?
  14941.     StreamDescriptionFlags : DWORD; // KS_VIDEO_DESC_*
  14942.     MemoryAllocationFlags  : DWORD; // KS_VIDEO_ALLOC_*
  14943.     ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS;
  14944.     VideoInfo              : TKS_VIDEOINFO;              // default format
  14945.   end;
  14946.  
  14947.   PKS_DATARANGE_VIDEO_VBI = ^TKS_DATARANGE_VIDEO_VBI;
  14948.   TKS_DATARANGE_VIDEO_VBI = record
  14949.     DataRange              : TKSDATARANGE;
  14950.     bFixedSizeSamples      : BOOL;  // all samples same size?
  14951.     bTemporalCompression   : BOOL;  // all I frames?
  14952.     StreamDescriptionFlags : DWORD; // KS_VIDEO_DESC_*
  14953.     MemoryAllocationFlags  : DWORD; // KS_VIDEO_ALLOC_*
  14954.     ConfigCaps             : TKS_VIDEO_STREAM_CONFIG_CAPS;
  14955.     VBIInfoHeader          : TKS_VBIINFOHEADER; // default format
  14956.   end;
  14957.  
  14958.   PKS_DATARANGE_ANALOGVIDEO = ^TKS_DATARANGE_ANALOGVIDEO;
  14959.   TKS_DATARANGE_ANALOGVIDEO = record
  14960.     DataRange       : TKSDATARANGE;
  14961.     AnalogVideoInfo : TKS_ANALOGVIDEOINFO;
  14962.   end;
  14963.  
  14964. //===========================================================================
  14965. // StreamDescriptionFlags
  14966. //
  14967. // These define the "purpose" of each video stream
  14968. //===========================================================================
  14969. const
  14970.   KS_VIDEOSTREAM_PREVIEW     = $0001;  // Preview stream
  14971.   KS_VIDEOSTREAM_CAPTURE     = $0002;  // Capture stream
  14972.   KS_VIDEOSTREAM_VBI         = $0010;  // Field1 VBI
  14973.   KS_VIDEOSTREAM_NABTS       = $0020;  // Field1 NABTS
  14974.   KS_VIDEOSTREAM_CC          = $0100;  // Closed Captioning
  14975.   KS_VIDEOSTREAM_EDS         = $0200;  // Extended Data Services
  14976.   KS_VIDEOSTREAM_TELETEXT    = $0400;  // Field1 Teletext only
  14977.   KS_VIDEOSTREAM_STILL       = $1000;  // Still image input
  14978.   KS_VIDEOSTREAM_IS_VPE      = $8000;  // Is a VPE based stream?
  14979.  
  14980. // MemoryAllocationFlags
  14981.   KS_VIDEO_ALLOC_VPE_SYSTEM  = $0001;  // VPE surface in system memory
  14982.   KS_VIDEO_ALLOC_VPE_DISPLAY = $0002;  // VPE surface in display memory
  14983.   KS_VIDEO_ALLOC_VPE_AGP     = $0004;  // VPE surface in AGP memory
  14984.  
  14985. //////////////////////////////////////////////////////////////
  14986. // Capture driver VBI property sets
  14987. //////////////////////////////////////////////////////////////
  14988.  
  14989. // {F162C607-7B35-496f-AD7F-2DCA3B46B718}
  14990.   KSPROPSETID_VBICAP_PROPERTIES : TGUID = '{F162C607-7B35-496f-AD7F-2DCA3B46B718}';
  14991.  
  14992. type
  14993.   TKSPROPERTY_VBICAP = (
  14994.     KSPROPERTY_VBICAP_PROPERTIES_Invalid,
  14995.     KSPROPERTY_VBICAP_PROPERTIES_PROTECTION
  14996.   );
  14997.  
  14998.   PVBICAP_PROPERTIES_PROTECTION_S = ^TVBICAP_PROPERTIES_PROTECTION_S;
  14999.   TVBICAP_PROPERTIES_PROTECTION_S = record
  15000.     Property_   : TKSPROPERTY;
  15001.     StreamIndex : ULONG; // Index of stream
  15002.     Status      : ULONG;
  15003.   end;
  15004.  
  15005. const
  15006.   KS_VBICAP_PROTECTION_MV_PRESENT  = $0001;
  15007.   KS_VBICAP_PROTECTION_MV_HARDWARE = $0002;
  15008.   KS_VBICAP_PROTECTION_MV_DETECTED = $0004;
  15009.  
  15010.  
  15011. //***************************************************************************/
  15012. //* VBI Related GUIDs, structs and properties for codecs(generic, cc, nabts)*/
  15013. //***************************************************************************/
  15014.  
  15015. ///////////////////////////////////////////////////////////////////////////////////////
  15016. // IP/NABTS Protocol Reserved Group IDs - Overall Range 0x800-0x8FF [Decimal 2048-2079]
  15017. // Intervening values(0-F) are used if there are multiple providers at a particular tier
  15018. ///////////////////////////////////////////////////////////////////////////////////////
  15019.  
  15020. // Used by individual content creators in show footage/data
  15021.   KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE              = $800;
  15022.   KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE   = $810;
  15023.  
  15024. // Used by production company in finished show data
  15025.   KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE    = $820;
  15026.   KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE = $830;
  15027.  
  15028. // Used by broadcast syndicates in syndicated show data
  15029.   KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE       = $840;
  15030.   KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE    = $850;
  15031.  
  15032. // Used by tv networks in network television data
  15033.   KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE          = $860;
  15034.   KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE       = $870;
  15035.  
  15036. // Used by telvision stations in local programming data
  15037.   KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE    = $880;
  15038.   KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE = $890;
  15039.  
  15040. // Used by cable system in cable head-end originated data
  15041.   KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE    = $8A0;
  15042.   KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE = $8B0;
  15043.  
  15044. // The values between 0x8C0 - 0x8EF are reserved for future expansion
  15045.  
  15046. // Used by Microsoft for Testing purposes (0x8F0 - 0x8FF)
  15047.   KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE  = $8F0;
  15048.  
  15049. //////////////////////////////////////////////////////////////
  15050. // Stream Format FEC-corrected NABTS bundles
  15051. //////////////////////////////////////////////////////////////
  15052.  
  15053.   KSDATAFORMAT_TYPE_NABTS        : TGUID = '{E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F}';
  15054.   KSDATAFORMAT_SUBTYPE_NABTS_FEC : TGUID = '{E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F}';
  15055.  
  15056.  
  15057. //////////////////////////////////////////////////////////////
  15058. // NABTS Bundle data structure definition
  15059. //////////////////////////////////////////////////////////////
  15060.  
  15061.   MAX_NABTS_VBI_LINES_PER_FIELD = 11;
  15062.   NABTS_LINES_PER_BUNDLE        = 16;
  15063.   NABTS_PAYLOAD_PER_LINE        = 28;
  15064.   NABTS_BYTES_PER_LINE          = 36;
  15065.  
  15066. type
  15067.   PNABTSFEC_BUFFER = ^TNABTSFEC_BUFFER;
  15068.   TNABTSFEC_BUFFER = record
  15069.     dataSize : ULONG;
  15070.     groupID  : word;
  15071.     Reserved : word;
  15072.     data     : array[0..(NABTS_LINES_PER_BUNDLE * NABTS_PAYLOAD_PER_LINE)-1] of UCHAR;
  15073.   end;
  15074.  
  15075. //////////////////////////////////////////////////////////////
  15076. // vbi codec filtering pin properties
  15077. //////////////////////////////////////////////////////////////
  15078. const
  15079.   KSPROPSETID_VBICodecFiltering : TGUID = '{cafeb0ca-8715-11d0-bd6a-0035c0edbabe}';
  15080.  
  15081. type
  15082.   TKSPROPERTY_VBICODECFILTERING = (
  15083.     KSPROPERTY_VBICODECFILTERING_Invalid,
  15084.     KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY,
  15085.     KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  15086.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  15087.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  15088.     KSPROPERTY_VBICODECFILTERING_STATISTICS
  15089.   );
  15090.  
  15091.   PVBICODECFILTERING_SCANLINES = ^TVBICODECFILTERING_SCANLINES;
  15092.   TVBICODECFILTERING_SCANLINES = record
  15093.     DwordBitArray : array[0..31] of DWORD;      // An array of scanline bits 0..1024(32*32)
  15094.   end;
  15095.  
  15096.   PVBICODECFILTERING_NABTS_SUBSTREAMS = ^TVBICODECFILTERING_NABTS_SUBSTREAMS;
  15097.   TVBICODECFILTERING_NABTS_SUBSTREAMS = record
  15098.     SubstreamMask : array[0..127] of DWORD;   // An array of 4096 bits (one for each NABTS GroupID)
  15099.   end;
  15100.  
  15101.   PVBICODECFILTERING_CC_SUBSTREAMS = ^TVBICODECFILTERING_CC_SUBSTREAMS;
  15102.   TVBICODECFILTERING_CC_SUBSTREAMS = record
  15103.     SubstreamMask : DWORD;        // An array of 32 bits (see KS_CC_SUBSTREAM *)
  15104.   end;
  15105.  
  15106. const
  15107.   KS_CC_SUBSTREAM_ODD              = $0001;
  15108.   KS_CC_SUBSTREAM_EVEN             = $0002;
  15109.   KS_CC_SUBSTREAM_SERVICE_MASK_DC1 = $00F0; // DataChannel1: CC1,CC3,T1,T3
  15110.   KS_CC_SUBSTREAM_SERVICE_CC1      = $0010;
  15111.   KS_CC_SUBSTREAM_SERVICE_CC3      = $0020;
  15112.   KS_CC_SUBSTREAM_SERVICE_T1       = $0040;
  15113.   KS_CC_SUBSTREAM_SERVICE_T3       = $0080;
  15114.   KS_CC_SUBSTREAM_SERVICE_MASK_DC2 = $0F00; // DataChannel2: CC2,CC4,T2,T4
  15115.   KS_CC_SUBSTREAM_SERVICE_CC2      = $0100;
  15116.   KS_CC_SUBSTREAM_SERVICE_CC4      = $0200;
  15117.   KS_CC_SUBSTREAM_SERVICE_T2       = $0400;
  15118.   KS_CC_SUBSTREAM_SERVICE_T4       = $0800;
  15119.   KS_CC_SUBSTREAM_SERVICE_XDS      = $1000;
  15120.  
  15121. ///////////////////////////////////////////////////////////////////
  15122. // Hardware decoded CC stream format
  15123. ///////////////////////////////////////////////////////////////////
  15124.  
  15125.   CC_MAX_HW_DECODE_LINES = 12;
  15126.  
  15127. type
  15128.   PCC_BYTE_PAIR = ^TCC_BYTE_PAIR;
  15129.   TCC_BYTE_PAIR = record
  15130.     Decoded  : array[0..1] of BYTE;
  15131.     Reserved : word;
  15132.   end;
  15133.  
  15134.   PCC_HW_FIELD = ^TCC_HW_FIELD;
  15135.   TCC_HW_FIELD = record
  15136.    ScanlinesRequested : TVBICODECFILTERING_SCANLINES  ;
  15137.    fieldFlags         : ULONG;    // KS_VBI_FLAG_FIELD1,2
  15138.    PictureNumber      : int64;
  15139.    Lines              : array[0..CC_MAX_HW_DECODE_LINES-1] of TCC_BYTE_PAIR;
  15140.   end;
  15141.  
  15142. ///////////////////////////////////////////////////////////////////
  15143. // Raw NABTS stream format (TYPE_NABTS, SUBTYPE_NABTS)
  15144. ///////////////////////////////////////////////////////////////////
  15145.  
  15146. // These low-level structures are byte packed( -Zp1 )
  15147.  
  15148.   PNABTS_BUFFER_LINE = ^TNABTS_BUFFER_LINE;
  15149.   TNABTS_BUFFER_LINE = record
  15150.     Confidence : BYTE;
  15151.     Bytes      : array[0..NABTS_BYTES_PER_LINE-1] of BYTE;
  15152.   end;
  15153.  
  15154. const
  15155.   NABTS_BUFFER_PICTURENUMBER_SUPPORT = 1;
  15156.  
  15157. type
  15158.   PNABTS_BUFFER = ^TNABTS_BUFFER;
  15159.   TNABTS_BUFFER = record
  15160.     ScanlinesRequested : TVBICODECFILTERING_SCANLINES;
  15161.     PictureNumber      : int64;
  15162.     NabtsLines         : array[0..MAX_NABTS_VBI_LINES_PER_FIELD-1] of TNABTS_BUFFER_LINE;
  15163.   end;
  15164.  
  15165. //
  15166. // Common codec statistics
  15167. //
  15168.  
  15169.   PVBICODECFILTERING_STATISTICS_COMMON = ^TVBICODECFILTERING_STATISTICS_COMMON;
  15170.   TVBICODECFILTERING_STATISTICS_COMMON = record
  15171.     InputSRBsProcessed   : DWORD; // upstream SRBs received
  15172.     OutputSRBsProcessed  : DWORD; // downstream SRBs sent
  15173.     SRBsIgnored          : DWORD; // SRBs ignored due to no requests
  15174.     InputSRBsMissing     : DWORD; // SRBs dropped upstream
  15175.     OutputSRBsMissing    : DWORD; // Output dropped because no SRB pending
  15176.     OutputFailures       : DWORD; // dropped because of other failure
  15177.     InternalErrors       : DWORD; // could not process due to int. failure
  15178.     ExternalErrors       : DWORD; // could not process due to ext. failure
  15179.     InputDiscontinuities : DWORD; // discontinuities received
  15180.     DSPFailures          : DWORD; // DSP confidence failure
  15181.     TvTunerChanges       : DWORD; // number of received KS_TVTUNER_CHANGE_BEGIN_TUNE and KS_TVTUNER_CHANGE_END_TUNE pairs.
  15182.     VBIHeaderChanges     : DWORD; // number of received KS_VBI_FLAG_VBIINFOHEADER_CHANGE
  15183.     LineConfidenceAvg    : DWORD; // Average of all DSP confidence results
  15184.     BytesOutput          : DWORD; // Bytes sent downstream
  15185.   end;
  15186.  
  15187.   PVBICODECFILTERING_STATISTICS_COMMON_PIN = ^TVBICODECFILTERING_STATISTICS_COMMON_PIN;
  15188.   TVBICODECFILTERING_STATISTICS_COMMON_PIN = record
  15189.     SRBsProcessed     : DWORD; // SRBs sent/received
  15190.     SRBsIgnored       : DWORD; // SRBs ignored due to filtering
  15191.     SRBsMissing       : DWORD; // SRBs not sent/received
  15192.     InternalErrors    : DWORD; // could not send/receive due to int. failure
  15193.     ExternalErrors    : DWORD; // could not send/receive due to ext. failure
  15194.     Discontinuities   : DWORD; // discontinuities received/sent
  15195.     LineConfidenceAvg : DWORD; // Average of all DSP confidence results for this pin
  15196.     BytesOutput       : DWORD; // Bytes sent downstream
  15197.   end;
  15198.  
  15199. //
  15200. // Codec-specific statistics - NABTS
  15201. //
  15202.  
  15203.   PVBICODECFILTERING_STATISTICS_NABTS = ^TVBICODECFILTERING_STATISTICS_NABTS;
  15204.   TVBICODECFILTERING_STATISTICS_NABTS = record
  15205.     Common                : TVBICODECFILTERING_STATISTICS_COMMON ; // Generic VBI statistics
  15206.     FECBundleBadLines     : DWORD; // Un-FEC-correctable lines
  15207.     FECQueueOverflows     : DWORD; // Number of times FEC queue overflowed
  15208.     FECCorrectedLines     : DWORD; // Lines CSUM corrected by FEC
  15209.     FECUncorrectableLines : DWORD; // FEC input lines not CSUM correctable
  15210.     BundlesProcessed      : DWORD; // Bundles received from FEC
  15211.     BundlesSent2IP        : DWORD; // Bundles sent to IP driver
  15212.     FilteredLines         : DWORD; // Lines processed and then dropped
  15213.                                    // because no one was interested
  15214.   end;
  15215.  
  15216.   PVBICODECFILTERING_STATISTICS_NABTS_PIN = ^TVBICODECFILTERING_STATISTICS_NABTS_PIN;
  15217.   TVBICODECFILTERING_STATISTICS_NABTS_PIN = record
  15218.     Common : TVBICODECFILTERING_STATISTICS_COMMON_PIN; // Generic VBI pin statistics
  15219.   end;
  15220.  
  15221. //
  15222. // Codec-specific statistics - Closed Caption
  15223. //
  15224.  
  15225.   PVBICODECFILTERING_STATISTICS_CC = ^TVBICODECFILTERING_STATISTICS_CC;
  15226.   TVBICODECFILTERING_STATISTICS_CC = record
  15227.     Common : TVBICODECFILTERING_STATISTICS_COMMON; // Generic VBI statistics
  15228.   end;
  15229.  
  15230.   PVBICODECFILTERING_STATISTICS_CC_PIN = ^TVBICODECFILTERING_STATISTICS_CC_PIN;
  15231.   TVBICODECFILTERING_STATISTICS_CC_PIN = record
  15232.     Common : TVBICODECFILTERING_STATISTICS_COMMON_PIN; // Generic VBI pin statistics
  15233.   end;
  15234.  
  15235. ////////////////////////////////////////////////////////////////////////////
  15236. // VBI codec property structures(based on KSPROPERTY_VBICODECFILTERING enum)
  15237. ////////////////////////////////////////////////////////////////////////////
  15238.  
  15239. // *** Most codecs support this property
  15240. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY
  15241. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  15242.   PKSPROPERTY_VBICODECFILTERING_SCANLINES_S = ^TKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
  15243.   TKSPROPERTY_VBICODECFILTERING_SCANLINES_S = record
  15244.     Property_ : TKSPROPERTY;
  15245.     Scanlines : TVBICODECFILTERING_SCANLINES;
  15246.   end;
  15247.  
  15248. // *** NABTS codecs support this property
  15249. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  15250. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  15251.   PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S = ^TKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
  15252.   TKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S = record
  15253.     Property_  : TKSPROPERTY;
  15254.     Substreams : TVBICODECFILTERING_NABTS_SUBSTREAMS;
  15255.   end;
  15256.  
  15257. // *** Closed captioning codecs support this property
  15258. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  15259. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  15260.   PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S = ^TKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
  15261.   TKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S = record
  15262.     Property_  : TKSPROPERTY;
  15263.     Substreams : TVBICODECFILTERING_CC_SUBSTREAMS;
  15264.   end;
  15265.  
  15266. // *** Most codecs support these versions of the global and pin properties
  15267. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  15268.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
  15269.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S = record
  15270.     Property_  : TKSPROPERTY;
  15271.     Statistics : TVBICODECFILTERING_STATISTICS_COMMON;
  15272.   end;
  15273.  
  15274.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
  15275.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S = record
  15276.     Property_  : TKSPROPERTY;
  15277.     Statistics : TVBICODECFILTERING_STATISTICS_COMMON_PIN;
  15278.   end;
  15279.  
  15280. // *** NABTS codecs support this version of the global and pin properties
  15281. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  15282.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
  15283.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S = record
  15284.     Property_  : TKSPROPERTY;
  15285.     Statistics : TVBICODECFILTERING_STATISTICS_NABTS;
  15286.   end;
  15287.  
  15288.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
  15289.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S = record
  15290.     Property_  : TKSPROPERTY;
  15291.     Statistics : TVBICODECFILTERING_STATISTICS_NABTS_PIN;
  15292.   end;
  15293.  
  15294. // *** Closed captioning codecs support this version of the global and pin properties
  15295. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  15296.  
  15297.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
  15298.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S = record
  15299.     Property_  : TKSPROPERTY;
  15300.     Statistics : TVBICODECFILTERING_STATISTICS_CC;
  15301.   end;
  15302.  
  15303.   PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S = ^TKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
  15304.   TKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S = record
  15305.     Property_  : TKSPROPERTY;
  15306.     Statistics : TVBICODECFILTERING_STATISTICS_CC_PIN;
  15307.   end;
  15308.  
  15309. // Standard Pin Names for the video capture filter
  15310. //===========================================================================
  15311. const
  15312.   PINNAME_VIDEO_CAPTURE       : TGUID = '{FB6C4281-0353-11d1-905F-0000C0CC16BA}';
  15313.   PINNAME_VIDEO_CC_CAPTURE    : TGUID = '{1AAD8061-012D-11d2-B4B1-00A0D102CFBE}';
  15314.   PINNAME_VIDEO_NABTS_CAPTURE : TGUID = '{29703660-498A-11d2-B4B1-00A0D102CFBE}';
  15315.   PINNAME_VIDEO_PREVIEW       : TGUID = '{FB6C4282-0353-11d1-905F-0000C0CC16BA}';
  15316.   PINNAME_VIDEO_ANALOGVIDEOIN : TGUID = '{FB6C4283-0353-11d1-905F-0000C0CC16BA}';
  15317.   PINNAME_VIDEO_VBI           : TGUID = '{FB6C4284-0353-11d1-905F-0000C0CC16BA}';
  15318.   PINNAME_VIDEO_VIDEOPORT     : TGUID = '{FB6C4285-0353-11d1-905F-0000C0CC16BA}';
  15319.   PINNAME_VIDEO_NABTS         : TGUID = '{FB6C4286-0353-11d1-905F-0000C0CC16BA}';
  15320.   PINNAME_VIDEO_EDS           : TGUID = '{FB6C4287-0353-11d1-905F-0000C0CC16BA}';
  15321.   PINNAME_VIDEO_TELETEXT      : TGUID = '{FB6C4288-0353-11d1-905F-0000C0CC16BA}';
  15322.   PINNAME_VIDEO_CC            : TGUID = '{FB6C4289-0353-11d1-905F-0000C0CC16BA}';
  15323.   PINNAME_VIDEO_STILL         : TGUID = '{FB6C428A-0353-11d1-905F-0000C0CC16BA}';
  15324.   PINNAME_VIDEO_TIMECODE      : TGUID = '{FB6C428B-0353-11d1-905F-0000C0CC16BA}';
  15325.   PINNAME_VIDEO_VIDEOPORT_VBI : TGUID = '{FB6C428C-0353-11d1-905F-0000C0CC16BA}';
  15326.  
  15327. //===========================================================================
  15328. // KSSTREAM_HEADER extensions for digital video
  15329. //===========================================================================
  15330.  
  15331.   KS_VIDEO_FLAG_FRAME   = $0000; // Frame or Field (default is frame)
  15332.   KS_VIDEO_FLAG_FIELD1  = $0001;
  15333.   KS_VIDEO_FLAG_FIELD2  = $0002;
  15334.  
  15335.   KS_VIDEO_FLAG_I_FRAME = $0000; // I, B, or P (default is I)
  15336.   KS_VIDEO_FLAG_P_FRAME = $0010;
  15337.   KS_VIDEO_FLAG_B_FRAME = $0020;
  15338.  
  15339. type
  15340.   PKS_FRAME_INFO = ^TKS_FRAME_INFO;
  15341.   TKS_FRAME_INFO = record
  15342.     ExtendedHeaderSize : ULONG; // Size of this extended header
  15343.     dwFrameFlags       : DWORD; // Field1, Field2, or Frame
  15344.     PictureNumber      : int64;
  15345.     DropCount          : int64;
  15346.  
  15347.      // The following are only set when using OverlayMixer
  15348.     hDirectDraw        : THANDLE; // user mode DDraw handle
  15349.     hSurfaceHandle     : THANDLE; // user mode surface handle
  15350.     DirectDrawRect     : TRECT;   // portion of surface locked
  15351.      // Reserved fields, never reference these
  15352.     Reserved1          : DWORD;
  15353.     Reserved2          : DWORD;
  15354.     Reserved3          : DWORD;
  15355.     Reserved4          : DWORD;
  15356.   end;
  15357.  
  15358. //===========================================================================
  15359. // KSSTREAM_HEADER extensions for VBI
  15360. //===========================================================================
  15361. const
  15362.   KS_VBI_FLAG_FIELD1               = $0001;
  15363.   KS_VBI_FLAG_FIELD2               = $0002;
  15364.  
  15365.   KS_VBI_FLAG_MV_PRESENT           = $0100;
  15366.   KS_VBI_FLAG_MV_HARDWARE          = $0200;
  15367.   KS_VBI_FLAG_MV_DETECTED          = $0400;
  15368.  
  15369.   KS_VBI_FLAG_TVTUNER_CHANGE       = $0010; // TvTunerChangeInfo is valid
  15370.   KS_VBI_FLAG_VBIINFOHEADER_CHANGE = $0020; // VBIInfoHeader is valid
  15371.  
  15372. type
  15373.   PKS_VBI_FRAME_INFO = ^TKS_VBI_FRAME_INFO;
  15374.   TKS_VBI_FRAME_INFO = record
  15375.     ExtendedHeaderSize  : ULONG; // Size of this extended header
  15376.     dwFrameFlags        : DWORD; // Field1, Field2, or Frame; & etc
  15377.     PictureNumber       : int64; // Test only?
  15378.     DropCount           : int64; // Test only?
  15379.     dwSamplingFrequency : DWORD;
  15380.     TvTunerChangeInfo   : TKS_TVTUNER_CHANGE_INFO;
  15381.     VBIInfoHeader       : TKS_VBIINFOHEADER;
  15382.   end;
  15383.  
  15384.  
  15385. //===========================================================================
  15386. // Analog video formats, used with:
  15387. //      Analog Video Decoders
  15388. //      TVTuners
  15389. //      Analog Video Encoders
  15390. //
  15391. // XXX_STANDARDS_SUPPORTED returns a bitmask
  15392. //===========================================================================
  15393.  
  15394.   TKS_AnalogVideoStandard = TOleEnum;
  15395. const
  15396.     KS_AnalogVideo_None        = $00000000; // This is a digital sensor
  15397.     KS_AnalogVideo_NTSC_M      = $00000001; //        75 IRE Setup
  15398.     KS_AnalogVideo_NTSC_M_J    = $00000002; // Japan,  0 IRE Setup
  15399.     KS_AnalogVideo_NTSC_433    = $00000004;
  15400.     KS_AnalogVideo_PAL_B       = $00000010;
  15401.     KS_AnalogVideo_PAL_D       = $00000020;
  15402.     KS_AnalogVideo_PAL_G       = $00000040;
  15403.     KS_AnalogVideo_PAL_H       = $00000080;
  15404.     KS_AnalogVideo_PAL_I       = $00000100;
  15405.     KS_AnalogVideo_PAL_M       = $00000200;
  15406.     KS_AnalogVideo_PAL_N       = $00000400;
  15407.     KS_AnalogVideo_PAL_60      = $00000800;
  15408.     KS_AnalogVideo_SECAM_B     = $00001000;
  15409.     KS_AnalogVideo_SECAM_D     = $00002000;
  15410.     KS_AnalogVideo_SECAM_G     = $00004000;
  15411.     KS_AnalogVideo_SECAM_H     = $00008000;
  15412.     KS_AnalogVideo_SECAM_K     = $00010000;
  15413.     KS_AnalogVideo_SECAM_K1    = $00020000;
  15414.     KS_AnalogVideo_SECAM_L     = $00040000;
  15415.     KS_AnalogVideo_SECAM_L1    = $00080000;
  15416.     KS_AnalogVideo_PAL_N_COMBO = $00100000;
  15417.  
  15418.  
  15419.   KS_AnalogVideo_NTSC_Mask  = $00000007;
  15420.   KS_AnalogVideo_PAL_Mask   = $00100FF0;
  15421.   KS_AnalogVideo_SECAM_Mask = $000FF000;
  15422.  
  15423. //===========================================================================
  15424. // Property set definitions
  15425. // The comments show whether a given property is:
  15426. //      R  : READ only
  15427. //      w  : WRITE only
  15428. //      RW : READ / WRITE
  15429. //      O  : Optional (return E_UNSUPPORTED if you don't handle this)
  15430. //===========================================================================
  15431.  
  15432.   PROPSETID_ALLOCATOR_CONTROL : TGUID = '{53171960-148E-11d2-9979-0000C0CC16BA}';
  15433.  
  15434. type
  15435.   TKSPROPERTY_ALLOCATOR_CONTROL = (
  15436.     KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT, // R O (will allocate exactly this number of buffers)
  15437.     KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE // R O (return 2 DWORDs specifying surface size)
  15438.   );
  15439.  
  15440. //===========================================================================
  15441.  
  15442. const
  15443.   PROPSETID_VIDCAP_VIDEOPROCAMP : TGUID = '{C6E13360-30AC-11d0-A18C-00A0C9118956}';
  15444.  
  15445. type
  15446.   TKSPROPERTY_VIDCAP_VIDEOPROCAMP = (
  15447.     KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,            // RW O
  15448.     KSPROPERTY_VIDEOPROCAMP_CONTRAST,              // RW O
  15449.     KSPROPERTY_VIDEOPROCAMP_HUE,                   // RW O
  15450.     KSPROPERTY_VIDEOPROCAMP_SATURATION,            // RW O
  15451.     KSPROPERTY_VIDEOPROCAMP_SHARPNESS,             // RW O
  15452.     KSPROPERTY_VIDEOPROCAMP_GAMMA,                 // RW O
  15453.     KSPROPERTY_VIDEOPROCAMP_COLORENABLE,           // RW O
  15454.     KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,          // RW O
  15455.     KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION // RW O
  15456.   );
  15457.  
  15458.   PKSPROPERTY_VIDEOPROCAMP_S = ^TKSPROPERTY_VIDEOPROCAMP_S;
  15459.   TKSPROPERTY_VIDEOPROCAMP_S = record
  15460.     Property_    : TKSPROPERTY;
  15461.     Value        : longint;     // Value to set or get
  15462.     Flags        : ULONG;       // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  15463.     Capabilities : ULONG;       // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  15464.   end;
  15465.  
  15466. const
  15467.   KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO   = $0001;
  15468.   KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL = $0002;
  15469.  
  15470. //===========================================================================
  15471.  
  15472.   PROPSETID_TUNER : TGUID = '{6a2e0605-28e4-11d0-a18c-00a0c9118956}';
  15473.  
  15474. type
  15475.   TKSPROPERTY_TUNER = (
  15476.     KSPROPERTY_TUNER_CAPS,              // R  -overall device capabilities
  15477.     KSPROPERTY_TUNER_MODE_CAPS,         // R  -capabilities in this mode
  15478.     KSPROPERTY_TUNER_MODE,              // RW -set a mode (TV, FM, AM, DSS)
  15479.     KSPROPERTY_TUNER_STANDARD,          // R  -get TV standard (only if TV mode)
  15480.     KSPROPERTY_TUNER_FREQUENCY,         // RW -set/get frequency
  15481.     KSPROPERTY_TUNER_INPUT,             // RW -select an input
  15482.     KSPROPERTY_TUNER_STATUS,            // R  -tuning status
  15483.     KSPROPERTY_TUNER_IF_MEDIUM          // R O-Medium for IF or Transport Pin
  15484.   );
  15485.  
  15486.   TKSPROPERTY_TUNER_MODES = TOleEnum;
  15487. const
  15488.     KSPROPERTY_TUNER_MODE_TV            = $0001;
  15489.     KSPROPERTY_TUNER_MODE_FM_RADIO      = $0002;
  15490.     KSPROPERTY_TUNER_MODE_AM_RADIO      = $0004;
  15491.     KSPROPERTY_TUNER_MODE_DSS           = $0008;
  15492.     KSPROPERTY_TUNER_MODE_ATSC          = $0010;  // also used for DVB-T, DVB-C
  15493.  
  15494. // Describes how the device tunes.  Only one of these flags may be set
  15495. // in KSPROPERTY_TUNER_MODE_CAPS_S.Strategy
  15496.  
  15497. // Describe how the driver should attempt to tune:
  15498. // EXACT:   just go to the frequency specified (no fine tuning)
  15499. // FINE:    (slow) do an exhaustive search for the best signal
  15500. // COARSE:  (fast) use larger frequency jumps to just determine if any signal
  15501.  
  15502. type
  15503.   TKS_TUNER_TUNING_FLAGS = (
  15504.     KS_TUNER_TUNING_Invalid,
  15505.     KS_TUNER_TUNING_EXACT,     // No fine tuning
  15506.     KS_TUNER_TUNING_FINE,      // Fine grained search
  15507.     KS_TUNER_TUNING_COARSE     // Coarse search
  15508.   );
  15509.  
  15510.   TKS_TUNER_STRATEGY = TOleEnum;
  15511. const
  15512.     KS_TUNER_STRATEGY_PLL             = $01; // Tune by PLL offset
  15513.     KS_TUNER_STRATEGY_SIGNAL_STRENGTH = $02; // Tune by signal strength
  15514.     KS_TUNER_STRATEGY_DRIVER_TUNES    = $04; // Driver does fine tuning
  15515.  
  15516. type
  15517.   PKSPROPERTY_TUNER_CAPS_S = ^TKSPROPERTY_TUNER_CAPS_S;
  15518.   TKSPROPERTY_TUNER_CAPS_S = record
  15519.     Property_        : TKSPROPERTY ;
  15520.     ModesSupported   : ULONG  ;        // KS_PROPERTY_TUNER_MODES_*
  15521.     VideoMedium      : TKSPIN_MEDIUM ; // GUID_NULL (no pin), or GUID
  15522.     TVAudioMedium    : TKSPIN_MEDIUM ; // GUID_NULL (no pin), or GUID
  15523.     RadioAudioMedium : TKSPIN_MEDIUM ; // GUID_NULL (no pin), or GUID
  15524.   end;
  15525.  
  15526.   PKSPROPERTY_TUNER_IF_MEDIUM_S = ^TKSPROPERTY_TUNER_IF_MEDIUM_S;
  15527.   TKSPROPERTY_TUNER_IF_MEDIUM_S = record
  15528.     Property_ : TKSPROPERTY;
  15529.     IFMedium  : TKSPIN_MEDIUM; // GUID_NULL (no pin), or GUID
  15530.   end;
  15531.  
  15532.   PKSPROPERTY_TUNER_MODE_CAPS_S = ^TKSPROPERTY_TUNER_MODE_CAPS_S;
  15533.   TKSPROPERTY_TUNER_MODE_CAPS_S = record
  15534.     Property_          : TKSPROPERTY;
  15535.     Mode               : ULONG; // IN: KSPROPERTY_TUNER_MODE
  15536.     StandardsSupported : ULONG; // KS_AnalogVideo_* (if TV or DSS)
  15537.     MinFrequency       : ULONG; // Hz
  15538.     MaxFrequency       : ULONG; // Hz
  15539.     TuningGranularity  : ULONG; // Hz
  15540.     NumberOfInputs     : ULONG; // count of inputs
  15541.     SettlingTime       : ULONG; // milliSeconds
  15542.     Strategy           : ULONG; // KS_TUNER_STRATEGY
  15543.   end;
  15544.  
  15545.   PKSPROPERTY_TUNER_MODE_S = ^TKSPROPERTY_TUNER_MODE_S;
  15546.   TKSPROPERTY_TUNER_MODE_S = record
  15547.     Property_ : TKSPROPERTY;
  15548.     Mode      : ULONG;      // IN: KSPROPERTY_TUNER_MODE
  15549.   end;
  15550.  
  15551.   PKSPROPERTY_TUNER_FREQUENCY_S = ^TKSPROPERTY_TUNER_FREQUENCY_S;
  15552.   TKSPROPERTY_TUNER_FREQUENCY_S = record
  15553.     Property_       : TKSPROPERTY;
  15554.     Frequency       : ULONG; // Hz
  15555.     LastFrequency   : ULONG; // Hz (last known good)
  15556.     TuningFlags     : ULONG; // KS_TUNER_TUNING_FLAGS
  15557.     VideoSubChannel : ULONG; // DSS
  15558.     AudioSubChannel : ULONG; // DSS
  15559.     Channel         : ULONG; // VBI decoders
  15560.     Country         : ULONG; // VBI decoders
  15561.   end;
  15562.  
  15563.   PKSPROPERTY_TUNER_STANDARD_S = ^TKSPROPERTY_TUNER_STANDARD_S;
  15564.   TKSPROPERTY_TUNER_STANDARD_S = record
  15565.     Property_ : TKSPROPERTY;
  15566.     Standard  : ULONG;      // KS_AnalogVideo_*
  15567.   end;
  15568.  
  15569.   PKSPROPERTY_TUNER_INPUT_S = ^TKSPROPERTY_TUNER_INPUT_S;
  15570.   TKSPROPERTY_TUNER_INPUT_S = record
  15571.     Property_  : TKSPROPERTY;
  15572.     InputIndex : ULONG;  // 0 to (n-1) inputs
  15573.   end;
  15574.  
  15575.   PKSPROPERTY_TUNER_STATUS_S = ^TKSPROPERTY_TUNER_STATUS_S;
  15576.   TKSPROPERTY_TUNER_STATUS_S = record
  15577.     Property_        : TKSPROPERTY;
  15578.     CurrentFrequency : ULONG; // Hz
  15579.     PLLOffset        : ULONG; // if Strategy.KS_TUNER_STRATEGY_PLL
  15580.     SignalStrength   : ULONG; // if Stretegy.KS_TUNER_STRATEGY_SIGNAL_STRENGTH
  15581.     Busy             : ULONG; // TRUE if in the process of tuning
  15582.   end;
  15583.  
  15584. const
  15585.   EVENTSETID_TUNER : TGUID = '{6a2e0606-28e4-11d0-a18c-00a0c9118956}';
  15586.  
  15587. type
  15588.   TKSEVENT_TUNER = (
  15589.     KSEVENT_TUNER_CHANGED
  15590.   );
  15591.  
  15592. //===========================================================================
  15593.  
  15594. const
  15595.   PROPSETID_VIDCAP_VIDEOENCODER : TGUID = '{6a2e0610-28e4-11d0-a18c-00a0c9118956}';
  15596.  
  15597. type
  15598.   TKSPROPERTY_VIDCAP_VIDEOENCODER = (
  15599.     KSPROPERTY_VIDEOENCODER_CAPS,                       // R
  15600.     KSPROPERTY_VIDEOENCODER_STANDARD,                   // RW
  15601.     KSPROPERTY_VIDEOENCODER_COPYPROTECTION,             // RW O
  15602.     KSPROPERTY_VIDEOENCODER_CC_ENABLE                  // RW O
  15603.   );
  15604.  
  15605.   PKSPROPERTY_VIDEOENCODER_S = ^TKSPROPERTY_VIDEOENCODER_S;
  15606.   TKSPROPERTY_VIDEOENCODER_S = record
  15607.     Property_    : TKSPROPERTY;
  15608.     Value        : longint;    // value to get or set
  15609.     Flags        : ULONG;      //
  15610.     Capabilities : ULONG;      //
  15611.   end;
  15612.  
  15613. //===========================================================================
  15614. const
  15615.   PROPSETID_VIDCAP_VIDEODECODER : TGUID = '{C6E13350-30AC-11d0-A18C-00A0C9118956}';
  15616.  
  15617. type
  15618.   TKSPROPERTY_VIDCAP_VIDEODECODER = (
  15619.     KSPROPERTY_VIDEODECODER_CAPS,                       // R
  15620.     KSPROPERTY_VIDEODECODER_STANDARD,                   // RW
  15621.     KSPROPERTY_VIDEODECODER_STATUS,                     // R
  15622.     KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,              // Rw O
  15623.     KSPROPERTY_VIDEODECODER_VCR_TIMING                  // RW O
  15624.   );
  15625.  
  15626.   TKS_VIDEODECODER_FLAGS = TOleEnum;
  15627. const
  15628.     KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT  = $0001; // VP Output can tri-stae
  15629.     KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = $0002; // VCR PLL timings
  15630.     KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = $0004; // Can indicate valid signal
  15631.  
  15632. type
  15633.   PKSPROPERTY_VIDEODECODER_CAPS_S = ^TKSPROPERTY_VIDEODECODER_CAPS_S;
  15634.   TKSPROPERTY_VIDEODECODER_CAPS_S = record
  15635.     Property_          : TKSPROPERTY;
  15636.     StandardsSupported : ULONG;      // KS_AnalogVideo_*
  15637.     Capabilities       : ULONG;      // KS_VIDEODECODER_FLAGS_*
  15638.     SettlingTime       : ULONG;      // milliseconds
  15639.     HSyncPerVSync      : ULONG;      // Number of HSync Pulses per VSync
  15640.   end;
  15641.  
  15642.   PKSPROPERTY_VIDEODECODER_STATUS_S = ^TKSPROPERTY_VIDEODECODER_STATUS_S;
  15643.   TKSPROPERTY_VIDEODECODER_STATUS_S = record
  15644.     Property_     : TKSPROPERTY;
  15645.     NumberOfLines : ULONG;           // 525 or 625 lines detected
  15646.     SignalLocked  : ULONG;           // TRUE if signal is locked
  15647.   end;
  15648.  
  15649.   PKSPROPERTY_VIDEODECODER_S = ^TKSPROPERTY_VIDEODECODER_S;
  15650.   TKSPROPERTY_VIDEODECODER_S = record
  15651.     Property_ : TKSPROPERTY;
  15652.     Value     : ULONG;      // Get or set a value
  15653.   end;
  15654.  
  15655. const
  15656.   EVENTSETID_VIDEODECODER : TGUID = '{6a2e0621-28e4-11d0-a18c-00a0c9118956}';
  15657.  
  15658. type
  15659.   TKSEVENT_VIDEODECODER = (
  15660.     KSEVENT_VIDEODECODER_CHANGED
  15661.   );
  15662.  
  15663. //===========================================================================
  15664. const
  15665.   PROPSETID_VIDCAP_CAMERACONTROL : TGUID = '{C6E13370-30AC-11d0-A18C-00A0C9118956}';
  15666.  
  15667. type
  15668.   TKSPROPERTY_VIDCAP_CAMERACONTROL = (
  15669.     KSPROPERTY_CAMERACONTROL_PAN,                       // RW O
  15670.     KSPROPERTY_CAMERACONTROL_TILT,                      // RW O
  15671.     KSPROPERTY_CAMERACONTROL_ROLL,                      // RW O
  15672.     KSPROPERTY_CAMERACONTROL_ZOOM,                      // RW O
  15673.     KSPROPERTY_CAMERACONTROL_EXPOSURE,                  // RW O
  15674.     KSPROPERTY_CAMERACONTROL_IRIS,                      // RW O
  15675.     KSPROPERTY_CAMERACONTROL_FOCUS                      // RW O
  15676.   );
  15677.  
  15678.   PKSPROPERTY_CAMERACONTROL_S = ^TKSPROPERTY_CAMERACONTROL_S;
  15679.   TKSPROPERTY_CAMERACONTROL_S = record
  15680.     Property_    : TKSPROPERTY;
  15681.     Value        : longint;    // value to get or set
  15682.     Flags        : ULONG;      // KSPROPERTY_CAMERACONTROL_FLAGS_*
  15683.     Capabilities : ULONG;      // KSPROPERTY_CAMERACONTROL_FLAGS_*
  15684.   end;
  15685.  
  15686. const
  15687.   KSPROPERTY_CAMERACONTROL_FLAGS_AUTO     = $0001;
  15688.   KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL   = $0002;
  15689.  
  15690.   KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE = $0000;
  15691.   KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE = $0010;
  15692.  
  15693. //===========================================================================
  15694.  
  15695.   PROPSETID_VIDCAP_CROSSBAR : TGUID = '{6a2e0640-28e4-11d0-a18c-00a0c9118956}';
  15696.  
  15697. type
  15698.   TKSPROPERTY_VIDCAP_CROSSBAR = (
  15699.     KSPROPERTY_CROSSBAR_CAPS,                     // R
  15700.     KSPROPERTY_CROSSBAR_PININFO,                  // R
  15701.     KSPROPERTY_CROSSBAR_CAN_ROUTE,                // R
  15702.     KSPROPERTY_CROSSBAR_ROUTE                     // RW
  15703.   );
  15704.  
  15705.   PKSPROPERTY_CROSSBAR_CAPS_S = ^TKSPROPERTY_CROSSBAR_CAPS_S;
  15706.   TKSPROPERTY_CROSSBAR_CAPS_S = record
  15707.     Property_       : TKSPROPERTY;
  15708.     NumberOfInputs  : ULONG;     // the number of audio and video input pins
  15709.     NumberOfOutputs : ULONG;     // the number of audio and video output pins
  15710.   end;
  15711.  
  15712.   PKSPROPERTY_CROSSBAR_PININFO_S = ^TKSPROPERTY_CROSSBAR_PININFO_S;
  15713.   TKSPROPERTY_CROSSBAR_PININFO_S = record
  15714.     Property_       : TKSPROPERTY;
  15715.     Direction       : TKSPIN_DATAFLOW; // KSPIN_DATAFLOW_IN or KSPIN_DATAFLOW_OUT?
  15716.     Index           : ULONG;           // Which pin to return data for?
  15717.     PinType         : ULONG;           // KS_PhysConn_Video_* or KS_PhysConn_Audio_*
  15718.     RelatedPinIndex : ULONG;           // For video pins, this is the related audio pin
  15719.     Medium          : TKSPIN_MEDIUM;   // Identifies the hardware connection
  15720.   end;
  15721.  
  15722.   PKSPROPERTY_CROSSBAR_ROUTE_S = ^TKSPROPERTY_CROSSBAR_ROUTE_S;
  15723.   TKSPROPERTY_CROSSBAR_ROUTE_S = record
  15724.     Property_      : TKSPROPERTY;
  15725.     IndexInputPin  : ULONG;      // Zero based index of the input pin
  15726.     IndexOutputPin : ULONG;      // Zero based index of the output pin
  15727.     CanRoute       : ULONG;      // returns non-zero on CAN_ROUTE if routing is possible
  15728.   end;
  15729.  
  15730. const
  15731.   EVENTSETID_CROSSBAR : TGUID = '{6a2e0641-28e4-11d0-a18c-00a0c9118956}';
  15732.  
  15733. type
  15734.   TKSEVENT_CROSSBAR = (
  15735.     KSEVENT_CROSSBAR_CHANGED
  15736.   );
  15737.  
  15738. // The following IDs should match the AM equivalents
  15739.   TKS_PhysicalConnectorType = TOleEnum;
  15740. const
  15741.     KS_PhysConn_Video_Tuner           = 1;
  15742.     KS_PhysConn_Video_Composite       = 2;
  15743.     KS_PhysConn_Video_SVideo          = 3;
  15744.     KS_PhysConn_Video_RGB             = 4;
  15745.     KS_PhysConn_Video_YRYBY           = 5;
  15746.     KS_PhysConn_Video_SerialDigital   = 6;
  15747.     KS_PhysConn_Video_ParallelDigital = 7;
  15748.     KS_PhysConn_Video_SCSI            = 8;
  15749.     KS_PhysConn_Video_AUX             = 9;
  15750.     KS_PhysConn_Video_1394            = 10;
  15751.     KS_PhysConn_Video_USB             = 11;
  15752.     KS_PhysConn_Video_VideoDecoder    = 12;
  15753.     KS_PhysConn_Video_VideoEncoder    = 13;
  15754.     KS_PhysConn_Video_SCART           = 14;
  15755.     KS_PhysConn_Audio_Tuner           = 4096;
  15756.     KS_PhysConn_Audio_Line            = 4097;
  15757.     KS_PhysConn_Audio_Mic             = 4098;
  15758.     KS_PhysConn_Audio_AESDigital      = 4099;
  15759.     KS_PhysConn_Audio_SPDIFDigital    = 4100;
  15760.     KS_PhysConn_Audio_SCSI            = 4101;
  15761.     KS_PhysConn_Audio_AUX             = 4102;
  15762.     KS_PhysConn_Audio_1394            = 4103;
  15763.     KS_PhysConn_Audio_USB             = 4104;
  15764.     KS_PhysConn_Audio_AudioDecoder    = 4105;
  15765.  
  15766. //===========================================================================
  15767.  
  15768.   PROPSETID_VIDCAP_TVAUDIO : TGUID = '{6a2e0650-28e4-11d0-a18c-00a0c9118956}';
  15769.  
  15770. type
  15771.   TKSPROPERTY_VIDCAP_TVAUDIO = (
  15772.     KSPROPERTY_TVAUDIO_CAPS,                            // R
  15773.     KSPROPERTY_TVAUDIO_MODE,                            // RW
  15774.     KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES        // R
  15775.   );
  15776.  
  15777. const
  15778.   KS_TVAUDIO_MODE_MONO   = $0001;          // Mono
  15779.   KS_TVAUDIO_MODE_STEREO = $0002;          // Stereo
  15780.   KS_TVAUDIO_MODE_LANG_A = $0010;          // Primary language
  15781.   KS_TVAUDIO_MODE_LANG_B = $0020;          // 2nd avail language
  15782.   KS_TVAUDIO_MODE_LANG_C = $0040;          // 3rd avail language
  15783.  
  15784. type
  15785.   PKSPROPERTY_TVAUDIO_CAPS_S = ^TKSPROPERTY_TVAUDIO_CAPS_S;
  15786.   TKSPROPERTY_TVAUDIO_CAPS_S = record
  15787.     Property_    : TKSPROPERTY;
  15788.     Capabilities : ULONG; // Bitmask of KS_TVAUDIO_MODE_*
  15789.     InputMedium  : TKSPIN_MEDIUM;
  15790.     OutputMedium : TKSPIN_MEDIUM;
  15791.   end;
  15792.  
  15793.   PKSPROPERTY_TVAUDIO_S = ^TKSPROPERTY_TVAUDIO_S;
  15794.   TKSPROPERTY_TVAUDIO_S = record
  15795.     Property_ : TKSPROPERTY;
  15796.     Mode : ULONG; // KS_TVAUDIO_MODE_*
  15797.   end;
  15798.  
  15799. const
  15800.   KSEVENTSETID_VIDCAP_TVAUDIO : TGUID = '{6a2e0651-28e4-11d0-a18c-00a0c9118956}';
  15801.  
  15802. type
  15803.   TKSEVENT_TVAUDIO = (
  15804.     KSEVENT_TVAUDIO_CHANGED
  15805.   );
  15806.  
  15807. //===========================================================================
  15808. const
  15809.   PROPSETID_VIDCAP_VIDEOCOMPRESSION : TGUID = '{C6E13343-30AC-11d0-A18C-00A0C9118956}';
  15810.  
  15811. type
  15812.   TKSPROPERTY_VIDCAP_VIDEOCOMPRESSION = (
  15813.     KSPROPERTY_VIDEOCOMPRESSION_GETINFO,              // R
  15814.     KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,        // RW
  15815.     KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, // RW
  15816.     KSPROPERTY_VIDEOCOMPRESSION_QUALITY,              // RW
  15817.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,    // W
  15818.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,  // W
  15819.     KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE            // RW
  15820.   );
  15821.  
  15822.   TKS_CompressionCaps = TOleEnum;
  15823. const
  15824.     KS_CompressionCaps_CanQuality  = 1;
  15825.     KS_CompressionCaps_CanCrunch   = 2;
  15826.     KS_CompressionCaps_CanKeyFrame = 4;
  15827.     KS_CompressionCaps_CanBFrame   = 8;
  15828.     KS_CompressionCaps_CanWindow   = $10;
  15829.  
  15830. type
  15831.   PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S = ^TKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
  15832.   TKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S = record
  15833.     Property_               : TKSPROPERTY;
  15834.     // Note, no VersionString!
  15835.     // Note, no DescriptionString!
  15836.     StreamIndex             : ULONG;   // zero based index of stream
  15837.     DefaultKeyFrameRate     : longint; // Key frame rate
  15838.     DefaultPFrameRate       : longint; // Predeicted frames per Key frame
  15839.     DefaultQuality          : longint; // 0 to 10000
  15840.     NumberOfQualitySettings : longint; // How many discreet quality settings?
  15841.     Capabilities            : longint; // KS_CompressionCaps_*
  15842.   end;
  15843.  
  15844.   PKSPROPERTY_VIDEOCOMPRESSION_S = ^TKSPROPERTY_VIDEOCOMPRESSION_S;
  15845.   TKSPROPERTY_VIDEOCOMPRESSION_S = record
  15846.     Property_   : TKSPROPERTY;
  15847.     StreamIndex : ULONG;      // zero based index of stream
  15848.     Value       : longint;    // value to get or set
  15849.   end;
  15850.  
  15851. //===========================================================================
  15852. // MEDIASUBTYPE_Overlay
  15853. const
  15854.   KSDATAFORMAT_SUBTYPE_OVERLAY : TGUID = '{e436eb7f-524f-11ce-9f53-0020af0ba770}';
  15855.   KSPROPSETID_OverlayUpdate    : TGUID = '{490EA5CF-7681-11D1-A21C-00A0C9223196}';
  15856.  
  15857. type
  15858.   TKSPROPERTY_OVERLAYUPDATE = TOleEnum;
  15859. const
  15860.     KSPROPERTY_OVERLAYUPDATE_INTERESTS     = $0;
  15861.     KSPROPERTY_OVERLAYUPDATE_CLIPLIST      = $1;
  15862.     KSPROPERTY_OVERLAYUPDATE_PALETTE       = $2;
  15863.     KSPROPERTY_OVERLAYUPDATE_COLORKEY      = $4;
  15864.     KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = $8;
  15865.     KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = $10;
  15866.     KSPROPERTY_OVERLAYUPDATE_COLORREF      = $10000000;
  15867.  
  15868. type
  15869.   PKSDISPLAYCHANGE = ^TKSDISPLAYCHANGE;
  15870.   TKSDISPLAYCHANGE = record
  15871.     PelsWidth  :ULONG;
  15872.     PelsHeight :ULONG;
  15873.     BitsPerPel :ULONG;
  15874.     DeviceID   :array[0..0] of WideChar;
  15875.   end;
  15876.  
  15877. {#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)\
  15878.     DEFINE_KSPROPERTY_ITEM(\
  15879.         KSPROPERTY_OVERLAYUPDATE_INTERESTS,\
  15880.         (Handler),\
  15881.         sizeof(KSPROPERTY),\
  15882.         sizeof(ULONG),\
  15883.         NULL, NULL, 0, NULL, NULL, 0)
  15884.  
  15885. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)\
  15886.     DEFINE_KSPROPERTY_ITEM(\
  15887.         KSPROPERTY_OVERLAYUPDATE_PALETTE,\
  15888.         NULL,\
  15889.         sizeof(KSPROPERTY),\
  15890.         0,\
  15891.         (Handler),\
  15892.         NULL, 0, NULL, NULL, 0)
  15893.  
  15894. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)\
  15895.     DEFINE_KSPROPERTY_ITEM(\
  15896.         KSPROPERTY_OVERLAYUPDATE_COLORKEY,\
  15897.         NULL,\
  15898.         sizeof(KSPROPERTY),\
  15899.         sizeof(COLORKEY),\
  15900.         (Handler),\
  15901.         NULL, 0, NULL, NULL, 0)
  15902.  
  15903. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)\
  15904.     DEFINE_KSPROPERTY_ITEM(\
  15905.         KSPROPERTY_OVERLAYUPDATE_CLIPLIST,\
  15906.         NULL,\
  15907.         sizeof(KSPROPERTY),\
  15908.         2 * sizeof(RECT) + sizeof(RGNDATAHEADER),\
  15909.         (Handler),\
  15910.         NULL, 0, NULL, NULL, 0)
  15911.  
  15912. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)\
  15913.     DEFINE_KSPROPERTY_ITEM(\
  15914.         KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,\
  15915.         NULL,\
  15916.         sizeof(KSPROPERTY),\
  15917.         2 * sizeof(RECT),\
  15918.         (Handler),\
  15919.         NULL, 0, NULL, NULL, 0)
  15920.  
  15921. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)\
  15922.     DEFINE_KSPROPERTY_ITEM(\
  15923.         KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,\
  15924.         NULL,\
  15925.         sizeof(KSPROPERTY),\
  15926.         sizeof(KSDISPLAYCHANGE),\
  15927.         (Handler),\
  15928.         NULL, 0, NULL, NULL, 0)
  15929.  
  15930. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)\
  15931.     DEFINE_KSPROPERTY_ITEM(\
  15932.         KSPROPERTY_OVERLAYUPDATE_COLORREF,\
  15933.         (Handler),\
  15934.         sizeof(KSPROPERTY),\
  15935.         sizeof(COLORREF),\
  15936.         NULL,\
  15937.         NULL, 0, NULL, NULL, 0) }
  15938.  
  15939. //===========================================================================
  15940. const
  15941.   PROPSETID_VIDCAP_VIDEOCONTROL : TGUID = '{6a2e0670-28e4-11d0-a18c-00a0c9118956}';
  15942.  
  15943. type
  15944.   TKSPROPERTY_VIDCAP_VIDEOCONTROL = (
  15945.     KSPROPERTY_VIDEOCONTROL_CAPS,               // R
  15946.     KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,  // R O
  15947.     KSPROPERTY_VIDEOCONTROL_FRAME_RATES,        // R O
  15948.     KSPROPERTY_VIDEOCONTROL_MODE                // RWO
  15949.   );
  15950.  
  15951.   TKS_VideoControlFlags = TOleEnum;
  15952. const
  15953.     KS_VideoControlFlag_FlipHorizontal                 = $0001;
  15954.     KS_VideoControlFlag_FlipVertical                   = $0002;
  15955.     KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = $0010;  // ***WARNING *** Flag msimatch with DSHOW.
  15956.     KS_Obsolete_VideoControlFlag_Trigger               = $0020;  // ***WARNING *** Flag msimatch with DSHOW.
  15957.     KS_VideoControlFlag_ExternalTriggerEnable          = $0004;
  15958.     KS_VideoControlFlag_Trigger                        = $0008;
  15959.  
  15960. type
  15961.   PKSPROPERTY_VIDEOCONTROL_CAPS_S = ^TKSPROPERTY_VIDEOCONTROL_CAPS_S;
  15962.   TKSPROPERTY_VIDEOCONTROL_CAPS_S = record
  15963.     Property_        : TKSPROPERTY;
  15964.     StreamIndex      : ULONG;
  15965.     VideoControlCaps : ULONG;                // KS_VideoControlFlags_*
  15966.   end;
  15967.  
  15968.   PKSPROPERTY_VIDEOCONTROL_MODE_S = ^TKSPROPERTY_VIDEOCONTROL_MODE_S;
  15969.   TKSPROPERTY_VIDEOCONTROL_MODE_S = record
  15970.     Property_   : TKSPROPERTY;
  15971.     StreamIndex : ULONG;
  15972.     Mode        : longint; // KS_VideoControlFlags_*
  15973.   end;
  15974.  
  15975.   PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S = ^TKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
  15976.   TKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S = record
  15977.     Property_                    : TKSPROPERTY;
  15978.     StreamIndex                  : ULONG; // Index of stream
  15979.     RangeIndex                   : ULONG; // Index of range
  15980.     Dimensions                   : TSIZE; // Size of image
  15981.     CurrentActualFrameRate       : int64; // Only correct if pin is open
  15982.     CurrentMaxAvailableFrameRate : int64; // Max Rate temporarily limited on USB or 1394?
  15983.   end;
  15984.  
  15985. // KSPROPERTY_VIDEOCONTROL_FRAME_RATES returns a list of available frame rates in 100 nS units
  15986.   PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S = ^TKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
  15987.   TKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S = record
  15988.     Property_   : TKSPROPERTY;
  15989.     StreamIndex : ULONG; // Index of stream
  15990.     RangeIndex  : ULONG; // Index of range
  15991.     Dimensions  : TSIZE; // Size of image
  15992.   end;
  15993.  
  15994. //===========================================================================
  15995. const
  15996.   PROPSETID_VIDCAP_DROPPEDFRAMES : TGUID = '{C6E13344-30AC-11d0-A18C-00A0C9118956}';
  15997.  
  15998. type
  15999.   TKSPROPERTY_VIDCAP_DROPPEDFRAMES = (
  16000.     KSPROPERTY_DROPPEDFRAMES_CURRENT            // R
  16001.   );
  16002.  
  16003.   PKSPROPERTY_DROPPEDFRAMES_CURRENT_S = ^TKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
  16004.   TKSPROPERTY_DROPPEDFRAMES_CURRENT_S = record
  16005.     Property_        : TKSPROPERTY;
  16006.     PictureNumber    : int64; // Current Picture Number
  16007.     DropCount        : int64; // Count of frames dropped
  16008.     AverageFrameSize : ULONG; // Average size of frames captured
  16009.   end;
  16010.  
  16011. //===========================================================================
  16012. // VPE
  16013. const
  16014.   KSPROPSETID_VPConfig    : TGUID = '{bc29a660-30e3-11d0-9e69-00c04fd7c15b}';
  16015.   KSPROPSETID_VPVBIConfig : TGUID = '{ec529b00-1a1f-11d1-bad9-00609744111a}';
  16016.  
  16017. // Both of the above property sets use the same list of properties below
  16018.  
  16019. type
  16020.   TKSPROPERTY_VPCONFIG = (
  16021.     KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
  16022.     KSPROPERTY_VPCONFIG_GETCONNECTINFO,
  16023.     KSPROPERTY_VPCONFIG_SETCONNECTINFO,
  16024.     KSPROPERTY_VPCONFIG_VPDATAINFO,
  16025.     KSPROPERTY_VPCONFIG_MAXPIXELRATE,
  16026.     KSPROPERTY_VPCONFIG_INFORMVPINPUT,
  16027.     KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
  16028.     KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
  16029.     KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
  16030.     KSPROPERTY_VPCONFIG_INVERTPOLARITY,
  16031.     KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,   // E_NOTIMPL for VBI
  16032.     KSPROPERTY_VPCONFIG_SCALEFACTOR,            // E_NOTIMPL for VBI
  16033.     KSPROPERTY_VPCONFIG_DDRAWHANDLE,
  16034.     KSPROPERTY_VPCONFIG_VIDEOPORTID,
  16035.     KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
  16036.     KSPROPERTY_VPCONFIG_SURFACEPARAMS
  16037.   );
  16038.  
  16039. //=========================
  16040. // IBasicAudio
  16041. //
  16042. const
  16043.   CLSID_KsIBasicAudioInterfaceHandler : TGUID = '{b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d}';
  16044.  
  16045. type
  16046.   PKSVPMAXPIXELRATE = ^TKSVPMAXPIXELRATE;
  16047.   TKSVPMAXPIXELRATE = record
  16048.     Size               : TAMVPSIZE;
  16049.     MaxPixelsPerSecond : DWORD;
  16050.     Reserved           : DWORD;
  16051.   end;
  16052.  
  16053.   PKSVPSIZE_PROP = ^TKSVPSIZE_PROP;
  16054.   TKSVPSIZE_PROP = record
  16055.     Property_ : TKSPROPERTY;
  16056.     Size      : TAMVPSIZE;
  16057.   end;
  16058.  
  16059.   PKSVPSURFACEPARAMS = ^TKSVPSURFACEPARAMS;
  16060.   TKSVPSURFACEPARAMS = record
  16061.     dwPitch   : DWORD;
  16062.     dwXOrigin : DWORD;
  16063.     dwYOrigin : DWORD;
  16064.   end;
  16065.  
  16066. //==========================================================================
  16067. // The following definitions must be in sync with DDraw.h in DirectX SDK
  16068. //==========================================================================
  16069.  
  16070. //*
  16071. //* The FourCC code is valid.
  16072. //*
  16073. // uses DirectDraw.pas
  16074.  
  16075. //==========================================================================
  16076. // End of DDraw.h header info
  16077. //==========================================================================
  16078.  
  16079. //==========================================================================
  16080. // The following definitions must be in sync with DVP.h in DirectX SDK
  16081. //==========================================================================
  16082.  
  16083.  
  16084.   PDDVIDEOPORTCONNECT = ^TDDVIDEOPORTCONNECT;
  16085.   TDDVIDEOPORTCONNECT = record
  16086.     dwSize      : DWORD; // size of the DDVIDEOPORTCONNECT structure
  16087.     dwPortWidth : DWORD; // Width of the video port
  16088.     guidTypeID  : TGUID; // Description of video port connection
  16089.     dwFlags     : DWORD; // Connection flags
  16090.     dwReserved1 : DWORD; // Reserved, set to zero.
  16091.   end;
  16092.  
  16093. const
  16094.   DDVPTYPE_E_HREFH_VREFH : TGUID = (D1:$54F39980;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  16095.   DDVPTYPE_E_HREFL_VREFL : TGUID = (D1:$E09C77E0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  16096.  
  16097. //==========================================================================
  16098. // End of DVP.h header info
  16099. //==========================================================================
  16100.  
  16101.  
  16102. //==========================================================================
  16103. // The following definitions must be in sync with VPType.h in AM 2.0 SDK
  16104. //==========================================================================
  16105. type
  16106. // pixel aspect ratios corresponding to a 720x480 NTSC image or a 720x576 image
  16107.   TKS_AMPixAspectRatio = ( // AMPixAspectRatio
  16108.     KS_PixAspectRatio_NTSC4x3,
  16109.     KS_PixAspectRatio_NTSC16x9,
  16110.     KS_PixAspectRatio_PAL4x3,
  16111.     KS_PixAspectRatio_PAL16x9
  16112.   );
  16113.  
  16114.   TKS_AMVP_SELECTFORMATBY = ( // AMVP_SELECTFORMATBY
  16115.     KS_AMVP_DO_NOT_CARE,
  16116.     KS_AMVP_BEST_BANDWIDTH,
  16117.     KS_AMVP_INPUT_SAME_AS_OUTPUT
  16118.   );
  16119.  
  16120.   TKS_AMVP_MODE = ( // AMVP_MODE
  16121.     KS_AMVP_MODE_WEAVE,
  16122.     KS_AMVP_MODE_BOBINTERLEAVED,
  16123.     KS_AMVP_MODE_BOBNONINTERLEAVED,
  16124.     KS_AMVP_MODE_SKIPEVEN,
  16125.     KS_AMVP_MODE_SKIPODD
  16126.   );
  16127.  
  16128.   PKS_AMVPDIMINFO = ^TKS_AMVPDIMINFO; // AMVPDIMINFO
  16129.   TKS_AMVPDIMINFO = record
  16130.     dwFieldWidth  : DWORD; // [out] field width
  16131.     dwFieldHeight : DWORD; // [out] field height
  16132.     dwVBIWidth    : DWORD; // [out] VBI data width
  16133.     dwVBIHeight   : DWORD; // [out] VBI data height
  16134.     rcValidRegion : TRECT; // [out] valid rect for data cropping
  16135.   end;
  16136.  
  16137.   PKS_AMVPDATAINFO = ^TKS_AMVPDATAINFO;       // AMVPDATAINFO
  16138.   TKS_AMVPDATAINFO = record
  16139.     dwSize                 : DWORD;           // Size of the struct
  16140.     dwMicrosecondsPerField : DWORD;           // Time taken by each field
  16141.     amvpDimInfo            : TKS_AMVPDIMINFO; // Dimensional Information
  16142.     dwPictAspectRatioX     : DWORD;           // Pict aspect ratio in X dimn
  16143.     dwPictAspectRatioY     : DWORD;           // Pict aspect ratio in Y dimn
  16144.     bEnableDoubleClock     : BOOL;            // Videoport should enable double clocking
  16145.     bEnableVACT            : BOOL;            // Videoport should use an external VACT signal
  16146.     bDataIsInterlaced      : BOOL;            // Indicates that the signal is interlaced
  16147.     lHalfLinesOdd          : Longint;         // number of halflines in the odd field
  16148.     bFieldPolarityInverted : BOOL;            // Device inverts the polarity by default
  16149.     dwNumLinesInVREF       : DWORD;           // Number of lines of data in VREF
  16150.     lHalfLinesEven         : Longint;         // number of halflines in the even field
  16151.     dwReserved1            : DWORD;           // Reserved for future use
  16152.   end;
  16153.  
  16154.   PKS_AMVPSIZE = ^TKS_AMVPSIZE;  // AMVPSIZE
  16155.   TKS_AMVPSIZE = record
  16156.     dwWidth  : DWORD;            // [in] width in pixels
  16157.     dwHeight : DWORD;            // [in] height in pixels
  16158.   end;
  16159.  
  16160. //==========================================================================
  16161. // End of VPType.h header info
  16162. //==========================================================================
  16163.  
  16164. { // allready defined above
  16165.   PKSVPMAXPIXELRATE = ^TKSVPMAXPIXELRATE;
  16166.   TKSVPMAXPIXELRATE = record
  16167.     Size               : TKS_AMVPSIZE;
  16168.     MaxPixelsPerSecond : DWORD;
  16169.     Reserved           : DWORD;
  16170.   end;
  16171.  
  16172.   PKSVPSIZE_PROP = ^TKSVPSIZE_PROP;
  16173.   TKSVPSIZE_PROP = record
  16174.     Property_ : TKSPROPERTY;
  16175.     Size      : TKS_AMVPSIZE;
  16176.   end; 
  16177.  
  16178.   PKSVPSURFACEPARAMS = ^TKSVPSURFACEPARAMS;
  16179.   TKSVPSURFACEPARAMS = record
  16180.     dwPitch   : DWORD;
  16181.     dwXOrigin : DWORD;
  16182.     dwYOrigin : DWORD;
  16183.   end;     }
  16184.  
  16185. //
  16186. //  IVPNotify event notification
  16187. //
  16188. const
  16189. KSEVENTSETID_VPNotify : TGUID = '{20c5598e-d3c8-11d0-8dfc-00c04fd7c08b}';
  16190.  
  16191. type
  16192.   TKSEVENT_VPNOTIFY = (
  16193.     KSEVENT_VPNOTIFY_FORMATCHANGE
  16194.   );
  16195.  
  16196. //
  16197. //  VIDCAPTOSTI event notification
  16198. //
  16199. const
  16200.   KSEVENTSETID_VIDCAPTOSTI : TGUID = '{DB47DE20-F628-11d1-BA41-00A0C90D2B05}';
  16201.  
  16202. type
  16203.   TKSEVENT_VIDCAPTOSTI = (
  16204.     KSEVENT_VIDCAPTOSTI_EXT_TRIGGER
  16205.   );
  16206.  
  16207. //
  16208. //  IVPVBINotify event notification
  16209. //
  16210. const
  16211.   KSEVENTSETID_VPVBINotify : TGUID = '{ec529b01-1a1f-11d1-bad9-00609744111a}';
  16212.  
  16213. type
  16214.   TKSEVENT_VPVBINOTIFY = (
  16215.     KSEVENT_VPVBINOTIFY_FORMATCHANGE
  16216.   );
  16217.  
  16218. //
  16219. // closed caption information
  16220. //
  16221. const
  16222.   KSDATAFORMAT_TYPE_AUXLine21Data       : TGUID = '{670aea80-3a82-11d0-b79b-00aa003767a7}';
  16223.   KSDATAFORMAT_SUBTYPE_Line21_BytePair  : TGUID = '{6e8d4a22-310c-11d0-b79a-00aa003767a7}';
  16224.   KSDATAFORMAT_SUBTYPE_Line21_GOPPacket : TGUID = '{6e8d4a23-310c-11d0-b79a-00aa003767a7}';
  16225.  
  16226. type
  16227.   PKSGOP_USERDATA = ^TKSGOP_USERDATA;
  16228.   TKSGOP_USERDATA = record
  16229.     sc        : ULONG;
  16230.     reserved1 : ULONG;
  16231.     cFields   : BYTE;
  16232.     l21Data   : array[0..2] of CHAR;
  16233.   end;
  16234.  
  16235. //
  16236. // DVD encrypted PACK format type definition
  16237. //
  16238. const
  16239.   KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK : TGUID = '{ed0b916a-044d-11d1-aa78-00c04fc31d60}';
  16240.  
  16241.   KS_AM_UseNewCSSKey = $1;
  16242.  
  16243. // -----------------------------------------------------------------------
  16244. // KS_AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  16245. // rate changes.
  16246. // -----------------------------------------------------------------------
  16247.  
  16248.   KSPROPSETID_TSRateChange : TGUID = '{A503C5C0-1D1D-11D1-AD80-444553540000}';
  16249.  
  16250. type
  16251.   TKS_AM_PROPERTY_TS_RATE_CHANGE = (
  16252.     KS_AM_RATE_Invalid,
  16253.     KS_AM_RATE_SimpleRateChange,  // rw, use KS_AM_SimpleRateChange
  16254.     KS_AM_RATE_ExactRateChange,   // rw, use KS_AM_ExactRateChange
  16255.     KS_AM_RATE_MaxFullDataRate,   // r, use KS_AM_MaxFullDataRate
  16256.     KS_AM_RATE_Step               // w, use KS_AM_Step
  16257.   );
  16258.  
  16259.   PKS_AM_SimpleRateChange = ^TKS_AM_SimpleRateChange;
  16260.   TKS_AM_SimpleRateChange = record
  16261.     // this is the simplest mechanism to set a time stamp rate change on
  16262.     // a filter (simplest for the person setting the rate change, harder
  16263.     // for the filter doing the rate change).
  16264.     StartTime : TREFERENCE_TIME;  //stream time at which to start this rate
  16265.     Rate      : Longint;          //new rate * 10000 (decimal)
  16266.   end;
  16267.  
  16268.   PKS_AM_ExactRateChange = ^TKS_AM_ExactRateChange;
  16269.   TKS_AM_ExactRateChange = record
  16270.     OutputZeroTime : TREFERENCE_TIME; //input TS that maps to zero output TS
  16271.     Rate           : Longint;         //new rate * 10000 (decimal)
  16272.   end;
  16273.  
  16274.   TKS_AM_MaxFullDataRate = Longint; //rate * 10000 (decimal)
  16275.  
  16276.   TKS_AM_Step = DWORD; // number of frame to step
  16277.  
  16278.  {************************************************************************
  16279.  *                                                                       *
  16280.  *   dmksctrl.h -- Definition of IKsControl                              *
  16281.  *                                                                       *
  16282.  *   Copyright (c) 1998-1999 Microsoft Corporation                       *
  16283.  *                                                                       *
  16284.  *                                                                       *
  16285.  *   This header file contains the definition of IKsControl, which       *
  16286.  *   duplicates definitions from ks.h and ksproxy.h. Your code should    *
  16287.  *   include ks.h and ksproxy.h directly if you have them (they are      *
  16288.  *   provided in the Windows 98 DDK and will be in the Windows NT 5      *
  16289.  *   SDK).                                                               *
  16290.  *                                                                       *
  16291.  ************************************************************************}
  16292. //  IID_IKsControl                   : TGUID = (D1:$28F54685;D2:$06FD;D3:$11D2;D4:($B2,$7A,$00,$A0,$C9,$22,$31,$96));
  16293.  
  16294. type
  16295.   IKsControl = interface(IUnknown)
  16296.     ['{28F54685-06FD-11D2-B27A-00A0C9223196}']
  16297.     procedure KsProperty(Property_: PKSPROPERTY; PropertyLength: ULONG; PropertyData: Pointer;
  16298.                 DataLength: ULONG; out BytesReturned: ULONG); stdcall;
  16299.     procedure KsMethod(Method: PKSMETHOD; MethodLength: ULONG; MethodData: Pointer;
  16300.                 DataLength: ULONG; out BytesReturned: ULONG); stdcall;
  16301.     procedure KsEvent({OPTIONAL}Event: PKSEVENT; EventLength: ULONG; EventData: Pointer;
  16302.                 DataLength: ULONG; out BytesReturned: ULONG); stdcall;
  16303.   end;
  16304.  
  16305. //------------------------------------------------------------------------------
  16306. // File: BDAMedia.h
  16307. //
  16308. // Desc: Broadcast Driver Architecture Multimedia Definitions.
  16309. //
  16310. // Copyright (c) 1996 - 2000, Microsoft Corporation.  All rights reserved.
  16311. //------------------------------------------------------------------------------
  16312.  
  16313. //===========================================================================
  16314. //
  16315. //  KSProperty Set Structure Definitions for BDA
  16316. //
  16317. //===========================================================================
  16318.  
  16319.   PKSP_BDA_NODE_PIN = ^TKSP_BDA_NODE_PIN;
  16320.   TKSP_BDA_NODE_PIN = record
  16321.     Property_     : TKSPROPERTY;
  16322.     ulNodeType    : ULONG;
  16323.     ulInputPinId  : ULONG;
  16324.     ulOutputPinId : ULONG;
  16325.   end;
  16326.  
  16327.   PKSP_NODE_ESPID = ^TKSP_NODE_ESPID;
  16328.   TKSP_NODE_ESPID = record
  16329.     Property_ : TKSP_NODE;
  16330.     EsPid     : ULONG;
  16331.   end;
  16332.  
  16333. //===========================================================================
  16334. //
  16335. //  BDA Data Range definitions.  Includes specifier definitions.
  16336. //
  16337. //===========================================================================
  16338.  
  16339. //  Antenna Signal Formats
  16340. //
  16341.  
  16342.   PKS_DATARANGE_BDA_ANTENNA = ^TKS_DATARANGE_BDA_ANTENNA;
  16343.   TKS_DATARANGE_BDA_ANTENNA = record
  16344.     DataRange : TKSDATARANGE;
  16345.    //   Antenna specifier can go here if required
  16346.    //
  16347.   end;
  16348.  
  16349. //  Transport Formats
  16350. //
  16351.  
  16352.   PBDA_TRANSPORT_INFO = ^TBDA_TRANSPORT_INFO;
  16353.   TBDA_TRANSPORT_INFO = record
  16354.     ulcbPhyiscalPacket         : ULONG; // Size, in bytes, of a physical packet
  16355.                                         // (e.g. Satellite link payload size.
  16356.     ulcbPhyiscalFrame          : ULONG; // Size, in bytes, of each physical frame
  16357.                                         // 0 indicates no HW requirement
  16358.     ulcbPhyiscalFrameAlignment : ULONG; // Capture buffer alignment in bytes
  16359.                                         // 0 and 1 indicate no alignment requirements
  16360.     AvgTimePerFrame            : TREFERENCE_TIME  ; // Normal ActiveMovie units (100 nS)
  16361.   end;
  16362.  
  16363.   PKS_DATARANGE_BDA_TRANSPORT = ^TKS_DATARANGE_BDA_TRANSPORT;
  16364.   TKS_DATARANGE_BDA_TRANSPORT = record
  16365.     DataRange        : TKSDATARANGE;
  16366.     BdaTransportInfo : TBDA_TRANSPORT_INFO;
  16367.    //   Transport specifier can go here if required
  16368.    //
  16369.   end;
  16370.  
  16371. //===========================================================================
  16372. //
  16373. //  BDA Stream Format GUIDs
  16374. //
  16375. //===========================================================================
  16376. const
  16377. KSDATAFORMAT_TYPE_BDA_ANTENNA               : TGUID = '{71985F41-1CA1-11d3-9CC8-00C04F7971E0}';
  16378. KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT    : TGUID = '{F4AEB342-0329-4fdd-A8FD-4AFF4926C978}';
  16379. KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT        : TGUID = '{8DEDA6FD-AC5F-4334-8ECF-A4BA8FA7D0F0}';
  16380. KSDATAFORMAT_TYPE_BDA_IF_SIGNAL             : TGUID = '{61BE0B47-A5EB-499b-9A85-5B16C07F1258}';
  16381. KSDATAFORMAT_TYPE_MPEG2_SECTIONS            : TGUID = '{455F176C-4B06-47CE-9AEF-8CAEF73DF7B5}';
  16382. KSDATAFORMAT_SUBTYPE_ATSC_SI                : TGUID = '{B3C7397C-D303-414D-B33C-4ED2C9D29733}';
  16383. KSDATAFORMAT_SUBTYPE_DVB_SI                 : TGUID = '{e9dd31a3-221d-4adb-8532-9af309c1a408}';
  16384. KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP     : TGUID = '{762E3F66-336F-48d1-BF83-2B00352C11F0}';
  16385. KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP : TGUID = '{951727DB-D2CE-4528-96F6-3301FABB2DE0}';
  16386.  
  16387. //===========================================================================
  16388. //
  16389. //  KSPinName Definitions for BDA
  16390. //
  16391. //===========================================================================
  16392.  
  16393. //  Pin name for a BDA transport pin
  16394.   PINNAME_BDA_TRANSPORT          : TGUID = '{78216A81-CFA8-493e-9711-36A61C08BD9D}';
  16395.  
  16396. //  Pin name for a BDA analog video pin
  16397.   PINNAME_BDA_ANALOG_VIDEO       : TGUID = '{5C0C8281-5667-486c-8482-63E31F01A6E9}';
  16398.  
  16399. //  Pin name for a BDA analog audio pin
  16400.   PINNAME_BDA_ANALOG_AUDIO       : TGUID = '{D28A580A-9B1F-4b0c-9C33-9BF0A8EA636B}';
  16401.  
  16402. //  Pin name for a BDA FM Radio pin
  16403.   PINNAME_BDA_FM_RADIO           : TGUID = '{D2855FED-B2D3-4eeb-9BD0-193436A2F890}';
  16404.  
  16405. //  Pin name for a BDA Intermediate Frequency pin
  16406.   PINNAME_BDA_IF_PIN             : TGUID = '{1A9D4A42-F3CD-48a1-9AEA-71DE133CBE14}';
  16407.  
  16408. //  Pin name for a BDA Open Cable PSIP pin
  16409.   PINNAME_BDA_OPENCABLE_PSIP_PIN : TGUID = '{297BB104-E5C9-4ACE-B123-95C3CBB24D4F}';
  16410.  
  16411. //===========================================================================
  16412. //
  16413. //  KSProperty Set Definitions for BDA
  16414. //
  16415. //===========================================================================
  16416.  
  16417.  
  16418. //------------------------------------------------------------
  16419. //
  16420. //  BDA Network Ethernet Filter Property Set
  16421.   KSPROPSETID_BdaEthernetFilter : TGUID = '{71985F43-1CA1-11d3-9CC8-00C04F7971E0}';
  16422.  
  16423. type
  16424.   TKSPROPERTY_BDA_ETHERNET_FILTER = (
  16425.     KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST_SIZE,
  16426.     KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST,
  16427.     KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_MODE
  16428.   );
  16429. {
  16430. #define DEFINE_KSPROPERTY_ITEM_BDA_ETHERNET_FILTER_MULTICAST_LIST_SIZE(GetHandler, SetHandler)\
  16431.     DEFINE_KSPROPERTY_ITEM(\
  16432.         KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST_SIZE,\
  16433.         (GetHandler),\
  16434.         sizeof(KSPROPERTY),\
  16435.         sizeof(ULONG),\
  16436.         FALSE,\
  16437.         NULL, 0, NULL, NULL, 0)
  16438.  
  16439. #define DEFINE_KSPROPERTY_ITEM_BDA_ETHERNET_FILTER_MULTICAST_LIST(GetHandler, SetHandler)\
  16440.     DEFINE_KSPROPERTY_ITEM(\
  16441.         KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST,\
  16442.         (GetHandler),\
  16443.         sizeof(KSPROPERTY),\
  16444.         sizeof(BDA_ETHERNET_ADDRESS_LIST),\
  16445.         (SetHandler),\
  16446.         NULL, 0, NULL, NULL, 0)
  16447.  
  16448. #define DEFINE_KSPROPERTY_ITEM_BDA_ETHERNET_FILTER_MULTICAST_MODE(GetHandler, SetHandler)\
  16449.     DEFINE_KSPROPERTY_ITEM(\
  16450.         KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_MODE,\
  16451.         (GetHandler),\
  16452.         sizeof(KSPROPERTY),\
  16453.         sizeof(BDA_MULTICAST_MODE),\
  16454.         (SetHandler),\
  16455.         NULL, 0, NULL, NULL, 0)
  16456. }
  16457.  
  16458. //------------------------------------------------------------
  16459. //
  16460. //  BDA Network IPv4 Filter Property Set
  16461. //
  16462. // {71985F44-1CA1-11d3-9CC8-00C04F7971E0}
  16463. //
  16464. const
  16465.   KSPROPSETID_BdaIPv4Filter : TGUID ='{71985F44-1CA1-11d3-9CC8-00C04F7971E0}';
  16466.  
  16467. type
  16468.   TKSPROPERTY_BDA_IPv4_FILTER = (
  16469.     KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST_SIZE,
  16470.     KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST,
  16471.     KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_MODE
  16472.   );
  16473.  
  16474. {
  16475. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv4_FILTER_MULTICAST_LIST_SIZE(GetHandler, SetHandler)\
  16476.     DEFINE_KSPROPERTY_ITEM(\
  16477.         KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST_SIZE,\
  16478.         (GetHandler),\
  16479.         sizeof(KSPROPERTY),\
  16480.         sizeof(ULONG),\
  16481.         FALSE,\
  16482.         NULL, 0, NULL, NULL, 0)
  16483.  
  16484. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv4_FILTER_MULTICAST_LIST(GetHandler, SetHandler)\
  16485.     DEFINE_KSPROPERTY_ITEM(\
  16486.         KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST,\
  16487.         (GetHandler),\
  16488.         sizeof(KSPROPERTY),\
  16489.         sizeof(BDA_IPv4_ADDRESS_LIST),\
  16490.         (SetHandler),\
  16491.         NULL, 0, NULL, NULL, 0)
  16492.  
  16493. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv4_FILTER_MULTICAST_MODE(GetHandler, SetHandler)\
  16494.     DEFINE_KSPROPERTY_ITEM(\
  16495.         KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_MODE,\
  16496.         (GetHandler),\
  16497.         sizeof(KSPROPERTY),\
  16498.         sizeof(BDA_MULTICAST_MODE),\
  16499.         (SetHandler),\
  16500.         NULL, 0, NULL, NULL, 0)
  16501. }
  16502.  
  16503. //------------------------------------------------------------
  16504. //
  16505. //  BDA Network IPv6 Filter Property Set
  16506. //
  16507. // {E1785A74-2A23-4fb3-9245-A8F88017EF33}
  16508. //
  16509. const
  16510.   KSPROPSETID_BdaIPv6Filter : TGUID = '{E1785A74-2A23-4fb3-9245-A8F88017EF33}';
  16511.  
  16512. type
  16513.   TKSPROPERTY_BDA_IPv6_FILTER = (
  16514.     KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST_SIZE,
  16515.     KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST,
  16516.     KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_MODE
  16517.   );
  16518.  
  16519. {
  16520. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv6_FILTER_MULTICAST_LIST_SIZE(GetHandler, SetHandler)\
  16521.     DEFINE_KSPROPERTY_ITEM(\
  16522.         KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST_SIZE,\
  16523.         (GetHandler),\
  16524.         sizeof(KSPROPERTY),\
  16525.         sizeof(ULONG),\
  16526.         FALSE,\
  16527.         NULL, 0, NULL, NULL, 0)
  16528.  
  16529. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv6_FILTER_MULTICAST_LIST(GetHandler, SetHandler)\
  16530.     DEFINE_KSPROPERTY_ITEM(\
  16531.         KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST,\
  16532.         (GetHandler),\
  16533.         sizeof(KSPROPERTY),\
  16534.         sizeof(BDA_IPv6_ADDRESS_LIST),\
  16535.         (SetHandler),\
  16536.         NULL, 0, NULL, NULL, 0)
  16537.  
  16538. #define DEFINE_KSPROPERTY_ITEM_BDA_IPv6_FILTER_MULTICAST_MODE(GetHandler, SetHandler)\
  16539.     DEFINE_KSPROPERTY_ITEM(\
  16540.         KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_MODE,\
  16541.         (GetHandler),\
  16542.         sizeof(KSPROPERTY),\
  16543.         sizeof(BDA_MULTICAST_MODE),\
  16544.         (SetHandler),\
  16545.         NULL, 0, NULL, NULL, 0)
  16546. }
  16547.  
  16548. //------------------------------------------------------------
  16549. //
  16550. //
  16551. //  BDA Signal Property Set
  16552. //
  16553. //  {D2F1644B-B409-11d2-BC69-00A0C9EE9E16}
  16554. //
  16555. const
  16556.   KSPROPSETID_BdaSignal : TGUID = '{D2F1644B-B409-11d2-BC69-00A0C9EE9E16}';
  16557.  
  16558. type
  16559.   TKSPROPERTY_BDA_SIGNAL = (
  16560.     KSPROPERTY_BDA_SIGNAL_SOURCE,
  16561.     KSPROPERTY_BDA_SIGNAL_TUNING_SPACE,
  16562.     KSPROPERTY_BDA_SIGNAL_NETWORK_TYPE,
  16563.     KSPROPERTY_BDA_SIGNAL_STATE
  16564.   );
  16565.  
  16566. {
  16567. #define DEFINE_KSPROPERTY_ITEM_BDA_SIGNAL_SOURCE(GetHandler, SetHandler)\
  16568.     DEFINE_KSPROPERTY_ITEM(\
  16569.         KSPROPERTY_BDA_SIGNAL_SOURCE,\
  16570.         (GetHandler),\
  16571.         sizeof(KSPROPERTY),\
  16572.         sizeof(ULONG),\
  16573.         (SetHandler),\
  16574.         NULL, 0, NULL, NULL, 0)
  16575.  
  16576. #define DEFINE_KSPROPERTY_ITEM_BDA_SIGNAL_TUNING_SPACE(GetHandler, SetHandler)\
  16577.     DEFINE_KSPROPERTY_ITEM(\
  16578.         KSPROPERTY_BDA_SIGNAL_TUNING_SPACE,\
  16579.         (GetHandler),\
  16580.         sizeof(KSPROPERTY),\
  16581.         sizeof(GUID),\
  16582.         (SetHandler),\
  16583.         NULL, 0, NULL, NULL, 0)
  16584.  
  16585. #define DEFINE_KSPROPERTY_ITEM_BDA_SIGNAL_NETWORK_TYPE(GetHandler, SetHandler)\
  16586.     DEFINE_KSPROPERTY_ITEM(\
  16587.         KSPROPERTY_BDA_SIGNAL_NETWORK_TYPE,\
  16588.         (GetHandler),\
  16589.         sizeof(KSPROPERTY),\
  16590.         sizeof(GUID),\
  16591.         (SetHandler),\
  16592.         NULL, 0, NULL, NULL, 0)
  16593.  
  16594. #define DEFINE_KSPROPERTY_ITEM_BDA_SIGNAL_STATE(GetHandler, SetHandler)\
  16595.     DEFINE_KSPROPERTY_ITEM(\
  16596.         KSPROPERTY_BDA_SIGNAL_STATE,\
  16597.         (GetHandler),\
  16598.         sizeof(KSPROPERTY),\
  16599.         sizeof(BDA_SIGNAL_STATE),\
  16600.         (SetHandler),\
  16601.         NULL, 0, NULL, NULL, 0)
  16602. }
  16603.  
  16604. //------------------------------------------------------------
  16605. //
  16606. //
  16607. //  BDA Change Sync Method Set
  16608. //
  16609. const
  16610.   KSMETHODSETID_BdaChangeSync : TGUID = '{FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}';
  16611.  
  16612. type
  16613.   TKSMETHOD_BDA_CHANGE_SYNC = (
  16614.     KSMETHOD_BDA_START_CHANGES,
  16615.     KSMETHOD_BDA_CHECK_CHANGES,
  16616.     KSMETHOD_BDA_COMMIT_CHANGES,
  16617.     KSMETHOD_BDA_GET_CHANGE_STATE
  16618.   );
  16619. {
  16620. #define DEFINE_KSMETHOD_ITEM_BDA_START_CHANGES(MethodHandler, SupportHandler)\
  16621.     DEFINE_KSMETHOD_ITEM(\
  16622.         KSMETHOD_BDA_START_CHANGES,\
  16623.         KSMETHOD_TYPE_NONE,\
  16624.         (MethodHandler),\
  16625.         sizeof(KSMETHOD),\
  16626.         0,\
  16627.         SupportHandler)
  16628.  
  16629. #define DEFINE_KSMETHOD_ITEM_BDA_CHECK_CHANGES(MethodHandler, SupportHandler)\
  16630.     DEFINE_KSMETHOD_ITEM(\
  16631.         KSMETHOD_BDA_CHECK_CHANGES,\
  16632.         KSMETHOD_TYPE_NONE,\
  16633.         (MethodHandler),\
  16634.         sizeof(KSMETHOD),\
  16635.         0,\
  16636.         SupportHandler)
  16637.  
  16638. #define DEFINE_KSMETHOD_ITEM_BDA_COMMIT_CHANGES(MethodHandler, SupportHandler)\
  16639.     DEFINE_KSMETHOD_ITEM(\
  16640.         KSMETHOD_BDA_COMMIT_CHANGES,\
  16641.         KSMETHOD_TYPE_NONE,\
  16642.         (MethodHandler),\
  16643.         sizeof(KSMETHOD),\
  16644.         0,\
  16645.         SupportHandler)
  16646.  
  16647. #define DEFINE_KSMETHOD_ITEM_BDA_GET_CHANGE_STATE(MethodHandler, SupportHandler)\
  16648.     DEFINE_KSMETHOD_ITEM(\
  16649.         KSMETHOD_BDA_GET_CHANGE_STATE,\
  16650.         KSMETHOD_TYPE_READ,\
  16651.         (MethodHandler),\
  16652.         sizeof(KSMETHOD),\
  16653.         0,\
  16654.         SupportHandler)
  16655. }
  16656.  
  16657. //------------------------------------------------------------
  16658. //
  16659. //
  16660. //  BDA Device Configuration Method Set
  16661. //
  16662. const
  16663.   KSMETHODSETID_BdaDeviceConfiguration : TGUID = '{71985F45-1CA1-11d3-9CC8-00C04F7971E0}';
  16664.  
  16665. type
  16666.   TKSMETHOD_BDA_DEVICE_CONFIGURATION = (
  16667.     KSMETHOD_BDA_CREATE_PIN_FACTORY,
  16668.     KSMETHOD_BDA_DELETE_PIN_FACTORY,
  16669.     KSMETHOD_BDA_CREATE_TOPOLOGY
  16670.   );
  16671.  
  16672. {
  16673. #define DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(MethodHandler, SupportHandler)\
  16674.     DEFINE_KSMETHOD_ITEM(\
  16675.         KSMETHOD_BDA_CREATE_PIN_FACTORY,\
  16676.         KSMETHOD_TYPE_READ,\
  16677.         (MethodHandler),\
  16678.         sizeof(KSM_PIN),\
  16679.         sizeof(ULONG),\
  16680.         SupportHandler)
  16681.  
  16682. #define DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(MethodHandler, SupportHandler)\
  16683.     DEFINE_KSMETHOD_ITEM(\
  16684.         KSMETHOD_BDA_DELETE_PIN_FACTORY,\
  16685.         KSMETHOD_TYPE_NONE,\
  16686.         (MethodHandler),\
  16687.         sizeof(KSM_PIN),\
  16688.         0,\
  16689.         SupportHandler)
  16690.  
  16691. #define DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(MethodHandler, SupportHandler)\
  16692.     DEFINE_KSMETHOD_ITEM(\
  16693.         KSMETHOD_BDA_CREATE_TOPOLOGY,\
  16694.         KSMETHOD_TYPE_WRITE,\
  16695.         (MethodHandler),\
  16696.         sizeof(KSMETHOD),\
  16697.         sizeof(KSMULTIPLE_ITEM),\
  16698.         SupportHandler)
  16699. }
  16700.  
  16701. //------------------------------------------------------------
  16702. //
  16703. //
  16704. //  BDA Topology Property Set
  16705. //
  16706. const
  16707.   KSPROPSETID_BdaTopology : TGUID = '{A14EE835-0A23-11d3-9CC7-00C04F7971E0}';
  16708.  
  16709. type
  16710.   TKSPROPERTY_BDA_TOPOLOGY = (
  16711.     KSPROPERTY_BDA_NODE_TYPES,
  16712.     KSPROPERTY_BDA_PIN_TYPES,
  16713.     KSPROPERTY_BDA_TEMPLATE_CONNECTIONS,
  16714.     KSPROPERTY_BDA_NODE_METHODS,
  16715.     KSPROPERTY_BDA_NODE_PROPERTIES,
  16716.     KSPROPERTY_BDA_NODE_EVENTS,
  16717.     KSPROPERTY_BDA_CONTROLLING_PIN_ID,
  16718.     KSPROPERTY_BDA_NODE_DESCRIPTORS
  16719.   );
  16720. {
  16721. #define DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(GetHandler, SetHandler)\
  16722.     DEFINE_KSPROPERTY_ITEM(\
  16723.         KSPROPERTY_BDA_NODE_TYPES,\
  16724.         (GetHandler),\
  16725.         sizeof(KSPROPERTY),\
  16726.         0,\
  16727.         FALSE,\
  16728.         NULL, 0, NULL, NULL, 0)
  16729.  
  16730. #define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(GetHandler, SetHandler)\
  16731.     DEFINE_KSPROPERTY_ITEM(\
  16732.         KSPROPERTY_BDA_PIN_TYPES,\
  16733.         (GetHandler),\
  16734.         sizeof(KSPROPERTY),\
  16735.         0,\
  16736.         FALSE,\
  16737.         NULL, 0, NULL, NULL, 0)
  16738.  
  16739. #define DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(GetHandler, SetHandler)\
  16740.     DEFINE_KSPROPERTY_ITEM(\
  16741.         KSPROPERTY_BDA_TEMPLATE_CONNECTIONS,\
  16742.         (GetHandler),\
  16743.         sizeof(KSPROPERTY),\
  16744.         sizeof( BDA_TEMPLATE_CONNECTION),\
  16745.         FALSE,\
  16746.         NULL, 0, NULL, NULL, 0)
  16747.  
  16748. #define DEFINE_KSPROPERTY_ITEM_BDA_NODE_METHODS(GetHandler, SetHandler)\
  16749.     DEFINE_KSPROPERTY_ITEM(\
  16750.         KSPROPERTY_BDA_NODE_METHODS,\
  16751.         (GetHandler),\
  16752.         sizeof(KSPROPERTY),\
  16753.         0,\
  16754.         FALSE,\
  16755.         NULL, 0, NULL, NULL, 0)
  16756.  
  16757. #define DEFINE_KSPROPERTY_ITEM_BDA_NODE_PROPERTIES(GetHandler, SetHandler)\
  16758.     DEFINE_KSPROPERTY_ITEM(\
  16759.         KSPROPERTY_BDA_NODE_PROPERTIES,\
  16760.         (GetHandler),\
  16761.         sizeof(KSPROPERTY),\
  16762.         0,\
  16763.         FALSE,\
  16764.         NULL, 0, NULL, NULL, 0)
  16765.  
  16766. #define DEFINE_KSPROPERTY_ITEM_BDA_NODE_EVENTS(GetHandler, SetHandler)\
  16767.     DEFINE_KSPROPERTY_ITEM(\
  16768.         KSPROPERTY_BDA_NODE_EVENTS,\
  16769.         (GetHandler),\
  16770.         sizeof(KSPROPERTY),\
  16771.         0,\
  16772.         FALSE,\
  16773.         NULL, 0, NULL, NULL, 0)
  16774.  
  16775. #define DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(GetHandler, SetHandler)\
  16776.     DEFINE_KSPROPERTY_ITEM(\
  16777.         KSPROPERTY_BDA_CONTROLLING_PIN_ID,\
  16778.         (GetHandler),\
  16779.         sizeof(KSP_BDA_NODE_PIN),\
  16780.         sizeof( ULONG),\
  16781.         FALSE,\
  16782.         NULL, 0, NULL, NULL, 0)
  16783.  
  16784. #define DEFINE_KSPROPERTY_ITEM_BDA_NODE_DESCRIPTORS(GetHandler, SetHandler)\
  16785.     DEFINE_KSPROPERTY_ITEM(\
  16786.         KSPROPERTY_BDA_NODE_DESCRIPTORS,\
  16787.         (GetHandler),\
  16788.         sizeof(KSPROPERTY),\
  16789.         0,\
  16790.         FALSE,\
  16791.         NULL, 0, NULL, NULL, 0)
  16792. }
  16793.  
  16794. //------------------------------------------------------------
  16795. //
  16796. //
  16797. //  BDA Pin Control Property Set
  16798. //
  16799. // {0DED49D5-A8B7-4d5d-97A1-12B0C195874D}
  16800. //
  16801. const
  16802.   KSPROPSETID_BdaPinControl : TGUID = '{0DED49D5-A8B7-4d5d-97A1-12B0C195874D}';
  16803.  
  16804. type
  16805.   TKSPROPERTY_BDA_PIN_CONTROL = (
  16806.     KSPROPERTY_BDA_PIN_ID,
  16807.     KSPROPERTY_BDA_PIN_TYPE
  16808.   );
  16809. {
  16810. #define DEFINE_KSPROPERTY_ITEM_BDA_PIN_ID(GetHandler, SetHandler)\
  16811.     DEFINE_KSPROPERTY_ITEM(\
  16812.         KSPROPERTY_BDA_PIN_ID,\
  16813.         (GetHandler),\
  16814.         sizeof( KSPROPERTY),\
  16815.         sizeof( ULONG),\
  16816.         FALSE,\
  16817.         NULL, 0, NULL, NULL, 0)
  16818.  
  16819. #define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPE(GetHandler, SetHandler)\
  16820.     DEFINE_KSPROPERTY_ITEM(\
  16821.         KSPROPERTY_BDA_PIN_TYPE,\
  16822.         (GetHandler),\
  16823.         sizeof( KSPROPERTY),\
  16824.         sizeof( ULONG),\
  16825.         FALSE,\
  16826.         NULL, 0, NULL, NULL, 0)
  16827. }
  16828.  
  16829. //------------------------------------------------------------
  16830. //
  16831. //
  16832. //  BDA Pin Event Set
  16833.  
  16834. const
  16835.   KSEVENTSETID_BdaPinEvent : TGUID = '{104781CD-50BD-40d5-95FB-087E0E86A591}';
  16836.  
  16837. type
  16838.   TKSPROPERTY_BDA_PIN_EVENT = (
  16839.     KSEVENT_BDA_PIN_CONNECTED,
  16840.     KSEVENT_BDA_PIN_DISCONNECTED
  16841.   );
  16842. {
  16843. #define DEFINE_KSEVENT_ITEM_BDA_PIN_CONNECTED(AddHandler, RemoveHandler, SupportHandler)\
  16844.     DEFINE_KSEVENT_ITEM(\
  16845.         KSEVENT_BDA_PIN_CONNECTED,\
  16846.         sizeof( KSEVENTDATA), \
  16847.         0, \
  16848.         (AddHandler),\
  16849.         (RemoveHandler),\
  16850.         (SupportHandler)\
  16851.         )
  16852.  
  16853. #define DEFINE_KSEVENT_ITEM_BDA_PIN_DISCONNECTED(AddHandler, RemoveHandler, SupportHandler)\
  16854.     DEFINE_KSEVENT_ITEM(\
  16855.         KSEVENT_BDA_PIN_DISCONNECTED,\
  16856.         sizeof( KSEVENTDATA), \
  16857.         0, \
  16858.         (AddHandler),\
  16859.         (RemoveHandler),\
  16860.         (SupportHandler)\
  16861.         )
  16862. }
  16863.  
  16864. //------------------------------------------------------------
  16865. //
  16866. //
  16867. //  BDA Void Transform Property Set
  16868. //
  16869. const
  16870.   KSPROPSETID_BdaVoidTransform : TGUID = '{71985F46-1CA1-11d3-9CC8-00C04F7971E0}';
  16871.  
  16872. type
  16873.   TKSPROPERTY_BDA_VOID_TRANSFORM = (
  16874.     KSPROPERTY_BDA_VOID_TRANSFORM_START,
  16875.     KSPROPERTY_BDA_VOID_TRANSFORM_STOP
  16876.   );
  16877. {
  16878. #define DEFINE_KSPROPERTY_ITEM_BDA_VOID_TRANSFORM_START(GetHandler, SetHandler)\
  16879.     DEFINE_KSPROPERTY_ITEM(\
  16880.         KSPROPERTY_BDA_VOID_TRANSFORM_START,\
  16881.         FALSE,\
  16882.         sizeof(KSPROPERTY),\
  16883.         0,\
  16884.         (SetHandler),\
  16885.         NULL, 0, NULL, NULL, 0)
  16886.  
  16887. #define DEFINE_KSPROPERTY_ITEM_BDA_VOID_TRANSFORM_STOP(GetHandler, SetHandler)\
  16888.     DEFINE_KSPROPERTY_ITEM(\
  16889.         KSPROPERTY_BDA_VOID_TRANSFORM_STOP,\
  16890.         FALSE,\
  16891.         sizeof(KSPROPERTY),\
  16892.         0,\
  16893.         (SetHandler),\
  16894.         NULL, 0, NULL, NULL, 0)
  16895. }
  16896.  
  16897. //------------------------------------------------------------
  16898. //
  16899. //
  16900. //  BDA Null Transform Property Set
  16901. //
  16902. const
  16903.   KSPROPSETID_BdaNullTransform : TGUID = '{DDF15B0D-BD25-11d2-9CA0-00C04F7971E0}';
  16904.  
  16905. type
  16906.   TKSPROPERTY_BDA_NULL_TRANSFORM = (
  16907.     KSPROPERTY_BDA_NULL_TRANSFORM_START,
  16908.     KSPROPERTY_BDA_NULL_TRANSFORM_STOP
  16909.   );
  16910. {
  16911. #define DEFINE_KSPROPERTY_ITEM_BDA_NULL_TRANSFORM_START(GetHandler, SetHandler)\
  16912.     DEFINE_KSPROPERTY_ITEM(\
  16913.         KSPROPERTY_BDA_NULL_TRANSFORM_START,\
  16914.         FALSE,\
  16915.         sizeof(KSPROPERTY),\
  16916.         0,\
  16917.         (SetHandler),\
  16918.         NULL, 0, NULL, NULL, 0)
  16919.  
  16920. #define DEFINE_KSPROPERTY_ITEM_BDA_NULL_TRANSFORM_STOP(GetHandler, SetHandler)\
  16921.     DEFINE_KSPROPERTY_ITEM(\
  16922.         KSPROPERTY_BDA_NULL_TRANSFORM_STOP,\
  16923.         FALSE,\
  16924.         sizeof(KSPROPERTY),\
  16925.         0,\
  16926.         (SetHandler),\
  16927.         NULL, 0, NULL, NULL, 0)
  16928. }
  16929.  
  16930. //------------------------------------------------------------
  16931. //
  16932. //
  16933. //  BDA Frequency Filter Property Set
  16934. //
  16935. const
  16936.   KSPROPSETID_BdaFrequencyFilter : TGUID = '{71985F47-1CA1-11d3-9CC8-00C04F7971E0}';
  16937.  
  16938. type
  16939.   TKSPROPERTY_BDA_FREQUENCY_FILTER = (
  16940.     KSPROPERTY_BDA_RF_TUNER_FREQUENCY,
  16941.     KSPROPERTY_BDA_RF_TUNER_POLARITY,
  16942.     KSPROPERTY_BDA_RF_TUNER_RANGE,
  16943.     KSPROPERTY_BDA_RF_TUNER_TRANSPONDER
  16944.   );
  16945. {
  16946. #define DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_FREQUENCY(GetHandler, SetHandler)\
  16947.     DEFINE_KSPROPERTY_ITEM(\
  16948.         KSPROPERTY_BDA_RF_TUNER_FREQUENCY,\
  16949.         (GetHandler),\
  16950.         sizeof(KSP_NODE),\
  16951.         sizeof(ULONG),\
  16952.         (SetHandler),\
  16953.         NULL, 0, NULL, NULL, 0)
  16954.  
  16955. #define DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_POLARITY(GetHandler, SetHandler)\
  16956.     DEFINE_KSPROPERTY_ITEM(\
  16957.         KSPROPERTY_BDA_RF_TUNER_POLARITY,\
  16958.         (GetHandler),\
  16959.         sizeof(KSP_NODE),\
  16960.         sizeof(ULONG),\
  16961.         (SetHandler),\
  16962.         NULL, 0, NULL, NULL, 0)
  16963.  
  16964. #define DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_RANGE(GetHandler, SetHandler)\
  16965.     DEFINE_KSPROPERTY_ITEM(\
  16966.         KSPROPERTY_BDA_RF_TUNER_RANGE,\
  16967.         (GetHandler),\
  16968.         sizeof(KSP_NODE),\
  16969.         sizeof(ULONG),\
  16970.         (SetHandler),\
  16971.         NULL, 0, NULL, NULL, 0)
  16972.  
  16973. #define DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_TRANSPONDER(GetHandler, SetHandler)\
  16974.     DEFINE_KSPROPERTY_ITEM(\
  16975.         KSPROPERTY_BDA_RF_TUNER_TRANSPONDER,\
  16976.         (GetHandler),\
  16977.         sizeof(KSP_NODE),\
  16978.         sizeof(ULONG),\
  16979.         (SetHandler),\
  16980.         NULL, 0, NULL, NULL, 0)
  16981. }
  16982.  
  16983. //------------------------------------------------------------
  16984. //
  16985. //
  16986. //  BDA Digital Demodulator Property Set
  16987. //
  16988. const
  16989.   KSPROPSETID_BdaDigitalDemodulator : TGUID = '{EF30F379-985B-4d10-B640-A79D5E04E1E0}';
  16990.  
  16991. type
  16992.   TKSPROPERTY_BDA_DIGITAL_DEMODULATOR = (
  16993.     KSPROPERTY_BDA_MODULATION_TYPE,
  16994.     KSPROPERTY_BDA_INNER_FEC_TYPE,
  16995.     KSPROPERTY_BDA_INNER_FEC_RATE,
  16996.     KSPROPERTY_BDA_OUTER_FEC_TYPE,
  16997.     KSPROPERTY_BDA_OUTER_FEC_RATE,
  16998.     KSPROPERTY_BDA_SYMBOL_RATE,
  16999.     KSPROPERTY_BDA_SPECTRAL_INVERSION
  17000.   );
  17001. {
  17002. #define DEFINE_KSPROPERTY_ITEM_BDA_MODULATION_TYPE(GetHandler, SetHandler)\
  17003.     DEFINE_KSPROPERTY_ITEM(\
  17004.         KSPROPERTY_BDA_MODULATION_TYPE,\
  17005.         (GetHandler),\
  17006.         sizeof(KSP_NODE),\
  17007.         sizeof(ModulationType),\
  17008.         (SetHandler),\
  17009.         NULL, 0, NULL, NULL, 0)
  17010.  
  17011. #define DEFINE_KSPROPERTY_ITEM_BDA_INNER_FEC_TYPE(GetHandler, SetHandler)\
  17012.     DEFINE_KSPROPERTY_ITEM(\
  17013.         KSPROPERTY_BDA_INNER_FEC_TYPE,\
  17014.         (GetHandler),\
  17015.         sizeof(KSP_NODE),\
  17016.         sizeof(FECMethod),\
  17017.         (SetHandler),\
  17018.         NULL, 0, NULL, NULL, 0)
  17019.  
  17020. #define DEFINE_KSPROPERTY_ITEM_BDA_INNER_FEC_RATE(GetHandler, SetHandler)\
  17021.     DEFINE_KSPROPERTY_ITEM(\
  17022.         KSPROPERTY_BDA_INNER_FEC_RATE,\
  17023.         (GetHandler),\
  17024.         sizeof(KSP_NODE),\
  17025.         sizeof(BinaryConvolutionCodeRate),\
  17026.         (SetHandler),\
  17027.         NULL, 0, NULL, NULL, 0)
  17028.  
  17029. #define DEFINE_KSPROPERTY_ITEM_BDA_OUTER_FEC_TYPE(GetHandler, SetHandler)\
  17030.     DEFINE_KSPROPERTY_ITEM(\
  17031.         KSPROPERTY_BDA_OUTER_FEC_TYPE,\
  17032.         (GetHandler),\
  17033.         sizeof(KSP_NODE),\
  17034.         sizeof(FECMethod),\
  17035.         (SetHandler),\
  17036.         NULL, 0, NULL, NULL, 0)
  17037.  
  17038. #define DEFINE_KSPROPERTY_ITEM_BDA_OUTER_FEC_RATE(GetHandler, SetHandler)\
  17039.     DEFINE_KSPROPERTY_ITEM(\
  17040.         KSPROPERTY_BDA_OUTER_FEC_RATE,\
  17041.         (GetHandler),\
  17042.         sizeof(KSP_NODE),\
  17043.         sizeof(BinaryConvolutionCodeRate),\
  17044.         (SetHandler),\
  17045.         NULL, 0, NULL, NULL, 0)
  17046.  
  17047. #define DEFINE_KSPROPERTY_ITEM_BDA_SYMBOL_RATE(GetHandler, SetHandler)\
  17048.     DEFINE_KSPROPERTY_ITEM(\
  17049.         KSPROPERTY_BDA_SYMBOL_RATE,\
  17050.         (GetHandler),\
  17051.         sizeof(KSP_NODE),\
  17052.         sizeof(ULONG),\
  17053.         (SetHandler),\
  17054.         NULL, 0, NULL, NULL, 0)
  17055.  
  17056. #define DEFINE_KSPROPERTY_ITEM_BDA_SPECTRAL_INVERSION(GetHandler, SetHandler)\
  17057.     DEFINE_KSPROPERTY_ITEM(\
  17058.         KSPROPERTY_BDA_SPECTRAL_INVERSION,\
  17059.         (GetHandler),\
  17060.         sizeof(KSP_NODE),\
  17061.         sizeof(SpectralInversion),\
  17062.         (SetHandler),\
  17063.         NULL, 0, NULL, NULL, 0)
  17064. }
  17065.  
  17066. //------------------------------------------------------------
  17067. //
  17068. //
  17069. //  BDA Autodemodulate Property Set
  17070. //
  17071. const
  17072.   KSPROPSETID_BdaAutodemodulate : TGUID = '{DDF15B12-BD25-11d2-9CA0-00C04F7971E0}';
  17073.  
  17074. type
  17075.   TKSPROPERTY_BDA_AUTODEMODULATE = (
  17076.     KSPROPERTY_BDA_AUTODEMODULATE_START,
  17077.     KSPROPERTY_BDA_AUTODEMODULATE_STOP
  17078.   );
  17079. {
  17080. #define DEFINE_KSPROPERTY_ITEM_BDA_AUTODEMODULATE_START(GetHandler, SetHandler)\
  17081.     DEFINE_KSPROPERTY_ITEM(\
  17082.         KSPROPERTY_BDA_AUTODEMODULATE_START,\
  17083.         FALSE,\
  17084.         sizeof(KSP_NODE),\
  17085.         0,\
  17086.         (SetHandler),\
  17087.         NULL, 0, NULL, NULL, 0)
  17088.  
  17089. #define DEFINE_KSPROPERTY_ITEM_BDA_AUTODEMODULATE_STOP(GetHandler, SetHandler)\
  17090.     DEFINE_KSPROPERTY_ITEM(\
  17091.         KSPROPERTY_BDA_AUTODEMODULATE_STOP,\
  17092.         FALSE,\
  17093.         sizeof(KSP_NODE),\
  17094.         0,\
  17095.         (SetHandler),\
  17096.         NULL, 0, NULL, NULL, 0)
  17097. }
  17098.  
  17099. //------------------------------------------------------------
  17100. //
  17101. //
  17102. //  BDA PmtProcessor Property Set
  17103. //
  17104. const
  17105.   KSPROPSETID_BdaPmtProcessor : TGUID = '{516B99C5-971C-4aaf-B3F3-D9FDA8A15E16}';
  17106.  
  17107. type
  17108.   TKSPROPERTY_BDA_PMTPROCESSOR = (
  17109.     KSPROPERTY_BDA_PMTPROCESSOR_PMT
  17110.   );
  17111. {
  17112. #define DEFINE_KSPROPERTY_ITEM_BDA_PMTPROCESSOR_PMT(GetHandler, SetHandler)\
  17113.     DEFINE_KSPROPERTY_ITEM(\
  17114.         KSPROPERTY_BDA_PMTPROCESSOR_PMT,\
  17115.         (GetHandler),\
  17116.         sizeof(KSP_NODE),\
  17117.         sizeof(BDA_PMT),\
  17118.         (SetHandler),\
  17119.         NULL, 0, NULL, NULL, 0)
  17120. }
  17121.  
  17122. //------------------------------------------------------------
  17123. //
  17124. //  BDA Descriptor Property Set
  17125. //
  17126. const
  17127.   KSPROPSETID_BdaDescriptor : TGUID = '{DE6A1C9E-87DF-48aa-95AA-289B7AA4F49F}';
  17128.  
  17129. type
  17130.   TKSPROPERTY_BDA_DESCRIPTOR = (
  17131.     KSPROPERTY_BDA_DESCRIPTOR_CAT_DESC,
  17132.     KSPROPERTY_BDA_DESCRIPTOR_ES_DESC,
  17133.     KSPROPERTY_BDA_DESCRIPTOR_PROGRAM_DESC
  17134.   );
  17135. {
  17136. #define DEFINE_KSPROPERTY_ITEM_BDA_DESCRIPTOR_CAT_DESC(GetHandler, SetHandler)\
  17137.     DEFINE_KSPROPERTY_ITEM(\
  17138.         KSPROPERTY_BDA_DESCRIPTOR_CAT_DESC,\
  17139.         (GetHandler),\
  17140.         sizeof(KSP_NODE),\
  17141.         sizeof(BDA_CAT_DESCRIPTOR),\
  17142.         (SetHandler),\
  17143.         NULL, 0, NULL, NULL, 0)
  17144.  
  17145. #define DEFINE_KSPROPERTY_ITEM_BDA_DESCRIPTOR_ES_DESC(GetHandler, SetHandler)\
  17146.     DEFINE_KSPROPERTY_ITEM(\
  17147.         KSPROPERTY_BDA_DESCRIPTOR_ES_DESC,\
  17148.         (GetHandler),\
  17149.         sizeof(KSP_NODE),\
  17150.         sizeof(BDA_ES_DESCRIPTOR),\
  17151.         (SetHandler),\
  17152.         NULL, 0, NULL, NULL, 0)
  17153.  
  17154. #define DEFINE_KSPROPERTY_ITEM_BDA_DESCRIPTOR_PROGRAM_DESC(GetHandler, SetHandler)\
  17155.     DEFINE_KSPROPERTY_ITEM(\
  17156.         KSPROPERTY_BDA_DESCRIPTOR_PROGRAM_DESC,\
  17157.         (GetHandler),\
  17158.         sizeof(KSP_NODE),\
  17159.         sizeof(BDA_PROGRAM_DESCRIPTOR),\
  17160.         (SetHandler),\
  17161.         NULL, 0, NULL, NULL, 0)
  17162. }
  17163.  
  17164.  
  17165. //------------------------------------------------------------
  17166. //
  17167. //  BDA EsMap Property Set
  17168. //
  17169. const
  17170.   KSPROPSETID_BdaEsMap : TGUID = '{FA14A8B3-6068-48ef-96DD-53010B985A7D}';
  17171.  
  17172. type
  17173.   TKSPROPERTY_BDA_ESMAP = (
  17174.     KSPROPERTY_BDA_ESMAP_EMM_PIDS,
  17175.     KSPROPERTY_BDA_ESMAP_ECM_PIDS,
  17176.     KSPROPERTY_BDA_ESMAP_MAP_LIST,
  17177.     KSPROPERTY_BDA_ESMAP_UPDATE_MAP,
  17178.     KSPROPERTY_BDA_ESMAP_REMOVE_MAP
  17179.   );
  17180. {
  17181. #define DEFINE_KSPROPERTY_ITEM_BDA_ESMAP_EMM_PIDS(GetHandler, SetHandler)\
  17182.     DEFINE_KSPROPERTY_ITEM(\
  17183.         KSPROPERTY_BDA_ESMAP_EMM_PIDS,\
  17184.         (GetHandler),\
  17185.         sizeof(KSP_NODE),\
  17186.         0,\
  17187.         (SetHandler),\
  17188.         NULL, 0, NULL, NULL, 0)
  17189.  
  17190. #define DEFINE_KSPROPERTY_ITEM_BDA_ESMAP_ECM_PIDS(GetHandler, SetHandler)\
  17191.     DEFINE_KSPROPERTY_ITEM(\
  17192.         KSPROPERTY_BDA_ESMAP_ECM_PIDS,\
  17193.         (GetHandler),\
  17194.         sizeof(KSP_NODE_ESPID),\
  17195.         0,\
  17196.         (SetHandler),\
  17197.         NULL, 0, NULL, NULL, 0)
  17198.  
  17199. #define DEFINE_KSPROPERTY_ITEM_BDA_ESMAP_MAP_LIST(GetHandler, SetHandler)\
  17200.     DEFINE_KSPROPERTY_ITEM(\
  17201.         KSPROPERTY_BDA_ESMAP_MAP_LIST,\
  17202.         (GetHandler),\
  17203.         sizeof(KSP_NODE),\
  17204.         0,\
  17205.         (SetHandler),\
  17206.         NULL, 0, NULL, NULL, 0)
  17207.  
  17208. #define DEFINE_KSPROPERTY_ITEM_BDA_ESMAP_UPDATE_MAP(GetHandler, SetHandler)\
  17209.     DEFINE_KSPROPERTY_ITEM(\
  17210.         KSPROPERTY_BDA_ESMAP_UPDATE_MAP,\
  17211.         FALSE,\
  17212.         sizeof(KSP_NODE),\
  17213.         sizeof(BDA_ES_MAP),\
  17214.         (SetHandler),\
  17215.         NULL, 0, NULL, NULL, 0)
  17216.  
  17217. #define DEFINE_KSPROPERTY_ITEM_BDA_ESMAP_REMOVE_MAP(GetHandler, SetHandler)\
  17218.     DEFINE_KSPROPERTY_ITEM(\
  17219.         KSPROPERTY_BDA_ESMAP_REMOVE_MAP,\
  17220.         FALSE,\
  17221.         sizeof(KSP_NODE),\
  17222.         sizeof(BDA_ES_MAP),\
  17223.         (SetHandler),\
  17224.         NULL, 0, NULL, NULL, 0)
  17225. }
  17226.  
  17227. //------------------------------------------------------------
  17228. //
  17229. //  BDA PID Filter Property Set
  17230. //
  17231. const
  17232.   KSPROPSETID_BdaPIDFilter : TGUID = '{D0A67D65-08DF-4fec-8533-E5B550410B85}';
  17233.  
  17234. type
  17235.   TKSPROPERTY_BDA_PIDFILTER = (
  17236.     KSPROPERTY_BDA_PIDFILTER_MAP_PIDS,
  17237.     KSPROPERTY_BDA_PIDFILTER_UNMAP_PIDS,
  17238.     KSPROPERTY_BDA_PIDFILTER_LIST_PIDS
  17239.   );
  17240. {
  17241. #define DEFINE_KSPROPERTY_ITEM_BDA_PIDFILTER_MAP_PIDS(GetHandler, SetHandler)\
  17242.     DEFINE_KSPROPERTY_ITEM(\
  17243.         KSPROPERTY_BDA_PIDFILTER_MAP_PIDS,\
  17244.         (GetHandler),\
  17245.         sizeof(KSP_NODE),\
  17246.         sizeof(BDA_PID_MAP),\
  17247.         (SetHandler),\
  17248.         NULL, 0, NULL, NULL, 0)
  17249.  
  17250. #define DEFINE_KSPROPERTY_ITEM_BDA_PIDFILTER_UNMAP_PIDS(GetHandler, SetHandler)\
  17251.     DEFINE_KSPROPERTY_ITEM(\
  17252.         KSPROPERTY_BDA_PIDFILTER_UNMAP_PIDS,\
  17253.         (GetHandler),\
  17254.         sizeof(KSP_NODE),\
  17255.         sizeof(BDA_PID_UNMAP),\
  17256.         (SetHandler),\
  17257.         NULL, 0, NULL, NULL, 0)
  17258.  
  17259. #define DEFINE_KSPROPERTY_ITEM_BDA_PIDFILTER_LIST_PIDS(GetHandler, SetHandler)\
  17260.     DEFINE_KSPROPERTY_ITEM(\
  17261.         KSPROPERTY_BDA_PIDFILTER_LIST_PIDS,\
  17262.         (GetHandler),\
  17263.         sizeof(KSP_NODE),\
  17264.         0,\
  17265.         (SetHandler),\
  17266.         NULL, 0, NULL, NULL, 0)
  17267. }
  17268.  
  17269. //------------------------------------------------------------
  17270. //
  17271. //  BDA CA Property Set
  17272. //
  17273. const
  17274.   KSPROPSETID_BdaCA : TGUID = '{B0693766-5278-4ec6-B9E1-3CE40560EF5A}';
  17275.  
  17276. type
  17277.   TKSPROPERTY_BDA_CA = (
  17278.     KSPROPERTY_BDA_ECM_MAP_STATUS,
  17279.     KSPROPERTY_BDA_CA_MODULE_STATUS,
  17280.     KSPROPERTY_BDA_CA_SMART_CARD_STATUS,
  17281.     KSPROPERTY_BDA_CA_MODULE_UI
  17282.   );
  17283. {
  17284. #define DEFINE_KSPROPERTY_ITEM_BDA_ECM_MAP_STATUS(GetHandler, SetHandler)\
  17285.     DEFINE_KSPROPERTY_ITEM(\
  17286.         KSPROPERTY_BDA_ECM_MAP_STATUS,\
  17287.         (GetHandler),\
  17288.         sizeof(KSP_NODE),\
  17289.         sizeof(ULONG),\
  17290.         (SetHandler),\
  17291.         NULL, 0, NULL, NULL, 0)
  17292.  
  17293. #define DEFINE_KSPROPERTY_ITEM_BDA_CA_MODULE_STATUS(GetHandler, SetHandler)\
  17294.     DEFINE_KSPROPERTY_ITEM(\
  17295.         KSPROPERTY_BDA_CA_MODULE_STATUS,\
  17296.         (GetHandler),\
  17297.         sizeof(KSP_NODE),\
  17298.         sizeof(ULONG),\
  17299.         (SetHandler),\
  17300.         NULL, 0, NULL, NULL, 0)
  17301.  
  17302. #define DEFINE_KSPROPERTY_ITEM_BDA_CA_SMART_CARD_STATUS(GetHandler, SetHandler)\
  17303.     DEFINE_KSPROPERTY_ITEM(\
  17304.         KSPROPERTY_BDA_CA_SMART_CARD_STATUS,\
  17305.         (GetHandler),\
  17306.         sizeof(KSP_NODE),\
  17307.         sizeof(ULONG),\
  17308.         (SetHandler),\
  17309.         NULL, 0, NULL, NULL, 0)
  17310.  
  17311. #define DEFINE_KSPROPERTY_ITEM_BDA_CA_MODULE_UI(GetHandler, SetHandler)\
  17312.     DEFINE_KSPROPERTY_ITEM(\
  17313.         KSPROPERTY_BDA_CA_MODULE_UI,\
  17314.         (GetHandler),\
  17315.         sizeof(KSP_NODE),\
  17316.         sizeof(BDA_CA_MODULE_UI),\
  17317.         (SetHandler),\
  17318.         NULL, 0, NULL, NULL, 0)
  17319. }
  17320.  
  17321. //------------------------------------------------------------
  17322. //
  17323. //  BDA CA Event Set
  17324. //
  17325. const
  17326.   KSEVENTSETID_BdaCAEvent : TGUID = '{488C4CCC-B768-4129-8EB1-B00A071F9068}';
  17327.  
  17328. type
  17329.   TKSPROPERTY_BDA_CA_EVENT = (
  17330.     KSEVENT_BDA_ECM_MAP_STATUS_CHANGED,
  17331.     KSEVENT_BDA_CA_MODULE_STATUS_CHANGED,
  17332.     KSEVENT_BDA_CA_SMART_CARD_STATUS_CHANGED,
  17333.     KSEVENT_BDA_CA_MODULE_UI_REQUESTED
  17334.   );
  17335. {
  17336. #define DEFINE_KSEVENT_BDA_ECM_MAP_STATUS_CHANGED(AddHandler, RemoveHandler, SupportHandler)\
  17337.     DEFINE_KSEVENT_ITEM(\
  17338.         KSEVENT_BDA_ECM_MAP_STATUS_CHANGED,\
  17339.         sizeof( KSEVENTDATA), \
  17340.         0, \
  17341.         (AddHandler),\
  17342.         (RemoveHandler),\
  17343.         (SupportHandler)\
  17344.         )
  17345.  
  17346. #define DEFINE_KSEVENT_BDA_CA_MODULE_STATUS_CHANGED(AddHandler, RemoveHandler, SupportHandler)\
  17347.     DEFINE_KSEVENT_ITEM(\
  17348.         KSEVENT_BDA_CA_MODULE_STATUS_CHANGED,\
  17349.         sizeof( KSEVENTDATA), \
  17350.         0, \
  17351.         (AddHandler),\
  17352.         (RemoveHandler),\
  17353.         (SupportHandler)\
  17354.         )
  17355.  
  17356. #define DEFINE_KSEVENT_BDA_CA_SMART_CARD_STATUS_CHANGED(AddHandler, RemoveHandler, SupportHandler)\
  17357.     DEFINE_KSEVENT_ITEM(\
  17358.         KSEVENT_BDA_CA_SMART_CARD_STATUS_CHANGED,\
  17359.         sizeof( KSEVENTDATA), \
  17360.         0, \
  17361.         (AddHandler),\
  17362.         (RemoveHandler),\
  17363.         (SupportHandler)\
  17364.         )
  17365.  
  17366. #define DEFINE_KSEVENT_BDA_CA_MODULE_UI_REQUESTED(AddHandler, RemoveHandler, SupportHandler)\
  17367.     DEFINE_KSEVENT_ITEM(\
  17368.         KSEVENT_BDA_CA_MODULE_UI_REQUESTED,\
  17369.         sizeof( KSEVENTDATA), \
  17370.         0, \
  17371.         (AddHandler),\
  17372.         (RemoveHandler),\
  17373.         (SupportHandler)\
  17374.         )
  17375. }
  17376.  
  17377. //===========================================================================
  17378. //
  17379. // BDA Filter Categories
  17380. //
  17381. //===========================================================================
  17382. const
  17383.   KSCATEGORY_BDA_RECEIVER_COMPONENT    : TGUID = '{FD0A5AF4-B41D-11d2-9C95-00C04F7971E0}';
  17384.   KSCATEGORY_BDA_NETWORK_TUNER         : TGUID = '{71985F48-1CA1-11d3-9CC8-00C04F7971E0}';
  17385.   KSCATEGORY_BDA_NETWORK_EPG           : TGUID = '{71985F49-1CA1-11d3-9CC8-00C04F7971E0}';
  17386.   KSCATEGORY_BDA_IP_SINK               : TGUID = '{71985F4A-1CA1-11d3-9CC8-00C04F7971E0}';
  17387.   KSCATEGORY_BDA_NETWORK_PROVIDER      : TGUID = '{71985F4B-1CA1-11d3-9CC8-00C04F7971E0}';
  17388.   KSCATEGORY_BDA_TRANSPORT_INFORMATION : TGUID = '{A2E3074F-6C3D-11d3-B653-00C04F79498E}';
  17389.  
  17390. //===========================================================================
  17391. //
  17392. // BDA Node Categories
  17393. //
  17394. //===========================================================================
  17395.  
  17396.   KSNODE_BDA_RF_TUNER         : TGUID = '{71985F4C-1CA1-11d3-9CC8-00C04F7971E0}';
  17397.   KSNODE_BDA_QAM_DEMODULATOR  : TGUID = '{71985F4D-1CA1-11d3-9CC8-00C04F7971E0}';
  17398.   KSNODE_BDA_QPSK_DEMODULATOR : TGUID = '{6390C905-27C1-4d67-BDB7-77C50D079300}';
  17399.   KSNODE_BDA_8VSB_DEMODULATOR : TGUID = '{71985F4F-1CA1-11d3-9CC8-00C04F7971E0}';
  17400.   KSNODE_BDA_OPENCABLE_POD    : TGUID = '{D83EF8FC-F3B8-45ab-8B71-ECF7C339DEB4}';
  17401.   KSNODE_BDA_PID_FILTER       : TGUID = '{F5412789-B0A0-44e1-AE4F-EE999B1B7FBE}';
  17402.   KSNODE_BDA_IP_SINK          : TGUID = '{71985F4E-1CA1-11d3-9CC8-00C04F7971E0}';
  17403.  
  17404. //===========================================================================
  17405. //
  17406. // IPSink PINNAME GUID
  17407. //
  17408. //===========================================================================
  17409.  
  17410.   PINNAME_IPSINK_INPUT : TGUID = '{3fdffa70-ac9a-11d2-8f17-00c04f7971e2}';
  17411.  
  17412. //===========================================================================
  17413. //
  17414. // BDA IPSink Categories/Types
  17415. //
  17416. //===========================================================================
  17417.  
  17418.   KSDATAFORMAT_TYPE_BDA_IP            : TGUID = '{e25f7b8e-cccc-11d2-8f25-00c04f7971e2}';
  17419.   KSDATAFORMAT_SUBTYPE_BDA_IP         : TGUID = '{5a9a213c-db08-11d2-8f32-00c04f7971e2}';
  17420.   KSDATAFORMAT_SPECIFIER_BDA_IP       : TGUID = '{6B891420-DB09-11d2-8F32-00C04F7971E2}';
  17421.   KSDATAFORMAT_TYPE_BDA_IP_CONTROL    : TGUID = '{DADD5799-7D5B-4b63-80FB-D1442F26B621}';
  17422.   KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL : TGUID = '{499856E8-E85B-48ed-9BEA-410D0DD4EF81}';
  17423.  
  17424. //===========================================================================
  17425. //
  17426. // MPE PINNAME GUID
  17427. //
  17428. //===========================================================================
  17429.  
  17430.   PINNAME_MPE : TGUID = '{C1B06D73-1DBB-11d3-8F46-00C04F7971E2}';
  17431.  
  17432. /////////////////////////////////////////////////////////////
  17433. //
  17434. // BDA MPE Categories/Types
  17435. //
  17436.   KSDATAFORMAT_TYPE_MPE : TGUID = '{455F176C-4B06-47ce-9AEF-8CAEF73DF7B5}';
  17437.  
  17438. //------------------------------------------------------------------------------
  17439. // File: BDAIface.idl
  17440. //
  17441. // Desc: This file defines the Ring 3 BDA interfaces that are common to
  17442. //       all BDA network and device types.
  17443. //
  17444. //       The interfaces specific to a particular Network Type or filter
  17445. //       implementation are defined in a separate include file for that
  17446. //       Network Type or filter implementation.
  17447. //
  17448. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  17449. //------------------------------------------------------------------------------
  17450.  
  17451. const
  17452.   IID_IBDA_NetworkProvider    : TGUID = '{fd501041-8ebe-11ce-8183-00aa00577da2}';
  17453.   IID_IBDA_EthernetFilter     : TGUID = '{71985F43-1CA1-11d3-9CC8-00C04F7971E0}';
  17454.   IID_IBDA_IPV4Filter         : TGUID = '{71985F44-1CA1-11d3-9CC8-00C04F7971E0}';
  17455.   IID_IBDA_IPV6Filter         : TGUID = '{E1785A74-2A23-4fb3-9245-A8F88017EF33}';
  17456.   IID_IBDA_DeviceControl      : TGUID = '{FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}';
  17457.   IID_IBDA_PinControl         : TGUID = '{0DED49D5-A8B7-4d5d-97A1-12B0C195874D}';
  17458.   IID_IBDA_SignalProperties   : TGUID = '{D2F1644B-B409-11d2-BC69-00A0C9EE9E16}';
  17459.   IID_IBDA_Topology           : TGUID = '{A14EE835-0A23-11d3-9CC7-00C04F7971E0}';
  17460.   IID_IBDA_VoidTransform      : TGUID = '{71985F46-1CA1-11d3-9CC8-00C04F7971E0}';
  17461.   IID_IBDA_NullTransform      : TGUID = '{DDF15B0D-BD25-11d2-9CA0-00C04F7971E0}';
  17462.   IID_IBDA_FrequencyFilter    : TGUID = '{71985F47-1CA1-11d3-9CC8-00C04F7971E0}';
  17463.   IID_IBDA_AutoDemodulate     : TGUID = '{DDF15B12-BD25-11d2-9CA0-00C04F7971E0}';
  17464.   IID_IBDA_DigitalDemodulator : TGUID = '{EF30F379-985B-4d10-B640-A79D5E04E1E0}';
  17465.   IID_IBDA_IPSinkControl      : TGUID = '{3F4DC8E2-4050-11d3-8F4B-00C04F7971E2}';
  17466.   IID_IEnumPIDMap             : TGUID = '{afb6c2a2-2c41-11d3-8a60-0000f81e0e4a}';
  17467.   IID_IMPEG2PIDMap            : TGUID = '{afb6c2a1-2c41-11d3-8a60-0000f81e0e4a}';
  17468.  
  17469. type
  17470.   IBDA_NetworkProvider = interface(IUnknown)
  17471.     ['{fd501041-8ebe-11ce-8183-00aa00577da2}']
  17472.     function PutSignalSource(ulSignalSource: ULONG): HRESULT; stdcall;
  17473.     function GetSignalSource(out pulSignalSource: ULONG): HRESULT; stdcall;
  17474.     function GetNetworkType(var pguidNetworkType: TGUID): HRESULT; stdcall;
  17475.     function PutTuningSpace(const guidTuningSpace: TGUID): HRESULT; stdcall;
  17476.     function GetTuningSpace(out pguidTuingSpace: TGUID): HRESULT; stdcall;
  17477.     function RegisterDeviceFilter(pUnkFilterControl: IUnknown;
  17478.                var ppvRegisitrationContext: ULONG): HRESULT; stdcall;
  17479.     function UnRegisterDeviceFilter(pvRegistrationContext: ULONG): HRESULT; stdcall;
  17480.   end;
  17481.  
  17482.   IBDA_EthernetFilter = interface(IUnknown)
  17483.     ['{71985F43-1CA1-11d3-9CC8-00C04F7971E0}']
  17484.     function GetMulticastListSize(out pulcbAddresses: ULONG): HRESULT; stdcall;
  17485.     function PutMulticastList(ulcbAddresses: ULONG; pAddressList: Pointer): HRESULT; stdcall;
  17486.     function GetMulticastList(out pulcbAddresses: ULONG;
  17487.                out pAddressList): HRESULT; stdcall;
  17488.     function PutMulticastMode(ulModeMask: ULONG): HRESULT; stdcall;
  17489.     function GetMulticastMode(out pulModeMask: ULONG): HRESULT; stdcall;
  17490.   end;
  17491.  
  17492.   IBDA_IPV4Filter = interface(IUnknown)
  17493.     ['{71985F44-1CA1-11d3-9CC8-00C04F7971E0}']
  17494.     function GetMulticastListSize(out pulcbAddresses: ULONG): HRESULT; stdcall;
  17495.     function PutMulticastList(ulcbAddresses: ULONG; pAddressList: Pointer): HRESULT; stdcall;
  17496.     function GetMulticastList(var pulcbAddresses: ULONG; out pAddressList): HRESULT; stdcall;
  17497.     function PutMulticastMode(ulModeMask: ULONG): HRESULT; stdcall;
  17498.     function GetMulticastMode(out pulModeMask: ULONG): HRESULT; stdcall;
  17499.   end;
  17500.  
  17501.   IBDA_IPV6Filter = interface(IUnknown)
  17502.     ['{E1785A74-2A23-4fb3-9245-A8F88017EF33}']
  17503.     function GetMulticastListSize(out pulcbAddresses: ULONG): HRESULT; stdcall;
  17504.     function PutMulticastList(ulcbAddresses: ULONG; pAddressList: Pointer): HRESULT; stdcall;
  17505.     function GetMulticastList(var pulcbAddresses: ULONG; out pAddressList): HRESULT; stdcall;
  17506.     function PutMulticastMode(ulModeMask: ULONG): HRESULT; stdcall;
  17507.     function GetMulticastMode(out pulModeMask: ULONG): HRESULT; stdcall;
  17508.   end;
  17509.  
  17510.   IBDA_DeviceControl = interface(IUnknown)
  17511.     ['{FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}']
  17512.     function StartChanges : HRESULT; stdcall;
  17513.     function CheckChanges : HRESULT; stdcall;
  17514.     function CommitChanges : HRESULT; stdcall;
  17515.     function GetChangeState(var pState: ULONG): HRESULT; stdcall;
  17516.   end;
  17517.  
  17518.   IBDA_PinControl = interface(IUnknown)
  17519.     ['{0DED49D5-A8B7-4d5d-97A1-12B0C195874D}']
  17520.     function GetPinID(var pulPinID: ULONG): HRESULT; stdcall;
  17521.     function GetPinType(var pulPinType: ULONG): HRESULT; stdcall;
  17522.   end;
  17523.  
  17524.   IBDA_SignalProperties = interface(IUnknown)
  17525.     ['{D2F1644B-B409-11d2-BC69-00A0C9EE9E16}']
  17526.     function PutNetworkType(const guidNetworkType: TGUID): HRESULT; stdcall;
  17527.     function GetNetworkType(out pguidNetworkType: TGUID): HRESULT; stdcall;
  17528.     function PutSignalSource(ulSignalSource: ULONG): HRESULT; stdcall;
  17529.     function GetSignalSource(out pulSignalSource: ULONG): HRESULT; stdcall;
  17530.     function PutTuningSpace(const guidTuningSpace: TGUID): HRESULT; stdcall;
  17531.     function GetTuningSpace(out pguidTuingSpace: TGUID): HRESULT; stdcall;
  17532.   end;
  17533.  
  17534.   IBDA_Topology = interface(IUnknown)
  17535.     ['{A14EE835-0A23-11d3-9CC7-00C04F7971E0}']
  17536.     function GetNodeTypes(var pulcNodeTypes: ULONG; ulcNodeTypesMax: ULONG;
  17537.                 var rgulNodeTypes: ULONG): HRESULT; stdcall;
  17538.     function GetNodeInterfaces(ulNodeType: ULONG; var pulcInterfaces: ULONG;
  17539.                 ulcInterfacesMax: ULONG; var rgguidInterfaces: TGUID): HRESULT; stdcall;
  17540.     function GetPinTypes(var pulcPinTypes: ULONG; ulcPinTypesMax: ULONG;
  17541.                var rgulPinTypes: ULONG): HRESULT; stdcall;
  17542.     function GetTemplateConnections(var pulcConnections: ULONG; ulcConnectionsMax: ULONG;
  17543.                var rgConnections: TBDA_TEMPLATE_CONNECTION): HRESULT; stdcall;
  17544.     function CreatePin(ulPinType: ULONG; var pulPinId: ULONG): HRESULT; stdcall;
  17545.     function DeletePin(ulPinId: ULONG): HRESULT; stdcall;
  17546.     function SetMediaType(ulPinId :ULONG; pMediaType: PAM_MEDIA_TYPE): HRESULT; stdcall;
  17547.     function SetMedium(ulPinId: ULONG; pMedium: PREGPINMEDIUM): HRESULT; stdcall;
  17548.     function CreateTopology(ulInputPinId, ulOutputPinId: ULONG): HRESULT; stdcall;
  17549.     function GetControlNode(ulInputPinId, ulOutputPinId, ulNodeType: ULONG;
  17550.                 ppControlNode: IUnknown): HRESULT; stdcall;
  17551.   end;
  17552.  
  17553.   IBDA_VoidTransform = interface(IUnknown)
  17554.     ['{71985F46-1CA1-11d3-9CC8-00C04F7971E0}']
  17555.     function Start: HRESULT; stdcall;
  17556.     function Stop: HRESULT; stdcall;
  17557.   end;
  17558.  
  17559.   IBDA_NullTransform = interface(IUnknown)
  17560.     ['{DDF15B0D-BD25-11d2-9CA0-00C04F7971E0}']
  17561.     function Start: HRESULT; stdcall;
  17562.     function Stop: HRESULT; stdcall;
  17563.   end;
  17564.  
  17565.   IBDA_FrequencyFilter = interface(IUnknown)
  17566.     ['{71985F47-1CA1-11d3-9CC8-00C04F7971E0}']
  17567.     function put_Autotune(var pulTransponder: ULONG): HRESULT; stdcall;
  17568.     function put_Frequency(var pulFrequency: ULONG): HRESULT; stdcall;
  17569.     function get_Frequency(out pulFrequency: ULONG): HRESULT; stdcall;
  17570.     function put_Polarity(var pulPolarity: ULONG): HRESULT; stdcall;
  17571.     function get_Polarity(out pulPolarity: ULONG): HRESULT; stdcall;
  17572.     function put_Range(var pulRange: ULONG): HRESULT; stdcall;
  17573.     function get_Range(out pulRange: ULONG): HRESULT; stdcall;
  17574.   end;
  17575.  
  17576.   IBDA_AutoDemodulate = interface(IUnknown)
  17577.     ['{DDF15B12-BD25-11d2-9CA0-00C04F7971E0}']
  17578.     function put_AutoDemodulate : HRESULT; stdcall;
  17579.   end;
  17580.  
  17581.   IBDA_DigitalDemodulator = interface(IUnknown)
  17582.     ['{EF30F379-985B-4d10-B640-A79D5E04E1E0}']
  17583.     function put_ModulationType(var pModulationType: TModulationType): HRESULT; stdcall;
  17584.     function get_ModulationType(out pModulationType: TModulationType): HRESULT; stdcall;
  17585.     function put_InnerFECMethod(var pFECMethod: TFECMethod): HRESULT; stdcall;
  17586.     function get_InnerFECMethod(out pFECMethod: TFECMethod): HRESULT; stdcall;
  17587.     function put_InnerFECRate(var pFECRate:  TBinaryConvolutionCodeRate): HRESULT; stdcall;
  17588.     function get_InnerFECRate(out pFECRate:  TBinaryConvolutionCodeRate): HRESULT; stdcall;
  17589.     function put_OuterFECMethod(var pFECMethod: TFECMethod): HRESULT; stdcall;
  17590.     function get_OuterFECMethod(out pFECMethod: TFECMethod): HRESULT; stdcall;
  17591.     function put_OuterFECRate(var pFECRate: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  17592.     function get_OuterFECRate(out pFECRate: TBinaryConvolutionCodeRate): HRESULT; stdcall;
  17593.     function put_SymbolRate(var pSymbolRate: ULONG): HRESULT; stdcall;
  17594.     function get_SymbolRate(out pSymbolRate: ULONG): HRESULT; stdcall;
  17595.     function put_SpectralInversion(var pSpectralInversion: TSpectralInversion): HRESULT; stdcall;
  17596.     function get_SpectralInversion(out pSpectralInversion: TSpectralInversion): HRESULT; stdcall;
  17597.   end;
  17598.  
  17599.   TKSPROPERTY_IPSINK = (
  17600.     KSPROPERTY_IPSINK_MULTICASTLIST,
  17601.     KSPROPERTY_IPSINK_ADAPTER_DESCRIPTION,
  17602.     KSPROPERTY_IPSINK_ADAPTER_ADDRESS
  17603.   );
  17604.  
  17605.   IBDA_IPSinkControl = interface(IUnknown)
  17606.     ['{3F4DC8E2-4050-11d3-8F4B-00C04F7971E2}']
  17607.     function GetMulticastList(var pulcbSize: ULONG; pbBuffer: Pointer): HRESULT; stdcall;
  17608.     function GetAdapterIPAddress(var pulcbSize: ULONG; pbBuffer: Pointer): HRESULT; stdcall;
  17609.   end;
  17610.  
  17611.   IEnumPIDMap = interface(IUnknown)
  17612.     ['{afb6c2a2-2c41-11d3-8a60-0000f81e0e4a}']
  17613.     function Next(cRequest: ULONG; var pPIDMap: TPID_MAP; out pcReceived: ULONG): HRESULT; stdcall;
  17614.     function Skip(cRecords: ULONG): HRESULT; stdcall;
  17615.     function Reset: HRESULT; stdcall;
  17616.     function Clone(out ppIEnumPIDMap: IEnumPIDMap): HRESULT; stdcall;
  17617.   end;
  17618.  
  17619.   IMPEG2PIDMap = interface(IUnknown)
  17620.     ['{afb6c2a1-2c41-11d3-8a60-0000f81e0e4a}']
  17621.     function MapPID(culPID: ULONG; var pulPID: ULONG;
  17622.       MediaSampleContent: TMEDIA_SAMPLE_CONTENT): HRESULT; stdcall;
  17623.     function UnmapPID(culPID: ULONG; var pulPID: ULONG): HRESULT; stdcall;
  17624.     function EnumPIDMap(out pIEnumPIDMap: IEnumPIDMap): HRESULT; stdcall;
  17625.   end;
  17626.  
  17627. implementation
  17628.  
  17629. uses ComObj;
  17630.  
  17631. const
  17632.   ole32 = 'ole32.dll';
  17633.   quartz = 'quartz.dll';
  17634.  
  17635. function QzInitialize; external ole32 name 'CoInitialize';
  17636. procedure QzUninitialize; external ole32 name 'CoUninitialize';
  17637. procedure QzFreeUnusedLibraries; external ole32 name 'CoFreeUnusedLibraries';
  17638.  
  17639. function QzGetMalloc; external ole32 name 'CoGetMalloc';
  17640. function QzTaskMemAlloc; external ole32 name 'CoTaskMemAlloc';
  17641. function QzTaskMemRealloc; external ole32 name 'CoTaskMemRealloc';
  17642. procedure QzTaskMemFree; external ole32 name 'CoTaskMemFree';
  17643.  
  17644. function QzCreateFilterObject; external ole32 name 'CoCreateInstance';
  17645. function QzCLSIDFromString; external ole32 name 'CLSIDFromString';
  17646. function QzStringFromGUID2; external ole32 name 'StringFromGUID2';
  17647.  
  17648.  
  17649. function AMGetErrorTextA; external quartz;
  17650. function AMGetErrorTextW; external quartz;
  17651. {$IFDEF UNICODE}
  17652. function AMGetErrorText; external quartz name 'AMGetErrorTextW';
  17653. {$ELSE}
  17654. function AMGetErrorText; external quartz name 'AMGetErrorTextA';
  17655. {$ENDIF}
  17656.  
  17657. // CoFilgraphManager
  17658.  
  17659. class function CoFilgraphManager.Create: IMediaControl;
  17660. begin
  17661.   Result := CreateComObject(CLSID_FilgraphManager) as IMediaControl;
  17662. end;
  17663.  
  17664. class function CoFilgraphManager.CreateRemote(const MachineName: string): IMediaControl;
  17665. begin
  17666.   Result := CreateRemoteComObject(MachineName, CLSID_FilgraphManager) as IMediaControl;
  17667. end;
  17668.  
  17669. // CoAMMultiMediaStream
  17670.  
  17671. class function CoAMMultiMediaStream.Create: IDirectShowStream;
  17672. begin
  17673.   Result := CreateComObject(CLSID_AMMultiMediaStream) as IDirectShowStream;
  17674. end;
  17675.  
  17676. class function CoAMMultiMediaStream.CreateRemote(const MachineName: string): IDirectShowStream;
  17677. begin
  17678.   Result := CreateRemoteComObject(MachineName, CLSID_AMMultiMediaStream) as IDirectShowStream;
  17679. end;
  17680.  
  17681.  
  17682.  
  17683.  
  17684.  
  17685. class function CoSystemTuningSpaces.Create: ITuningSpaceContainer;
  17686. begin
  17687.   Result := CreateComObject(CLSID_SystemTuningSpaces) as ITuningSpaceContainer;
  17688. end;
  17689.  
  17690. class function CoSystemTuningSpaces.CreateRemote(const MachineName: string): ITuningSpaceContainer;
  17691. begin
  17692.   Result := CreateRemoteComObject(MachineName, CLSID_SystemTuningSpaces) as ITuningSpaceContainer;
  17693. end;
  17694.  
  17695. class function CoTuningSpace.Create: ITuningSpace;
  17696. begin
  17697.   Result := CreateComObject(CLSID_TuningSpace) as ITuningSpace;
  17698. end;
  17699.  
  17700. class function CoTuningSpace.CreateRemote(const MachineName: string): ITuningSpace;
  17701. begin
  17702.   Result := CreateRemoteComObject(MachineName, CLSID_TuningSpace) as ITuningSpace;
  17703. end;
  17704.  
  17705. class function CoATSCTuningSpace.Create: IATSCTuningSpace;
  17706. begin
  17707.   Result := CreateComObject(CLSID_ATSCTuningSpace) as IATSCTuningSpace;
  17708. end;
  17709.  
  17710. class function CoATSCTuningSpace.CreateRemote(const MachineName: string): IATSCTuningSpace;
  17711. begin
  17712.   Result := CreateRemoteComObject(MachineName, CLSID_ATSCTuningSpace) as IATSCTuningSpace;
  17713. end;
  17714.  
  17715. class function CoAnalogRadioTuningSpace.Create: IAnalogRadioTuningSpace;
  17716. begin
  17717.   Result := CreateComObject(CLSID_AnalogRadioTuningSpace) as IAnalogRadioTuningSpace;
  17718. end;
  17719.  
  17720. class function CoAnalogRadioTuningSpace.CreateRemote(const MachineName: string): IAnalogRadioTuningSpace;
  17721. begin
  17722.   Result := CreateRemoteComObject(MachineName, CLSID_AnalogRadioTuningSpace) as IAnalogRadioTuningSpace;
  17723. end;
  17724.  
  17725. class function CoAnalogTVTuningSpace.Create: IAnalogTVTuningSpace;
  17726. begin
  17727.   Result := CreateComObject(CLSID_AnalogTVTuningSpace) as IAnalogTVTuningSpace;
  17728. end;
  17729.  
  17730. class function CoAnalogTVTuningSpace.CreateRemote(const MachineName: string): IAnalogTVTuningSpace;
  17731. begin
  17732.   Result := CreateRemoteComObject(MachineName, CLSID_AnalogTVTuningSpace) as IAnalogTVTuningSpace;
  17733. end;
  17734.  
  17735. class function CoDVBTuningSpace.Create: IDVBTuningSpace;
  17736. begin
  17737.   Result := CreateComObject(CLSID_DVBTuningSpace) as IDVBTuningSpace;
  17738. end;
  17739.  
  17740. class function CoDVBTuningSpace.CreateRemote(const MachineName: string): IDVBTuningSpace;
  17741. begin
  17742.   Result := CreateRemoteComObject(MachineName, CLSID_DVBTuningSpace) as IDVBTuningSpace;
  17743. end;
  17744.  
  17745. class function CoComponentTypes.Create: IComponentTypes;
  17746. begin
  17747.   Result := CreateComObject(CLSID_ComponentTypes) as IComponentTypes;
  17748. end;
  17749.  
  17750. class function CoComponentTypes.CreateRemote(const MachineName: string): IComponentTypes;
  17751. begin
  17752.   Result := CreateRemoteComObject(MachineName, CLSID_ComponentTypes) as IComponentTypes;
  17753. end;
  17754.  
  17755. class function CoComponentType.Create: IComponentType;
  17756. begin
  17757.   Result := CreateComObject(CLSID_ComponentType) as IComponentType;
  17758. end;
  17759.  
  17760. class function CoComponentType.CreateRemote(const MachineName: string): IComponentType;
  17761. begin
  17762.   Result := CreateRemoteComObject(MachineName, CLSID_ComponentType) as IComponentType;
  17763. end;
  17764.  
  17765. class function CoLanguageComponentType.Create: ILanguageComponentType;
  17766. begin
  17767.   Result := CreateComObject(CLSID_LanguageComponentType) as ILanguageComponentType;
  17768. end;
  17769.  
  17770. class function CoLanguageComponentType.CreateRemote(const MachineName: string): ILanguageComponentType;
  17771. begin
  17772.   Result := CreateRemoteComObject(MachineName, CLSID_LanguageComponentType) as ILanguageComponentType;
  17773. end;
  17774.  
  17775. class function CoMPEG2ComponentType.Create: IMPEG2ComponentType;
  17776. begin
  17777.   Result := CreateComObject(CLSID_MPEG2ComponentType) as IMPEG2ComponentType;
  17778. end;
  17779.  
  17780. class function CoMPEG2ComponentType.CreateRemote(const MachineName: string): IMPEG2ComponentType;
  17781. begin
  17782.   Result := CreateRemoteComObject(MachineName, CLSID_MPEG2ComponentType) as IMPEG2ComponentType;
  17783. end;
  17784.  
  17785. class function CoATSCComponentType.Create: IATSCComponentType;
  17786. begin
  17787.   Result := CreateComObject(CLSID_ATSCComponentType) as IATSCComponentType;
  17788. end;
  17789.  
  17790. class function CoATSCComponentType.CreateRemote(const MachineName: string): IATSCComponentType;
  17791. begin
  17792.   Result := CreateRemoteComObject(MachineName, CLSID_ATSCComponentType) as IATSCComponentType;
  17793. end;
  17794.  
  17795. class function CoComponents.Create: IComponents;
  17796. begin
  17797.   Result := CreateComObject(CLSID_Components) as IComponents;
  17798. end;
  17799.  
  17800. class function CoComponents.CreateRemote(const MachineName: string): IComponents;
  17801. begin
  17802.   Result := CreateRemoteComObject(MachineName, CLSID_Components) as IComponents;
  17803. end;
  17804.  
  17805. class function CoComponent.Create: IComponent;
  17806. begin
  17807.   Result := CreateComObject(CLSID_Component) as IComponent;
  17808. end;
  17809.  
  17810. class function CoComponent.CreateRemote(const MachineName: string): IComponent;
  17811. begin
  17812.   Result := CreateRemoteComObject(MachineName, CLSID_Component) as IComponent;
  17813. end;
  17814.  
  17815. class function CoMPEG2Component.Create: IMPEG2Component;
  17816. begin
  17817.   Result := CreateComObject(CLSID_MPEG2Component) as IMPEG2Component;
  17818. end;
  17819.  
  17820. class function CoMPEG2Component.CreateRemote(const MachineName: string): IMPEG2Component;
  17821. begin
  17822.   Result := CreateRemoteComObject(MachineName, CLSID_MPEG2Component) as IMPEG2Component;
  17823. end;
  17824.  
  17825. class function CoTuneRequest.Create: ITuneRequest;
  17826. begin
  17827.   Result := CreateComObject(CLSID_TuneRequest) as ITuneRequest;
  17828. end;
  17829.  
  17830. class function CoTuneRequest.CreateRemote(const MachineName: string): ITuneRequest;
  17831. begin
  17832.   Result := CreateRemoteComObject(MachineName, CLSID_TuneRequest) as ITuneRequest;
  17833. end;
  17834.  
  17835. class function CoChannelTuneRequest.Create: IChannelTuneRequest;
  17836. begin
  17837.   Result := CreateComObject(CLSID_ChannelTuneRequest) as IChannelTuneRequest;
  17838. end;
  17839.  
  17840. class function CoChannelTuneRequest.CreateRemote(const MachineName: string): IChannelTuneRequest;
  17841. begin
  17842.   Result := CreateRemoteComObject(MachineName, CLSID_ChannelTuneRequest) as IChannelTuneRequest;
  17843. end;
  17844.  
  17845. class function CoATSCChannelTuneRequest.Create: IATSCChannelTuneRequest;
  17846. begin
  17847.   Result := CreateComObject(CLSID_ATSCChannelTuneRequest) as IATSCChannelTuneRequest;
  17848. end;
  17849.  
  17850. class function CoATSCChannelTuneRequest.CreateRemote(const MachineName: string): IATSCChannelTuneRequest;
  17851. begin
  17852.   Result := CreateRemoteComObject(MachineName, CLSID_ATSCChannelTuneRequest) as IATSCChannelTuneRequest;
  17853. end;
  17854.  
  17855. class function CoLocator.Create: ILocator;
  17856. begin
  17857.   Result := CreateComObject(CLSID_Locator) as ILocator;
  17858. end;
  17859.  
  17860. class function CoLocator.CreateRemote(const MachineName: string): ILocator;
  17861. begin
  17862.   Result := CreateRemoteComObject(MachineName, CLSID_Locator) as ILocator;
  17863. end;
  17864.  
  17865. class function CoATSCLocator.Create: IATSCLocator;
  17866. begin
  17867.   Result := CreateComObject(CLSID_ATSCLocator) as IATSCLocator;
  17868. end;
  17869.  
  17870. class function CoATSCLocator.CreateRemote(const MachineName: string): IATSCLocator;
  17871. begin
  17872.   Result := CreateRemoteComObject(MachineName, CLSID_ATSCLocator) as IATSCLocator;
  17873. end;
  17874.  
  17875. class function CoDVBTLocator.Create: IDVBTLocator;
  17876. begin
  17877.   Result := CreateComObject(CLSID_DVBTLocator) as IDVBTLocator;
  17878. end;
  17879.  
  17880. class function CoDVBTLocator.CreateRemote(const MachineName: string): IDVBTLocator;
  17881. begin
  17882.   Result := CreateRemoteComObject(MachineName, CLSID_DVBTLocator) as IDVBTLocator;
  17883. end;
  17884.  
  17885. class function CoDVBSLocator.Create: IDVBSLocator;
  17886. begin
  17887.   Result := CreateComObject(CLSID_DVBSLocator) as IDVBSLocator;
  17888. end;
  17889.  
  17890. class function CoDVBSLocator.CreateRemote(const MachineName: string): IDVBSLocator;
  17891. begin
  17892.   Result := CreateRemoteComObject(MachineName, CLSID_DVBSLocator) as IDVBSLocator;
  17893. end;
  17894.  
  17895. class function CoDVBCLocator.Create: ILocator;
  17896. begin
  17897.   Result := CreateComObject(CLSID_DVBCLocator) as ILocator;
  17898. end;
  17899.  
  17900. class function CoDVBCLocator.CreateRemote(const MachineName: string): ILocator;
  17901. begin
  17902.   Result := CreateRemoteComObject(MachineName, CLSID_DVBCLocator) as ILocator;
  17903. end;
  17904.  
  17905. class function CoDVBTuneRequest.Create: IDVBTuneRequest;
  17906. begin
  17907.   Result := CreateComObject(CLSID_DVBTuneRequest) as IDVBTuneRequest;
  17908. end;
  17909.  
  17910. class function CoDVBTuneRequest.CreateRemote(const MachineName: string): IDVBTuneRequest;
  17911. begin
  17912.   Result := CreateRemoteComObject(MachineName, CLSID_DVBTuneRequest) as IDVBTuneRequest;
  17913. end;
  17914.  
  17915. class function CoCreatePropBagOnRegKey.Create: ICreatePropBagOnRegKey;
  17916. begin
  17917.   Result := CreateComObject(CLSID_CreatePropBagOnRegKey) as ICreatePropBagOnRegKey;
  17918. end;
  17919.  
  17920. class function CoCreatePropBagOnRegKey.CreateRemote(const MachineName: string): ICreatePropBagOnRegKey;
  17921. begin
  17922.   Result := CreateRemoteComObject(MachineName, CLSID_CreatePropBagOnRegKey) as ICreatePropBagOnRegKey;
  17923. end;
  17924. // DirectX Transform
  17925. class function CoDXTransformFactory.Create: IDXTransformFactory;
  17926. begin
  17927.   Result := CreateComObject(CLSID_DXTransformFactory) as IDXTransformFactory;
  17928. end;
  17929.  
  17930. class function CoDXTransformFactory.CreateRemote(const MachineName: string): IDXTransformFactory;
  17931. begin
  17932.   Result := CreateRemoteComObject(MachineName, CLSID_DXTransformFactory) as IDXTransformFactory;
  17933. end;
  17934.  
  17935. class function CoDXTaskManager.Create: IDXTaskManager;
  17936. begin
  17937.   Result := CreateComObject(CLSID_DXTaskManager) as IDXTaskManager;
  17938. end;
  17939.  
  17940. class function CoDXTaskManager.CreateRemote(const MachineName: string): IDXTaskManager;
  17941. begin
  17942.   Result := CreateRemoteComObject(MachineName, CLSID_DXTaskManager) as IDXTaskManager;
  17943. end;
  17944.  
  17945. class function CoDXTScale.Create: IDXTScale;
  17946. begin
  17947.   Result := CreateComObject(CLSID_DXTScale) as IDXTScale;
  17948. end;
  17949.  
  17950. class function CoDXTScale.CreateRemote(const MachineName: string): IDXTScale;
  17951. begin
  17952.   Result := CreateRemoteComObject(MachineName, CLSID_DXTScale) as IDXTScale;
  17953. end;
  17954.  
  17955. class function CoDXSurface.Create: IDXSurface;
  17956. begin
  17957.   Result := CreateComObject(CLSID_DXSurface) as IDXSurface;
  17958. end;
  17959.  
  17960. class function CoDXSurface.CreateRemote(const MachineName: string): IDXSurface;
  17961. begin
  17962.   Result := CreateRemoteComObject(MachineName, CLSID_DXSurface) as IDXSurface;
  17963. end;
  17964.  
  17965. class function CoDXSurfaceModifier.Create: IDXSurfaceModifier;
  17966. begin
  17967.   Result := CreateComObject(CLSID_DXSurfaceModifier) as IDXSurfaceModifier;
  17968. end;
  17969.  
  17970. class function CoDXSurfaceModifier.CreateRemote(const MachineName: string): IDXSurfaceModifier;
  17971. begin
  17972.   Result := CreateRemoteComObject(MachineName, CLSID_DXSurfaceModifier) as IDXSurfaceModifier;
  17973. end;
  17974.  
  17975. class function CoDXGradient.Create: IDXGradient;
  17976. begin
  17977.   Result := CreateComObject(CLSID_DXGradient) as IDXGradient;
  17978. end;
  17979.  
  17980. class function CoDXGradient.CreateRemote(const MachineName: string): IDXGradient;
  17981. begin
  17982.   Result := CreateRemoteComObject(MachineName, CLSID_DXGradient) as IDXGradient;
  17983. end;
  17984.  
  17985. // Dexter Library
  17986.  
  17987. class function CoAMTimeline.Create: IAMTimeline;
  17988. begin
  17989.   Result := CreateComObject(CLSID_AMTimeline) as IAMTimeline;
  17990. end;
  17991.  
  17992. class function CoAMTimeline.CreateRemote(const MachineName: string): IAMTimeline;
  17993. begin
  17994.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimeline) as IAMTimeline;
  17995. end;
  17996.  
  17997. class function CoAMTimelineObj.Create: IAMTimelineObj;
  17998. begin
  17999.   Result := CreateComObject(CLSID_AMTimelineObj) as IAMTimelineObj;
  18000. end;
  18001.  
  18002. class function CoAMTimelineObj.CreateRemote(const MachineName: string): IAMTimelineObj;
  18003. begin
  18004.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineObj) as IAMTimelineObj;
  18005. end;
  18006.  
  18007. class function CoAMTimelineSrc.Create: IAMTimelineSrc;
  18008. begin
  18009.   Result := CreateComObject(CLSID_AMTimelineSrc) as IAMTimelineSrc;
  18010. end;
  18011.  
  18012. class function CoAMTimelineSrc.CreateRemote(const MachineName: string): IAMTimelineSrc;
  18013. begin
  18014.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineSrc) as IAMTimelineSrc;
  18015. end;
  18016.  
  18017. class function CoAMTimelineTrack.Create: IAMTimelineTrack;
  18018. begin
  18019.   Result := CreateComObject(CLSID_AMTimelineTrack) as IAMTimelineTrack;
  18020. end;
  18021.  
  18022. class function CoAMTimelineTrack.CreateRemote(const MachineName: string): IAMTimelineTrack;
  18023. begin
  18024.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineTrack) as IAMTimelineTrack;
  18025. end;
  18026.  
  18027. class function CoAMTimelineComp.Create: IAMTimelineComp;
  18028. begin
  18029.   Result := CreateComObject(CLSID_AMTimelineComp) as IAMTimelineComp;
  18030. end;
  18031.  
  18032. class function CoAMTimelineComp.CreateRemote(const MachineName: string): IAMTimelineComp;
  18033. begin
  18034.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineComp) as IAMTimelineComp;
  18035. end;
  18036.  
  18037. class function CoAMTimelineGroup.Create: IAMTimelineGroup;
  18038. begin
  18039.   Result := CreateComObject(CLSID_AMTimelineGroup) as IAMTimelineGroup;
  18040. end;
  18041.  
  18042. class function CoAMTimelineGroup.CreateRemote(const MachineName: string): IAMTimelineGroup;
  18043. begin
  18044.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineGroup) as IAMTimelineGroup;
  18045. end;
  18046.  
  18047. class function CoAMTimelineTrans.Create: IAMTimelineTrans;
  18048. begin
  18049.   Result := CreateComObject(CLSID_AMTimelineTrans) as IAMTimelineTrans;
  18050. end;
  18051.  
  18052. class function CoAMTimelineTrans.CreateRemote(const MachineName: string): IAMTimelineTrans;
  18053. begin
  18054.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineTrans) as IAMTimelineTrans;
  18055. end;
  18056.  
  18057. class function CoAMTimelineEffect.Create: IAMTimelineEffect;
  18058. begin
  18059.   Result := CreateComObject(CLSID_AMTimelineEffect) as IAMTimelineEffect;
  18060. end;
  18061.  
  18062. class function CoAMTimelineEffect.CreateRemote(const MachineName: string): IAMTimelineEffect;
  18063. begin
  18064.   Result := CreateRemoteComObject(MachineName, CLSID_AMTimelineEffect) as IAMTimelineEffect;
  18065. end;
  18066.  
  18067. class function CoRenderEngine.Create: IRenderEngine;
  18068. begin
  18069.   Result := CreateComObject(CLSID_RenderEngine) as IRenderEngine;
  18070. end;
  18071.  
  18072. class function CoRenderEngine.CreateRemote(const MachineName: string): IRenderEngine;
  18073. begin
  18074.   Result := CreateRemoteComObject(MachineName, CLSID_RenderEngine) as IRenderEngine;
  18075. end;
  18076.  
  18077. class function CoSmartRenderEngine.Create: IRenderEngine;
  18078. begin
  18079.   Result := CreateComObject(CLSID_SmartRenderEngine) as IRenderEngine;
  18080. end;
  18081.  
  18082. class function CoSmartRenderEngine.CreateRemote(const MachineName: string): IRenderEngine;
  18083. begin
  18084.   Result := CreateRemoteComObject(MachineName, CLSID_SmartRenderEngine) as IRenderEngine;
  18085. end;
  18086.  
  18087. class function CoAudMixer.Create: IBaseFilter;
  18088. begin
  18089.   Result := CreateComObject(CLSID_AudMixer) as IBaseFilter;
  18090. end;
  18091.  
  18092. class function CoAudMixer.CreateRemote(const MachineName: string): IBaseFilter;
  18093. begin
  18094.   Result := CreateRemoteComObject(MachineName, CLSID_AudMixer) as IBaseFilter;
  18095. end;
  18096.  
  18097. class function CoXml2Dex.Create: IXml2Dex;
  18098. begin
  18099.   Result := CreateComObject(CLSID_Xml2Dex) as IXml2Dex;
  18100. end;
  18101.  
  18102. class function CoXml2Dex.CreateRemote(const MachineName: string): IXml2Dex;
  18103. begin
  18104.   Result := CreateRemoteComObject(MachineName, CLSID_Xml2Dex) as IXml2Dex;
  18105. end;
  18106.  
  18107. class function CoMediaLocator.Create: IMediaLocator;
  18108. begin
  18109.   Result := CreateComObject(CLSID_MediaLocator) as IMediaLocator;
  18110. end;
  18111.  
  18112. class function CoMediaLocator.CreateRemote(const MachineName: string): IMediaLocator;
  18113. begin
  18114.   Result := CreateRemoteComObject(MachineName, CLSID_MediaLocator) as IMediaLocator;
  18115. end;
  18116.  
  18117. class function CoPropertySetter.Create: IPropertySetter;
  18118. begin
  18119.   Result := CreateComObject(CLSID_PropertySetter) as IPropertySetter;
  18120. end;
  18121.  
  18122. class function CoPropertySetter.CreateRemote(const MachineName: string): IPropertySetter;
  18123. begin
  18124.   Result := CreateRemoteComObject(MachineName, CLSID_PropertySetter) as IPropertySetter;
  18125. end;
  18126.  
  18127. class function CoMediaDet.Create: IMediaDet;
  18128. begin
  18129.   Result := CreateComObject(CLSID_MediaDet) as IMediaDet;
  18130. end;
  18131.  
  18132. class function CoMediaDet.CreateRemote(const MachineName: string): IMediaDet;
  18133. begin
  18134.   Result := CreateRemoteComObject(MachineName, CLSID_MediaDet) as IMediaDet;
  18135. end;
  18136.  
  18137. class function CoSampleGrabber.Create: ISampleGrabber;
  18138. begin
  18139.   Result := CreateComObject(CLSID_SampleGrabber) as ISampleGrabber;
  18140. end;
  18141.  
  18142. class function CoSampleGrabber.CreateRemote(const MachineName: string): ISampleGrabber;
  18143. begin
  18144.   Result := CreateRemoteComObject(MachineName, CLSID_SampleGrabber) as ISampleGrabber;
  18145. end;
  18146.  
  18147. class function CoNullRenderer.Create: IBaseFilter;
  18148. begin
  18149.   Result := CreateComObject(CLSID_NullRenderer) as IBaseFilter;
  18150. end;
  18151.  
  18152. class function CoNullRenderer.CreateRemote(const MachineName: string): IBaseFilter;
  18153. begin
  18154.   Result := CreateRemoteComObject(MachineName, CLSID_NullRenderer) as IBaseFilter;
  18155. end;
  18156.  
  18157. class function CoDxtCompositor.Create: IDxtCompositor;
  18158. begin
  18159.   Result := CreateComObject(CLSID_DxtCompositor) as IDxtCompositor;
  18160. end;
  18161.  
  18162. class function CoDxtCompositor.CreateRemote(const MachineName: string): IDxtCompositor;
  18163. begin
  18164.   Result := CreateRemoteComObject(MachineName, CLSID_DxtCompositor) as IDxtCompositor;
  18165. end;
  18166.  
  18167. class function CoDxtAlphaSetter.Create: IDxtAlphaSetter;
  18168. begin
  18169.   Result := CreateComObject(CLSID_DxtAlphaSetter) as IDxtAlphaSetter;
  18170. end;
  18171.  
  18172. class function CoDxtAlphaSetter.CreateRemote(const MachineName: string): IDxtAlphaSetter;
  18173. begin
  18174.   Result := CreateRemoteComObject(MachineName, CLSID_DxtAlphaSetter) as IDxtAlphaSetter;
  18175. end;
  18176.  
  18177. class function CoDxtJpeg.Create: IDxtJpeg;
  18178. begin
  18179.   Result := CreateComObject(CLSID_DxtJpeg) as IDxtJpeg;
  18180. end;
  18181.  
  18182. class function CoDxtJpeg.CreateRemote(const MachineName: string): IDxtJpeg;
  18183. begin
  18184.   Result := CreateRemoteComObject(MachineName, CLSID_DxtJpeg) as IDxtJpeg;
  18185. end;
  18186.  
  18187. class function CoColorSource.Create: IBaseFilter;
  18188. begin
  18189.   Result := CreateComObject(CLSID_ColorSource) as IBaseFilter;
  18190. end;
  18191.  
  18192. class function CoColorSource.CreateRemote(const MachineName: string): IBaseFilter;
  18193. begin
  18194.   Result := CreateRemoteComObject(MachineName, CLSID_ColorSource) as IBaseFilter;
  18195. end;
  18196.  
  18197. class function CoDxtKey.Create: IDxtKey;
  18198. begin
  18199.   Result := CreateComObject(CLSID_DxtKey) as IDxtKey;
  18200. end;
  18201.  
  18202. class function CoDxtKey.CreateRemote(const MachineName: string): IDxtKey;
  18203. begin
  18204.   Result := CreateRemoteComObject(MachineName, CLSID_DxtKey) as IDxtKey;
  18205. end;
  18206.  
  18207. end.
  18208.  
  18209.