DSUtil.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:200k
- (*********************************************************************
- * DSPack 2.3.3 *
- * *
- * home page : http://www.progdigy.com *
- * email : hgourvest@progdigy.com *
- * Thanks to Michael Andersen. (DSVideoWindowEx) *
- * *
- * date : 21-02-2003 *
- * *
- * The contents of this file are used with permission, subject to *
- * the Mozilla Public License Version 1.1 (the "License"); you may *
- * not use this file except in compliance with the License. You may *
- * obtain a copy of the License at *
- * http://www.mozilla.org/MPL/MPL-1.1.html *
- * *
- * Software distributed under the License is distributed on an *
- * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or *
- * implied. See the License for the specific language governing *
- * rights and limitations under the License. *
- * *
- * Contributor(s) *
- * Peter J. Haas <DSPack@pjh2.de> *
- * Andriy Nevhasymyy <a.n@email.com> *
- * Milenko Mitrovic <dcoder@dsp-worx.de> *
- * Michael Andersen <michael@mechdata.dk> *
- * Martin Offenwanger <coder@dsplayer.de> *
- * *
- *********************************************************************)
- {
- @abstract(Methods & usefull Class for Direct Show programming.)
- @author(Henri Gourvest: hgourvest@progdigy.com)
- @created(Mar 14, 2002)
- @lastmod(Oct 24, 2003)
- }
- unit DSUtil;
- {$B-} // needed at least for TSysDevEnum.FilterIndexOfFriendlyName
- {$I jedi.inc}
- {$IFDEF COMPILER7_UP}
- {$WARN UNSAFE_CODE OFF}
- {$WARN UNSAFE_TYPE OFF}
- {$WARN UNSAFE_CAST OFF}
- {$ENDIF}
- interface
- uses
- {$IFDEF VER140} Variants, {$ENDIF}
- {$IFDEF VER150} Variants, {$ENDIF}
- Windows, Controls, SysUtils, ActiveX, Classes, MMSystem, DirectShow9, WMF9,
- DirectDraw;
- const
- IID_IPropertyBag : TGUID = '{55272A00-42CB-11CE-8135-00AA004BB851}';
- IID_ISpecifyPropertyPages : TGUID = '{B196B28B-BAB4-101A-B69C-00AA00341D07}';
- IID_IPersistStream : TGUID = '{00000109-0000-0000-C000-000000000046}';
- IID_IMoniker : TGUID = '{0000000F-0000-0000-C000-000000000046}';
- // MS Mepg4 DMO
- MEDIASUBTYPE_MP42 : TGUID = '{3234504D-0000-0010-8000-00AA00389B71}';
- // DIVX
- MEDIASUBTYPE_DIVX : TGUID = '{58564944-0000-0010-8000-00AA00389B71}';
- // VoxWare MetaSound
- MEDIASUBTYPE_VOXWARE : TGUID = '{00000075-0000-0010-8000-00AA00389B71}';
- MiliSecPerDay : Cardinal = 86400000;
- MAX_TIME : Int64 = $7FFFFFFFFFFFFFFF;
- bits555: array[0..2] of DWord = ($007C00, $0003E0, $00001F);
- bits565: array[0..2] of DWord = ($00F800, $0007E0, $00001F);
- bits888: array[0..2] of DWord = ($FF0000, $00FF00, $0000FF);
- ////////////////////////////////////////////////////////////////////////////////
- // DIVX ressources translated from latest OpenDivx DirectX Codec
- // divx
- CLSID_DIVX : TGUID = '{78766964-0000-0010-8000-00aa00389b71}';
- // DIVX
- CLSID_DivX_U : TGUID = '{58564944-0000-0010-8000-00aa00389b71}';
- // dvx1
- CLSID_DivX_ : TGUID = '{31787664-0000-0010-8000-00aa00389b71}';
- // DVX1
- CLSID_DivX__U : TGUID = '{31585644-0000-0010-8000-00aa00389b71}';
- // dx50
- CLSID_dx50 : TGUID = '{30357864-0000-0010-8000-00aa00389b71}';
- // DX50
- CLSID_DX50_ : TGUID = '{30355844-0000-0010-8000-00aa00389b71}';
- // div6
- CLSID_div6 : TGUID = '{36766964-0000-0010-8000-00aa00389b71}';
- // DIV6
- CLSID_DIV6_ : TGUID = '{36564944-0000-0010-8000-00aa00389b71}';
- // div5
- CLSID_div5 : TGUID = '{35766964-0000-0010-8000-00aa00389b71}';
- // DIV5
- CLSID_DIV5_ : TGUID = '{35564944-0000-0010-8000-00aa00389b71}';
- // div4
- CLSID_div4 : TGUID = '{34766964-0000-0010-8000-00aa00389b71}';
- // DIV4
- CLSID_DIV4_ : TGUID = '{34564944-0000-0010-8000-00aa00389b71}';
- // div3
- CLSID_div3 : TGUID = '{33766964-0000-0010-8000-00aa00389b71}';
- // DIV3
- CLSID_DIV3_ : TGUID = '{33564944-0000-0010-8000-00aa00389b71}';
- CLSID_DIVXCodec : TGUID = '{78766964-0000-0010-8000-00aa00389b71}';
- IID_IIDivXFilterInterface : TGUID = '{D132EE97-3E38-4030-8B17-59163B30A1F5}';
- CLSID_DivXPropertiesPage : TGUID = '{310e42a0-f913-11d4-887c-006008dc5c26}';
- type
- {$IFDEF VER130}
- PPointer = ^Pointer;
- {$ENDIF}
- { Interface to control the Divx Decoder filter.
- TODO: discover the last function ... }
- IDivXFilterInterface = interface(IUnknown)
- ['{D132EE97-3E38-4030-8B17-59163B30A1F5}']
- { OpenDivx }
- // current postprocessing level 0..100
- function get_PPLevel(out PPLevel: integer): HRESULT; stdcall;
- // new postprocessing level 0..100
- function put_PPLevel(PPLevel: integer): HRESULT; stdcall;
- // Put the default postprocessing = 0
- function put_DefaultPPLevel: HRESULT; stdcall;
- { DIVX }
- function put_MaxDelayAllowed(maxdelayallowed: integer): HRESULT; stdcall;
- function put_Brightness(brightness: integer): HRESULT; stdcall;
- function put_Contrast(contrast: integer): HRESULT; stdcall;
- function put_Saturation(saturation: integer): HRESULT; stdcall;
- function get_MaxDelayAllowed(out maxdelayallowed: integer): HRESULT; stdcall;
- function get_Brightness(out brightness: integer): HRESULT; stdcall;
- function get_Contrast(out contrast: integer): HRESULT; stdcall;
- function get_Saturation(out saturation: integer): HRESULT; stdcall;
- function put_AspectRatio(x, y: integer): HRESULT; stdcall;
- function get_AspectRatio(out x, y: integer): HRESULT; stdcall;
- end;
- ////////////////////////////////////////////////////////////////////////////////
- // Ogg Vorbis
- type
- TVORBISFORMAT = record
- nChannels: WORD;
- nSamplesPerSec: Longword;
- nMinBitsPerSec: Longword;
- nAvgBitsPerSec: Longword;
- nMaxBitsPerSec: Longword;
- fQuality: Double;
- end;
- const
- // f07e245f-5a1f-4d1e-8bff-dc31d84a55ab
- CLSID_OggSplitter: TGUID = '{f07e245f-5a1f-4d1e-8bff-dc31d84a55ab}';
- // {078C3DAA-9E58-4d42-9E1C-7C8EE79539C5}
- CLSID_OggSplitPropPage: TGUID = '{078C3DAA-9E58-4d42-9E1C-7C8EE79539C5}';
- // 8cae96b7-85b1-4605-b23c-17ff5262b296
- CLSID_OggMux: TGUID = '{8cae96b7-85b1-4605-b23c-17ff5262b296}';
- // {AB97AFC3-D08E-4e2d-98E0-AEE6D4634BA4}
- CLSID_OggMuxPropPage: TGUID = '{AB97AFC3-D08E-4e2d-98E0-AEE6D4634BA4}';
- // {889EF574-0656-4B52-9091-072E52BB1B80}
- CLSID_VorbisEnc: TGUID = '{889EF574-0656-4B52-9091-072E52BB1B80}';
- // {c5379125-fd36-4277-a7cd-fab469ef3a2f}
- CLSID_VorbisEncPropPage: TGUID = '{c5379125-fd36-4277-a7cd-fab469ef3a2f}';
- // 02391f44-2767-4e6a-a484-9b47b506f3a4
- CLSID_VorbisDec: TGUID = '{02391f44-2767-4e6a-a484-9b47b506f3a4}';
- // 77983549-ffda-4a88-b48f-b924e8d1f01c
- CLSID_OggDSAboutPage: TGUID = '{77983549-ffda-4a88-b48f-b924e8d1f01c}';
- // {D2855FA9-61A7-4db0-B979-71F297C17A04}
- MEDIASUBTYPE_Ogg: TGUID = '{D2855FA9-61A7-4db0-B979-71F297C17A04}';
- // cddca2d5-6d75-4f98-840e-737bedd5c63b
- MEDIASUBTYPE_Vorbis: TGUID = '{cddca2d5-6d75-4f98-840e-737bedd5c63b}';
- // 6bddfa7e-9f22-46a9-ab5e-884eff294d9f
- FORMAT_VorbisFormat: TGUID = '{6bddfa7e-9f22-46a9-ab5e-884eff294d9f}';
- ////////////////////////////////////////////////////////////////////////////////
- // WMF9 Utils
- type
- TWMPofiles8 = (
- wmp_V80_255VideoPDA,
- wmp_V80_150VideoPDA,
- wmp_V80_28856VideoMBR,
- wmp_V80_100768VideoMBR,
- wmp_V80_288100VideoMBR,
- wmp_V80_288Video,
- wmp_V80_56Video,
- wmp_V80_100Video,
- wmp_V80_256Video,
- wmp_V80_384Video,
- wmp_V80_768Video,
- wmp_V80_700NTSCVideo,
- wmp_V80_1400NTSCVideo,
- wmp_V80_384PALVideo,
- wmp_V80_700PALVideo,
- wmp_V80_288MonoAudio,
- wmp_V80_288StereoAudio,
- wmp_V80_32StereoAudio,
- wmp_V80_48StereoAudio,
- wmp_V80_64StereoAudio,
- wmp_V80_96StereoAudio,
- wmp_V80_128StereoAudio,
- wmp_V80_288VideoOnly,
- wmp_V80_56VideoOnly,
- wmp_V80_FAIRVBRVideo,
- wmp_V80_HIGHVBRVideo,
- wmp_V80_BESTVBRVideo
- );
- const
- WMProfiles8 : array[TWMPofiles8] of TGUID =
- ('{FEEDBCDF-3FAC-4c93-AC0D-47941EC72C0B}',
- '{AEE16DFA-2C14-4a2f-AD3F-A3034031784F}',
- '{D66920C4-C21F-4ec8-A0B4-95CF2BD57FC4}',
- '{5BDB5A0E-979E-47d3-9596-73B386392A55}',
- '{D8722C69-2419-4b36-B4E0-6E17B60564E5}',
- '{3DF678D9-1352-4186-BBF8-74F0C19B6AE2}',
- '{254E8A96-2612-405c-8039-F0BF725CED7D}',
- '{A2E300B4-C2D4-4fc0-B5DD-ECBD948DC0DF}',
- '{BBC75500-33D2-4466-B86B-122B201CC9AE}',
- '{29B00C2B-09A9-48bd-AD09-CDAE117D1DA7}',
- '{74D01102-E71A-4820-8F0D-13D2EC1E4872}',
- '{C8C2985F-E5D9-4538-9E23-9B21BF78F745}',
- '{931D1BEE-617A-4bcd-9905-CCD0786683EE}',
- '{9227C692-AE62-4f72-A7EA-736062D0E21E}',
- '{EC298949-639B-45e2-96FD-4AB32D5919C2}',
- '{7EA3126D-E1BA-4716-89AF-F65CEE0C0C67}',
- '{7E4CAB5C-35DC-45bb-A7C0-19B28070D0CC}',
- '{60907F9F-B352-47e5-B210-0EF1F47E9F9D}',
- '{5EE06BE5-492B-480a-8A8F-12F373ECF9D4}',
- '{09BB5BC4-3176-457f-8DD6-3CD919123E2D}',
- '{1FC81930-61F2-436f-9D33-349F2A1C0F10}',
- '{407B9450-8BDC-4ee5-88B8-6F527BD941F2}',
- '{8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF}',
- '{6E2A6955-81DF-4943-BA50-68A986A708F6}',
- '{3510A862-5850-4886-835F-D78EC6A64042}',
- '{0F10D9D3-3B04-4fb0-A3D3-88D4AC854ACC}',
- '{048439BA-309C-440e-9CB4-3DCCA3756423}');
- function ProfileFromGUID(const GUID: TGUID): TWMPofiles8;
- ////////////////////////////////////////////////////////////////////////////////
- { Frees an object reference and replaces the reference with Nil. (Delphi4 compatibility)}
- procedure FreeAndNil(var Obj);
- { Enable Graphedit to connect with a filter graph.<br>
- The application must register the filter graph instance in the Running Object
- Table (ROT). The ROT is a globally accessible look-up table that keeps track
- of running objects. Objects are registered in the ROT by moniker. To connect
- to the graph, GraphEdit searches the ROT for monikers whose display name matches
- a particular format: !FilterGraph X pid Y.<br>
- <b>Graph:</b> a graph interface (IGraphBuilder, IFilterGraph, IFilterGraph2).<br>
- <b>ID:</b> return the ROT identifier.}
- function AddGraphToRot(Graph: IFilterGraph; out ID: integer): HRESULT;
- { Disable Graphedit to connect with your filter graph.<br>
- <b>ID:</b> identifier provided by the @link(AddGraphToRot) method.}
- function RemoveGraphFromRot(ID: integer): HRESULT;
- { deprecated, convert a Time code event to TDVD_TimeCode record. }
- function IntToTimeCode(x : longint): TDVDTimeCode;
- { Return a string explaining a filter graph event. }
- function GetEventCodeDef(code: longint): string;
- { General purpose function to delete a heap allocated TAM_MEDIA_TYPE structure
- which is useful when calling IEnumMediaTypes.Next as the interface
- implementation allocates the structures which you must later delete
- the format block may also be a pointer to an interface to release. }
- procedure DeleteMediaType(pmt: PAMMediaType);
- { The CreateMediaType function allocates a new AM_MEDIA_TYPE structure,
- including the format block. This also comes in useful when using the
- IEnumMediaTypes interface so that you can copy a media type, you can do
- nearly the same by creating a TMediaType class but as soon as it goes out
- of scope the destructor will delete the memory it allocated
- (this takes a copy of the memory). }
- function CreateMediaType(pSrc: PAMMediaType): PAMMediaType;
- { The CopyMediaType function copies an AM_MEDIA_TYPE structure into another
- structure, including the format block. This function allocates the memory
- for the format block. If the pmtTarget parameter already contains an allocated
- format block, a memory leak will occur. To avoid a memory leak, call
- FreeMediaType before calling this function. }
- procedure CopyMediaType(pmtTarget: PAMMediaType; pmtSource: PAMMediaType);
- { The FreeMediaType function frees the format block in an AM_MEDIA_TYPE structure.
- Use this function to free just the format block. To delete the AM_MEDIA_TYPE
- structure, call DeleteMediaType. }
- procedure FreeMediaType(mt: PAMMediaType);
- { The CreateAudioMediaType function initializes a media type from a TWAVEFORMATEX structure.
- If the bSetFormat parameter is TRUE, the method allocates the memory for the format
- block. If the pmt parameter already contains an allocated format block, a memory
- leak will occur. To avoid a memory leak, call FreeMediaType before calling this function.
- After the method returns, call FreeMediaType again to free the format block. }
- function CreateAudioMediaType(pwfx: PWaveFormatEx; pmt: PAMMediaType; bSetFormat: boolean): HRESULT;
- { The FOURCCMap function provides conversion between GUID media subtypes and
- old-style FOURCC 32-bit media tags. In the original Microsoft