📄 dsutil.pas
字号:
(*********************************************************************
* 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 COMPILER6_UP} 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -