DSUtil.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:200k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1.     (*********************************************************************
  2.      *  DSPack 2.3.3                                                     *
  3.      *                                                                   *
  4.      *  home page : http://www.progdigy.com                              *
  5.      *  email     : hgourvest@progdigy.com                               *
  6.      *   Thanks to Michael Andersen. (DSVideoWindowEx)                   *
  7.      *                                                                   *
  8.      *  date      : 21-02-2003                                           *
  9.      *                                                                   *
  10.      *  The contents of this file are used with permission, subject to   *
  11.      *  the Mozilla Public License Version 1.1 (the "License"); you may  *
  12.      *  not use this file except in compliance with the License. You may *
  13.      *  obtain a copy of the License at                                  *
  14.      *  http://www.mozilla.org/MPL/MPL-1.1.html                          *
  15.      *                                                                   *
  16.      *  Software distributed under the License is distributed on an      *
  17.      *  "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or   *
  18.      *  implied. See the License for the specific language governing     *
  19.      *  rights and limitations under the License.                        *
  20.      *                                                                   *
  21.      *  Contributor(s)                                                   *
  22.      *    Peter J. Haas     <DSPack@pjh2.de>                             *
  23.      *    Andriy Nevhasymyy <a.n@email.com>                              *
  24.      *    Milenko Mitrovic  <dcoder@dsp-worx.de>                         *
  25.      *    Michael Andersen  <michael@mechdata.dk>                        *
  26.      *    Martin Offenwanger <coder@dsplayer.de>                         *
  27.      *                                                                   *
  28.      *********************************************************************)
  29. {
  30.   @abstract(Methods & usefull Class for Direct Show programming.)
  31.   @author(Henri Gourvest: hgourvest@progdigy.com)
  32.   @created(Mar 14, 2002)
  33.   @lastmod(Oct 24, 2003)
  34. }
  35. unit DSUtil;
  36. {$B-}  // needed at least for TSysDevEnum.FilterIndexOfFriendlyName
  37. {$I jedi.inc}
  38. {$IFDEF COMPILER7_UP}
  39.   {$WARN UNSAFE_CODE OFF}
  40.   {$WARN UNSAFE_TYPE OFF}
  41.   {$WARN UNSAFE_CAST OFF}
  42. {$ENDIF}
  43. interface
  44. uses
  45.   {$IFDEF VER140} Variants, {$ENDIF}
  46.   {$IFDEF VER150} Variants, {$ENDIF}
  47.   Windows, Controls, SysUtils, ActiveX, Classes, MMSystem, DirectShow9, WMF9,
  48.   DirectDraw;
  49. const
  50.   IID_IPropertyBag          : TGUID = '{55272A00-42CB-11CE-8135-00AA004BB851}';
  51.   IID_ISpecifyPropertyPages : TGUID = '{B196B28B-BAB4-101A-B69C-00AA00341D07}';
  52.   IID_IPersistStream        : TGUID = '{00000109-0000-0000-C000-000000000046}';
  53.   IID_IMoniker              : TGUID = '{0000000F-0000-0000-C000-000000000046}';
  54.   // MS Mepg4 DMO
  55.   MEDIASUBTYPE_MP42         : TGUID = '{3234504D-0000-0010-8000-00AA00389B71}';
  56.   // DIVX
  57.   MEDIASUBTYPE_DIVX         : TGUID = '{58564944-0000-0010-8000-00AA00389B71}';
  58.   // VoxWare MetaSound
  59.   MEDIASUBTYPE_VOXWARE      : TGUID = '{00000075-0000-0010-8000-00AA00389B71}';
  60.   MiliSecPerDay : Cardinal = 86400000;
  61.   MAX_TIME : Int64 = $7FFFFFFFFFFFFFFF;
  62.   bits555: array[0..2] of DWord = ($007C00, $0003E0, $00001F);
  63.   bits565: array[0..2] of DWord = ($00F800, $0007E0, $00001F);
  64.   bits888: array[0..2] of DWord = ($FF0000, $00FF00, $0000FF);
  65. ////////////////////////////////////////////////////////////////////////////////
  66. // DIVX ressources translated from latest OpenDivx DirectX Codec
  67.   // divx
  68.   CLSID_DIVX    : TGUID = '{78766964-0000-0010-8000-00aa00389b71}';
  69.   // DIVX
  70.   CLSID_DivX_U  : TGUID = '{58564944-0000-0010-8000-00aa00389b71}';
  71.   // dvx1
  72.   CLSID_DivX_   : TGUID = '{31787664-0000-0010-8000-00aa00389b71}';
  73.   // DVX1
  74.   CLSID_DivX__U : TGUID = '{31585644-0000-0010-8000-00aa00389b71}';
  75.   // dx50
  76.   CLSID_dx50    : TGUID = '{30357864-0000-0010-8000-00aa00389b71}';
  77.   // DX50
  78.   CLSID_DX50_   : TGUID = '{30355844-0000-0010-8000-00aa00389b71}';
  79.   // div6
  80.   CLSID_div6    : TGUID = '{36766964-0000-0010-8000-00aa00389b71}';
  81.   // DIV6
  82.   CLSID_DIV6_   : TGUID = '{36564944-0000-0010-8000-00aa00389b71}';
  83.   // div5
  84.   CLSID_div5    : TGUID = '{35766964-0000-0010-8000-00aa00389b71}';
  85.   // DIV5
  86.   CLSID_DIV5_   : TGUID = '{35564944-0000-0010-8000-00aa00389b71}';
  87.   // div4
  88.   CLSID_div4    : TGUID = '{34766964-0000-0010-8000-00aa00389b71}';
  89.   // DIV4
  90.   CLSID_DIV4_   : TGUID = '{34564944-0000-0010-8000-00aa00389b71}';
  91.   // div3
  92.   CLSID_div3    : TGUID = '{33766964-0000-0010-8000-00aa00389b71}';
  93.   // DIV3
  94.   CLSID_DIV3_   : TGUID = '{33564944-0000-0010-8000-00aa00389b71}';
  95.   CLSID_DIVXCodec           : TGUID = '{78766964-0000-0010-8000-00aa00389b71}';
  96.   IID_IIDivXFilterInterface : TGUID = '{D132EE97-3E38-4030-8B17-59163B30A1F5}';
  97.   CLSID_DivXPropertiesPage  : TGUID = '{310e42a0-f913-11d4-887c-006008dc5c26}';
  98. type
  99. {$IFDEF VER130}
  100.   PPointer = ^Pointer;
  101. {$ENDIF}
  102.   { Interface to control the Divx Decoder filter.
  103.     TODO: discover the last function ... }
  104.   IDivXFilterInterface = interface(IUnknown)
  105. ['{D132EE97-3E38-4030-8B17-59163B30A1F5}']
  106.     { OpenDivx }
  107.     // current postprocessing level 0..100
  108.     function get_PPLevel(out PPLevel: integer): HRESULT; stdcall;
  109.     // new postprocessing level 0..100
  110.     function put_PPLevel(PPLevel: integer): HRESULT; stdcall;
  111.     // Put the default postprocessing = 0
  112.     function put_DefaultPPLevel: HRESULT; stdcall;
  113.     { DIVX }
  114.     function put_MaxDelayAllowed(maxdelayallowed: integer): HRESULT; stdcall;
  115.     function put_Brightness(brightness: integer): HRESULT; stdcall;
  116.     function put_Contrast(contrast: integer): HRESULT; stdcall;
  117.     function put_Saturation(saturation: integer): HRESULT; stdcall;
  118.     function get_MaxDelayAllowed(out maxdelayallowed: integer): HRESULT; stdcall;
  119.     function get_Brightness(out brightness: integer): HRESULT; stdcall;
  120.     function get_Contrast(out contrast: integer): HRESULT; stdcall;
  121.     function get_Saturation(out saturation: integer): HRESULT; stdcall;
  122.     function put_AspectRatio(x, y: integer): HRESULT; stdcall;
  123.     function get_AspectRatio(out x, y: integer): HRESULT; stdcall;
  124.   end;
  125. ////////////////////////////////////////////////////////////////////////////////
  126. // Ogg Vorbis
  127. type
  128.   TVORBISFORMAT = record
  129.     nChannels:        WORD;
  130.     nSamplesPerSec:   Longword;
  131.     nMinBitsPerSec:   Longword;
  132.     nAvgBitsPerSec:   Longword;
  133.     nMaxBitsPerSec:   Longword;
  134.     fQuality:         Double;
  135.   end;
  136. const
  137.   // f07e245f-5a1f-4d1e-8bff-dc31d84a55ab
  138.   CLSID_OggSplitter: TGUID = '{f07e245f-5a1f-4d1e-8bff-dc31d84a55ab}';
  139.   // {078C3DAA-9E58-4d42-9E1C-7C8EE79539C5}
  140.   CLSID_OggSplitPropPage: TGUID = '{078C3DAA-9E58-4d42-9E1C-7C8EE79539C5}';
  141.   // 8cae96b7-85b1-4605-b23c-17ff5262b296
  142.   CLSID_OggMux: TGUID = '{8cae96b7-85b1-4605-b23c-17ff5262b296}';
  143.   // {AB97AFC3-D08E-4e2d-98E0-AEE6D4634BA4}
  144.   CLSID_OggMuxPropPage: TGUID = '{AB97AFC3-D08E-4e2d-98E0-AEE6D4634BA4}';
  145.   // {889EF574-0656-4B52-9091-072E52BB1B80}
  146.   CLSID_VorbisEnc: TGUID = '{889EF574-0656-4B52-9091-072E52BB1B80}';
  147.   // {c5379125-fd36-4277-a7cd-fab469ef3a2f}
  148.   CLSID_VorbisEncPropPage: TGUID = '{c5379125-fd36-4277-a7cd-fab469ef3a2f}';
  149.   // 02391f44-2767-4e6a-a484-9b47b506f3a4
  150.   CLSID_VorbisDec: TGUID = '{02391f44-2767-4e6a-a484-9b47b506f3a4}';
  151.   // 77983549-ffda-4a88-b48f-b924e8d1f01c
  152.   CLSID_OggDSAboutPage: TGUID = '{77983549-ffda-4a88-b48f-b924e8d1f01c}';
  153.   // {D2855FA9-61A7-4db0-B979-71F297C17A04}
  154.   MEDIASUBTYPE_Ogg: TGUID = '{D2855FA9-61A7-4db0-B979-71F297C17A04}';
  155.   // cddca2d5-6d75-4f98-840e-737bedd5c63b
  156.   MEDIASUBTYPE_Vorbis: TGUID = '{cddca2d5-6d75-4f98-840e-737bedd5c63b}';
  157.   // 6bddfa7e-9f22-46a9-ab5e-884eff294d9f
  158.   FORMAT_VorbisFormat: TGUID = '{6bddfa7e-9f22-46a9-ab5e-884eff294d9f}';
  159. ////////////////////////////////////////////////////////////////////////////////
  160. // WMF9 Utils
  161. type
  162.   TWMPofiles8 = (
  163.     wmp_V80_255VideoPDA,
  164.     wmp_V80_150VideoPDA,
  165.     wmp_V80_28856VideoMBR,
  166.     wmp_V80_100768VideoMBR,
  167.     wmp_V80_288100VideoMBR,
  168.     wmp_V80_288Video,
  169.     wmp_V80_56Video,
  170.     wmp_V80_100Video,
  171.     wmp_V80_256Video,
  172.     wmp_V80_384Video,
  173.     wmp_V80_768Video,
  174.     wmp_V80_700NTSCVideo,
  175.     wmp_V80_1400NTSCVideo,
  176.     wmp_V80_384PALVideo,
  177.     wmp_V80_700PALVideo,
  178.     wmp_V80_288MonoAudio,
  179.     wmp_V80_288StereoAudio,
  180.     wmp_V80_32StereoAudio,
  181.     wmp_V80_48StereoAudio,
  182.     wmp_V80_64StereoAudio,
  183.     wmp_V80_96StereoAudio,
  184.     wmp_V80_128StereoAudio,
  185.     wmp_V80_288VideoOnly,
  186.     wmp_V80_56VideoOnly,
  187.     wmp_V80_FAIRVBRVideo,
  188.     wmp_V80_HIGHVBRVideo,
  189.     wmp_V80_BESTVBRVideo
  190.   );
  191. const
  192.    WMProfiles8 : array[TWMPofiles8] of TGUID =
  193.     ('{FEEDBCDF-3FAC-4c93-AC0D-47941EC72C0B}',
  194.      '{AEE16DFA-2C14-4a2f-AD3F-A3034031784F}',
  195.      '{D66920C4-C21F-4ec8-A0B4-95CF2BD57FC4}',
  196.      '{5BDB5A0E-979E-47d3-9596-73B386392A55}',
  197.      '{D8722C69-2419-4b36-B4E0-6E17B60564E5}',
  198.      '{3DF678D9-1352-4186-BBF8-74F0C19B6AE2}',
  199.      '{254E8A96-2612-405c-8039-F0BF725CED7D}',
  200.      '{A2E300B4-C2D4-4fc0-B5DD-ECBD948DC0DF}',
  201.      '{BBC75500-33D2-4466-B86B-122B201CC9AE}',
  202.      '{29B00C2B-09A9-48bd-AD09-CDAE117D1DA7}',
  203.      '{74D01102-E71A-4820-8F0D-13D2EC1E4872}',
  204.      '{C8C2985F-E5D9-4538-9E23-9B21BF78F745}',
  205.      '{931D1BEE-617A-4bcd-9905-CCD0786683EE}',
  206.      '{9227C692-AE62-4f72-A7EA-736062D0E21E}',
  207.      '{EC298949-639B-45e2-96FD-4AB32D5919C2}',
  208.      '{7EA3126D-E1BA-4716-89AF-F65CEE0C0C67}',
  209.      '{7E4CAB5C-35DC-45bb-A7C0-19B28070D0CC}',
  210.      '{60907F9F-B352-47e5-B210-0EF1F47E9F9D}',
  211.      '{5EE06BE5-492B-480a-8A8F-12F373ECF9D4}',
  212.      '{09BB5BC4-3176-457f-8DD6-3CD919123E2D}',
  213.      '{1FC81930-61F2-436f-9D33-349F2A1C0F10}',
  214.      '{407B9450-8BDC-4ee5-88B8-6F527BD941F2}',
  215.      '{8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF}',
  216.      '{6E2A6955-81DF-4943-BA50-68A986A708F6}',
  217.      '{3510A862-5850-4886-835F-D78EC6A64042}',
  218.      '{0F10D9D3-3B04-4fb0-A3D3-88D4AC854ACC}',
  219.      '{048439BA-309C-440e-9CB4-3DCCA3756423}');
  220.   function ProfileFromGUID(const GUID: TGUID): TWMPofiles8;
  221. ////////////////////////////////////////////////////////////////////////////////
  222.   { Frees an object reference and replaces the reference with Nil. (Delphi4 compatibility)}
  223.   procedure FreeAndNil(var Obj);
  224.   { Enable Graphedit to connect with a filter graph.<br>
  225.     The application must register the filter graph instance in the Running Object
  226.     Table (ROT). The ROT is a globally accessible look-up table that keeps track
  227.     of running objects. Objects are registered in the ROT by moniker. To connect
  228.     to the graph, GraphEdit searches the ROT for monikers whose display name matches
  229.     a particular format: !FilterGraph X pid Y.<br>
  230.     <b>Graph:</b> a graph interface (IGraphBuilder, IFilterGraph, IFilterGraph2).<br>
  231.     <b>ID:</b> return the ROT identifier.}
  232.   function AddGraphToRot(Graph: IFilterGraph; out ID: integer): HRESULT;
  233.   { Disable Graphedit to connect with your filter graph.<br>
  234.     <b>ID:</b> identifier provided by the @link(AddGraphToRot) method.}
  235.   function RemoveGraphFromRot(ID: integer): HRESULT;
  236.   { deprecated, convert a Time code event to TDVD_TimeCode record. }
  237.   function IntToTimeCode(x : longint): TDVDTimeCode;
  238.   { Return a string explaining a filter graph event. }
  239.   function  GetEventCodeDef(code: longint): string;
  240.   { General purpose function to delete a heap allocated TAM_MEDIA_TYPE structure
  241.     which is useful when calling IEnumMediaTypes.Next as the interface
  242.     implementation allocates the structures which you must later delete
  243.     the format block may also be a pointer to an interface to release. }
  244.   procedure DeleteMediaType(pmt: PAMMediaType);
  245.   { The CreateMediaType function allocates a new AM_MEDIA_TYPE structure,
  246.     including the format block. This also comes in useful when using the
  247.     IEnumMediaTypes interface so that you can copy a media type, you can do
  248.     nearly the same by creating a TMediaType class but as soon as it goes out
  249.     of scope the destructor will delete the memory it allocated
  250.     (this takes a copy of the memory). }
  251.   function  CreateMediaType(pSrc: PAMMediaType): PAMMediaType;
  252.   { The CopyMediaType function copies an AM_MEDIA_TYPE structure into another
  253.     structure, including the format block. This function allocates the memory
  254.     for the format block. If the pmtTarget parameter already contains an allocated
  255.     format block, a memory leak will occur. To avoid a memory leak, call
  256.     FreeMediaType before calling this function. }
  257.   procedure CopyMediaType(pmtTarget: PAMMediaType; pmtSource: PAMMediaType);
  258.   { The FreeMediaType function frees the format block in an AM_MEDIA_TYPE structure.
  259.     Use this function to free just the format block. To delete the AM_MEDIA_TYPE
  260.     structure, call DeleteMediaType. }
  261.   procedure FreeMediaType(mt: PAMMediaType);
  262.   { The CreateAudioMediaType function initializes a media type from a TWAVEFORMATEX structure.
  263.     If the bSetFormat parameter is TRUE, the method allocates the memory for the format
  264.     block. If the pmt parameter already contains an allocated format block, a memory
  265.     leak will occur. To avoid a memory leak, call FreeMediaType before calling this function.
  266.     After the method returns, call FreeMediaType again to free the format block. }
  267.   function CreateAudioMediaType(pwfx: PWaveFormatEx; pmt: PAMMediaType; bSetFormat: boolean): HRESULT;
  268.   { The FOURCCMap function provides conversion between GUID media subtypes and
  269.     old-style FOURCC 32-bit media tags. In the original Microsoft