(********************************************************************* * 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. * * * *********************************************************************) unit MediaTypeEditor; interface {$IFDEF VER150} {$WARN UNSAFE_CODE OFF} {$WARN UNSAFE_TYPE OFF} {$WARN UNSAFE_CAST OFF} {$ENDIF} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DSUtil, StdCtrls, DirectShow9, Mask; type TFormMediaType = class(TForm) btOK: TButton; btCancel: TButton; cbMajorTypes: TComboBox; cbSubTypes: TComboBox; Label1: TLabel; Label2: TLabel; chkFixedSize: TCheckBox; chkTempCompress: TCheckBox; edSampleSize: TEdit; Label3: TLabel; cbFormatType: TComboBox; Label4: TLabel; Memo1: TMemo; lblFormatSize: TLabel; edFormatSize: TEdit; procedure FormShow(Sender: TObject); procedure cbMajorTypesChange(Sender: TObject); procedure cbSubTypesChange(Sender: TObject); procedure chkFixedSizeClick(Sender: TObject); procedure chkTempCompressClick(Sender: TObject); procedure btOKClick(Sender: TObject); procedure cbFormatTypeChange(Sender: TObject); procedure edSampleSizeChange(Sender: TObject); public MediaType: TMediaType; procedure RefreshMediaType; constructor create(AOwner: TComponent); override; destructor Destroy; override; end; TGUIDDescription = record name: string; GUID: TGUID; end; var FormMediaType: TFormMediaType; const MajorTypes : array[0..15] of TGUIDDescription = ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'), (name: 'Video' ; GUID: '{73646976-0000-0010-8000-00AA00389B71}'), (name: 'Audio' ; GUID: '{73647561-0000-0010-8000-00AA00389B71}'), (name: 'AnalogAudio' ; GUID: '{0482DEE1-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo' ; GUID: '{0482DDE1-7817-11CF-8A03-00AA006ECB65}'), (name: 'AUXLine21Data' ; GUID: '{670AEA80-3A82-11D0-B79B-00AA003767A7}'), (name: 'File' ; GUID: '{656C6966-0000-0010-8000-00AA00389B71}'), (name: 'Interleaved' ; GUID: '{73766169-0000-0010-8000-00AA00389B71}'), (name: 'LMRT' ; GUID: '{74726c6d-0000-0010-8000-00aa00389b71}'), (name: 'Midi' ; GUID: '{7364696D-0000-0010-8000-00AA00389B71}'), (name: 'MPEG2_PES' ; GUID: '{e06d8020-db46-11cf-b4d1-00805f6cbbea}'), (name: 'ScriptCommand' ; GUID: '{73636D64-0000-0010-8000-00AA00389B71}'), (name: 'Stream' ; GUID: '{E436EB83-524F-11CE-9F53-0020AF0BA770}'), (name: 'Text' ; GUID: '{73747874-0000-0010-8000-00AA00389B71}'), (name: 'Timecode' ; GUID: '{0482DEE3-7817-11CF-8A03-00AA006ECB65}'), (name: 'URL_STREAM' ; GUID: '{736c7275-0000-0010-8000-00aa00389b71}')); SubTypes : array[0..97] of TGUIDDescription = ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'), (name: 'MJPG'; GUID: '{47504A4D-0000-0010-8000-00AA00389B71}'), (name: 'Avi'; GUID: '{E436EB88-524F-11CE-9F53-0020AF0BA770}'), (name: 'Asf'; GUID: '{3DB80F90-9412-11D1-ADED-0000F8754B99}'), (name: 'PCM'; GUID: '{00000001-0000-0010-8000-00AA00389B71}'), (name: 'WAVE'; GUID: '{E436EB8B-524F-11CE-9F53-0020AF0BA770}'), (name: 'AU'; GUID: '{E436EB8C-524F-11CE-9F53-0020AF0BA770}'), (name: 'AIFF'; GUID: '{E436EB8D-524F-11CE-9F53-0020AF0BA770}'), (name: 'DTS'; GUID: '{E06D8033-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DOLBY_AC3'; GUID: '{E06D802C-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'RGB1'; GUID: '{E436EB78-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB4'; GUID: '{E436EB79-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB8'; GUID: '{E436EB7A-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB565'; GUID: '{E436EB7B-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB555'; GUID: '{E436EB7C-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB24'; GUID: '{E436EB7D-524F-11CE-9F53-0020AF0BA770}'), (name: 'RGB32'; GUID: '{E436EB7E-524F-11CE-9F53-0020AF0BA770}'), (name: 'ARGB32'; GUID: '{773C9AC0-3274-11D0-B724-00AA006C1A01}'), (name: 'YUYV'; GUID: '{56595559-0000-0010-8000-00AA00389B71}'), (name: 'IYUV'; GUID: '{56555949-0000-0010-8000-00AA00389B71}'), (name: 'YVU9'; GUID: '{39555659-0000-0010-8000-00AA00389B71}'), (name: 'Y411'; GUID: '{31313459-0000-0010-8000-00AA00389B71}'), (name: 'Y41P'; GUID: '{50313459-0000-0010-8000-00AA00389B71}'), (name: 'YUY2'; GUID: '{32595559-0000-0010-8000-00AA00389B71}'), (name: 'YVYU'; GUID: '{55595659-0000-0010-8000-00AA00389B71}'), (name: 'UYVY'; GUID: '{59565955-0000-0010-8000-00AA00389B71}'), (name: 'Y211'; GUID: '{31313259-0000-0010-8000-00AA00389B71}'), (name: 'YV12'; GUID: '{32315659-0000-0010-8000-00AA00389B71}'), (name: 'CLPL'; GUID: '{4C504C43-0000-0010-8000-00AA00389B71}'), (name: 'CLJR'; GUID: '{524A4C43-0000-0010-8000-00AA00389B71}'), (name: 'IF09'; GUID: '{39304649-0000-0010-8000-00AA00389B71}'), (name: 'CPLA'; GUID: '{414C5043-0000-0010-8000-00AA00389B71}'), (name: 'TVMJ'; GUID: '{4A4D5654-0000-0010-8000-00AA00389B71}'), (name: 'WAKE'; GUID: '{454B4157-0000-0010-8000-00AA00389B71}'), (name: 'CFCC'; GUID: '{43434643-0000-0010-8000-00AA00389B71}'), (name: 'IJPG'; GUID: '{47504A49-0000-0010-8000-00AA00389B71}'), (name: 'Plum'; GUID: '{6D756C50-0000-0010-8000-00AA00389B71}'), (name: 'DVCS'; GUID: '{53435644-0000-0010-8000-00AA00389B71}'), (name: 'DVSD'; GUID: '{44535644-0000-0010-8000-00AA00389B71}'), (name: 'MDVF'; GUID: '{4656444D-0000-0010-8000-00AA00389B71}'), (name: 'Overlay'; GUID: '{E436EB7F-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1Packet'; GUID: '{E436EB80-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1Payload'; GUID: '{E436EB81-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1AudioPayload'; GUID: '{00000050-0000-0010-8000-00AA00389B71}'), (name: 'MPEG1System'; GUID: '{E436EB84-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1VideoCD'; GUID: '{E436EB85-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1Video'; GUID: '{E436EB86-524F-11CE-9F53-0020AF0BA770}'), (name: 'MPEG1Audio'; GUID: '{E436EB87-524F-11CE-9F53-0020AF0BA770}'), (name: 'QTMovie'; GUID: '{E436EB89-524F-11CE-9F53-0020AF0BA770}'), (name: 'QTRpza'; GUID: '{617A7072-0000-0010-8000-00AA00389B71}'), (name: 'QTSmc'; GUID: '{20636D73-0000-0010-8000-00AA00389B71}'), (name: 'QTRle'; GUID: '{20656C72-0000-0010-8000-00AA00389B71}'), (name: 'QTJpeg'; GUID: '{6765706A-0000-0010-8000-00AA00389B71}'), (name: 'PCMAudio_Obsolete'; GUID: '{E436EB8A-524F-11CE-9F53-0020AF0BA770}'), (name: 'dvsd_'; GUID: '{64737664-0000-0010-8000-00AA00389B71}'), (name: 'dvhd'; GUID: '{64687664-0000-0010-8000-00AA00389B71}'), (name: 'dvsl'; GUID: '{6C737664-0000-0010-8000-00AA00389B71}'), (name: 'Line21_BytePair'; GUID: '{6E8D4A22-310C-11D0-B79A-00AA003767A7}'), (name: 'Line21_GOPPacket'; GUID: '{6E8D4A23-310C-11D0-B79A-00AA003767A7}'), (name: 'Line21_VBIRawData'; GUID: '{6E8D4A24-310C-11D0-B79A-00AA003767A7}'), (name: 'DRM_Audio'; GUID: '{00000009-0000-0010-8000-00AA00389B71}'), (name: 'IEEE_FLOAT'; GUID: '{00000003-0000-0010-8000-00AA00389B71}'), (name: 'DOLBY_AC3_SPDIF'; GUID: '{00000092-0000-0010-8000-00AA00389B71}'), (name: 'RAW_SPORT'; GUID: '{00000240-0000-0010-8000-00AA00389B71}'), (name: 'SPDIF_TAG_241h'; GUID: '{00000241-0000-0010-8000-00AA00389B71}'), (name: 'DssVideo'; GUID: '{A0AF4F81-E163-11D0-BAD9-00609744111A}'), (name: 'DssAudio'; GUID: '{A0AF4F82-E163-11D0-BAD9-00609744111A}'), (name: 'VPVideo'; GUID: '{5A9B6A40-1A22-11D1-BAD9-00609744111A}'), (name: 'VPVBI'; GUID: '{5A9B6A41-1A22-11D1-BAD9-00609744111A}'), (name: 'AnalogVideo_NTSC_M'; GUID: '{0482DDE2-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_B'; GUID: '{0482DDE5-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_D'; GUID: '{0482DDE6-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_G'; GUID: '{0482DDE7-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_H'; GUID: '{0482DDE8-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_I'; GUID: '{0482DDE9-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_M'; GUID: '{0482DDEA-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_N'; GUID: '{0482DDEB-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_PAL_N_COMBO'; GUID: '{0482DDEC-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_B'; GUID: '{0482DDF0-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_D'; GUID: '{0482DDF1-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_G'; GUID: '{0482DDF2-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_H'; GUID: '{0482DDF3-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_K'; GUID: '{0482DDF4-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_K1'; GUID: '{0482DDF5-7817-11CF-8A03-00AA006ECB65}'), (name: 'AnalogVideo_SECAM_L'; GUID: '{0482DDF6-7817-11CF-8A03-00AA006ECB65}'), (name: 'MPEG2_VIDEO'; GUID: '{E06D8026-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'MPEG2_PROGRAM'; GUID: '{E06D8022-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'MPEG2_TRANSPORT'; GUID: '{E06D8023-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'MPEG2_AUDIO'; GUID: '{E06D802B-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DVD_SUBPICTURE'; GUID: '{E06D802D-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DVD_LPCM_AUDIO'; GUID: '{E06D8032-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'SDDS'; GUID: '{E06D8034-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DVD_NAVIGATION_PCI'; GUID: '{E06D802F-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DVD_NAVIGATION_DSI'; GUID: '{E06D8030-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'DVD_NAVIGATION_PROVIDER'; GUID: '{E06D8031-DB46-11CF-B4D1-00805F6CBBEA}'), (name: 'MP42'; GUID: '{3234504D-0000-0010-8000-00AA00389B71}'), (name: 'DIVX'; GUID: '{58564944-0000-0010-8000-00AA00389B71}'), (name: 'VOXWARE'; GUID: '{00000075-0000-0010-8000-00AA00389B71}')); FormatTypes: array[0..4] of TGUIDDescription = ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'), (name: 'None'; GUID: '{0F6417D6-C318-11D0-A43F-00A0C9223196}'), (name: 'VideoInfo'; GUID: '{05589F80-C356-11CE-BF01-00AA0055595A}'), (name: 'VideoInfo2'; GUID: '{F72A76A0-EB0A-11D0-ACE4-0000C0CC16BA}'), (name: 'WaveFormatEx'; GUID: '{05589F81-C356-11CE-BF01-00AA0055595A}')); implementation uses ActiveX; {$R *.dfm} constructor TFormMediaType.create(AOwner: TComponent); var i: byte; begin inherited Create(AOwner); MediaType:= TMediaType.Create; for i := 0 to 15 do cbMajorTypes.Items.Add(MajorTypes[i].name); for i := 0 to 97 do cbSubTypes.Items.Add(SubTypes[i].name); for i := 0 to 4 do cbFormatType.Items.Add(FormatTypes[i].name); end; destructor TFormMediaType.Destroy; begin MediaType.Free; inherited Destroy; end; // majortype : TGUID; // subtype : TGUID; // bFixedSizeSamples : BOOL; // bTemporalCompression : BOOL; // lSampleSize : ULONG; // formattype : TGUID; // pUnk : IUnknown; // cbFormat : ULONG; // pbFormat : Pointer; procedure TFormMediaType.FormShow(Sender: TObject); begin RefreshMediaType; end; procedure TFormMediaType.RefreshMediaType; var i: byte; begin for i := 0 to 15 do if IsEqualGUID(MajorTypes[i].GUID, MediaType.MajorType) then begin cbMajorTypes.ItemIndex := i; Break; end; for i := 0 to 97 do if IsEqualGUID(SubTypes[i].GUID, MediaType.SubType) then begin cbSubTypes.ItemIndex := i; Break; end; if cbMajorTypes.ItemIndex = -1 then cbMajorTypes.ItemIndex := 0; if cbSubTypes.ItemIndex = -1 then cbSubTypes.ItemIndex := 0; chkFixedSize.Checked := MediaType.IsFixedSize; chkTempCompress.Checked := MediaType.IsTemporalCompressed; edSampleSize.Text := inttostr(MediaType.GetSampleSize); for i := 0 to 4 do if IsEqualGUID(FormatTypes[i].GUID, MediaType.FormatType) then begin cbFormatType.ItemIndex := i; Break; end; edFormatSize.Text := inttostr(MediaType.FormatLength); memo1.Clear; memo1.lines.Add(GetMediaTypeDescription(MediaType.AMMediaType)); end; procedure TFormMediaType.btOKClick(Sender: TObject); begin try MediaType.SetSampleSize(StrToInt(edSampleSize.Text)); except MessageBox(Handle,PChar('Invalid Sample Size.'), PChar('Error'), mb_ok); exit; end; ModalResult := mrOK; end; procedure TFormMediaType.cbMajorTypesChange(Sender: TObject); begin MediaType.MajorType := MajorTypes[cbMajorTypes.ItemIndex].GUID; RefreshMediaType; end; procedure TFormMediaType.cbSubTypesChange(Sender: TObject); begin MediaType.SubType := SubTypes[cbSubTypes.ItemIndex].GUID; RefreshMediaType; end; procedure TFormMediaType.chkFixedSizeClick(Sender: TObject); begin MediaType.AMMediaType.bFixedSizeSamples := chkFixedSize.Checked; RefreshMediaType; end; procedure TFormMediaType.chkTempCompressClick(Sender: TObject); begin MediaType.AMMediaType.bTemporalCompression := chkTempCompress.Checked; RefreshMediaType; end; procedure TFormMediaType.cbFormatTypeChange(Sender: TObject); begin MediaType.FormatType := FormatTypes[cbFormatType.ItemIndex].GUID; RefreshMediaType; end; procedure TFormMediaType.edSampleSizeChange(Sender: TObject); begin try if edSampleSize.Text = '' then MediaType.SetSampleSize(0) else MediaType.SetSampleSize(StrToInt(edSampleSize.Text)); finally RefreshMediaType; end; end; end.