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

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.      *********************************************************************)
  22.      
  23. unit MediaTypeEditor;
  24. interface
  25. {$IFDEF VER150}
  26.   {$WARN UNSAFE_CODE OFF}
  27.   {$WARN UNSAFE_TYPE OFF}
  28.   {$WARN UNSAFE_CAST OFF}
  29. {$ENDIF}
  30. uses
  31.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  32.   Dialogs, DSUtil, StdCtrls, DirectShow9, Mask;
  33. type
  34.   TFormMediaType = class(TForm)
  35.     btOK: TButton;
  36.     btCancel: TButton;
  37.     cbMajorTypes: TComboBox;
  38.     cbSubTypes: TComboBox;
  39.     Label1: TLabel;
  40.     Label2: TLabel;
  41.     chkFixedSize: TCheckBox;
  42.     chkTempCompress: TCheckBox;
  43.     edSampleSize: TEdit;
  44.     Label3: TLabel;
  45.     cbFormatType: TComboBox;
  46.     Label4: TLabel;
  47.     Memo1: TMemo;
  48.     lblFormatSize: TLabel;
  49.     edFormatSize: TEdit;
  50.     procedure FormShow(Sender: TObject);
  51.     procedure cbMajorTypesChange(Sender: TObject);
  52.     procedure cbSubTypesChange(Sender: TObject);
  53.     procedure chkFixedSizeClick(Sender: TObject);
  54.     procedure chkTempCompressClick(Sender: TObject);
  55.     procedure btOKClick(Sender: TObject);
  56.     procedure cbFormatTypeChange(Sender: TObject);
  57.     procedure edSampleSizeChange(Sender: TObject);
  58.   public
  59.     MediaType: TMediaType;
  60.     procedure RefreshMediaType;
  61.     constructor create(AOwner: TComponent); override;
  62.     destructor Destroy; override;
  63.   end;
  64.   TGUIDDescription = record
  65.     name: string;
  66.     GUID: TGUID;
  67.   end;
  68. var
  69.   FormMediaType: TFormMediaType;
  70. const
  71.   MajorTypes : array[0..15] of TGUIDDescription =
  72.    ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'),
  73.     (name: 'Video'         ; GUID: '{73646976-0000-0010-8000-00AA00389B71}'),
  74.     (name: 'Audio'         ; GUID: '{73647561-0000-0010-8000-00AA00389B71}'),
  75.     (name: 'AnalogAudio'   ; GUID: '{0482DEE1-7817-11CF-8A03-00AA006ECB65}'),
  76.     (name: 'AnalogVideo'   ; GUID: '{0482DDE1-7817-11CF-8A03-00AA006ECB65}'),
  77.     (name: 'AUXLine21Data' ; GUID: '{670AEA80-3A82-11D0-B79B-00AA003767A7}'),
  78.     (name: 'File'          ; GUID: '{656C6966-0000-0010-8000-00AA00389B71}'),
  79.     (name: 'Interleaved'   ; GUID: '{73766169-0000-0010-8000-00AA00389B71}'),
  80.     (name: 'LMRT'          ; GUID: '{74726c6d-0000-0010-8000-00aa00389b71}'),
  81.     (name: 'Midi'          ; GUID: '{7364696D-0000-0010-8000-00AA00389B71}'),
  82.     (name: 'MPEG2_PES'     ; GUID: '{e06d8020-db46-11cf-b4d1-00805f6cbbea}'),
  83.     (name: 'ScriptCommand' ; GUID: '{73636D64-0000-0010-8000-00AA00389B71}'),
  84.     (name: 'Stream'        ; GUID: '{E436EB83-524F-11CE-9F53-0020AF0BA770}'),
  85.     (name: 'Text'          ; GUID: '{73747874-0000-0010-8000-00AA00389B71}'),
  86.     (name: 'Timecode'      ; GUID: '{0482DEE3-7817-11CF-8A03-00AA006ECB65}'),
  87.     (name: 'URL_STREAM'    ; GUID: '{736c7275-0000-0010-8000-00aa00389b71}'));
  88.   SubTypes : array[0..97] of TGUIDDescription =
  89.    ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'),
  90.     (name: 'MJPG'; GUID: '{47504A4D-0000-0010-8000-00AA00389B71}'),
  91.     (name: 'Avi'; GUID: '{E436EB88-524F-11CE-9F53-0020AF0BA770}'),
  92.     (name: 'Asf'; GUID: '{3DB80F90-9412-11D1-ADED-0000F8754B99}'),
  93.     (name: 'PCM'; GUID: '{00000001-0000-0010-8000-00AA00389B71}'),
  94.     (name: 'WAVE'; GUID: '{E436EB8B-524F-11CE-9F53-0020AF0BA770}'),
  95.     (name: 'AU'; GUID: '{E436EB8C-524F-11CE-9F53-0020AF0BA770}'),
  96.     (name: 'AIFF'; GUID: '{E436EB8D-524F-11CE-9F53-0020AF0BA770}'),
  97.     (name: 'DTS'; GUID: '{E06D8033-DB46-11CF-B4D1-00805F6CBBEA}'),
  98.     (name: 'DOLBY_AC3'; GUID: '{E06D802C-DB46-11CF-B4D1-00805F6CBBEA}'),
  99.     (name: 'RGB1'; GUID: '{E436EB78-524F-11CE-9F53-0020AF0BA770}'),
  100.     (name: 'RGB4'; GUID: '{E436EB79-524F-11CE-9F53-0020AF0BA770}'),
  101.     (name: 'RGB8'; GUID: '{E436EB7A-524F-11CE-9F53-0020AF0BA770}'),
  102.     (name: 'RGB565'; GUID: '{E436EB7B-524F-11CE-9F53-0020AF0BA770}'),
  103.     (name: 'RGB555'; GUID: '{E436EB7C-524F-11CE-9F53-0020AF0BA770}'),
  104.     (name: 'RGB24'; GUID: '{E436EB7D-524F-11CE-9F53-0020AF0BA770}'),
  105.     (name: 'RGB32'; GUID: '{E436EB7E-524F-11CE-9F53-0020AF0BA770}'),
  106.     (name: 'ARGB32'; GUID: '{773C9AC0-3274-11D0-B724-00AA006C1A01}'),
  107.     (name: 'YUYV'; GUID: '{56595559-0000-0010-8000-00AA00389B71}'),
  108.     (name: 'IYUV'; GUID: '{56555949-0000-0010-8000-00AA00389B71}'),
  109.     (name: 'YVU9'; GUID: '{39555659-0000-0010-8000-00AA00389B71}'),
  110.     (name: 'Y411'; GUID: '{31313459-0000-0010-8000-00AA00389B71}'),
  111.     (name: 'Y41P'; GUID: '{50313459-0000-0010-8000-00AA00389B71}'),
  112.     (name: 'YUY2'; GUID: '{32595559-0000-0010-8000-00AA00389B71}'),
  113.     (name: 'YVYU'; GUID: '{55595659-0000-0010-8000-00AA00389B71}'),
  114.     (name: 'UYVY'; GUID: '{59565955-0000-0010-8000-00AA00389B71}'),
  115.     (name: 'Y211'; GUID: '{31313259-0000-0010-8000-00AA00389B71}'),
  116.     (name: 'YV12'; GUID: '{32315659-0000-0010-8000-00AA00389B71}'),
  117.     (name: 'CLPL'; GUID: '{4C504C43-0000-0010-8000-00AA00389B71}'),
  118.     (name: 'CLJR'; GUID: '{524A4C43-0000-0010-8000-00AA00389B71}'),
  119.     (name: 'IF09'; GUID: '{39304649-0000-0010-8000-00AA00389B71}'),
  120.     (name: 'CPLA'; GUID: '{414C5043-0000-0010-8000-00AA00389B71}'),
  121.     (name: 'TVMJ'; GUID: '{4A4D5654-0000-0010-8000-00AA00389B71}'),
  122.     (name: 'WAKE'; GUID: '{454B4157-0000-0010-8000-00AA00389B71}'),
  123.     (name: 'CFCC'; GUID: '{43434643-0000-0010-8000-00AA00389B71}'),
  124.     (name: 'IJPG'; GUID: '{47504A49-0000-0010-8000-00AA00389B71}'),
  125.     (name: 'Plum'; GUID: '{6D756C50-0000-0010-8000-00AA00389B71}'),
  126.     (name: 'DVCS'; GUID: '{53435644-0000-0010-8000-00AA00389B71}'),
  127.     (name: 'DVSD'; GUID: '{44535644-0000-0010-8000-00AA00389B71}'),
  128.     (name: 'MDVF'; GUID: '{4656444D-0000-0010-8000-00AA00389B71}'),
  129.     (name: 'Overlay'; GUID: '{E436EB7F-524F-11CE-9F53-0020AF0BA770}'),
  130.     (name: 'MPEG1Packet'; GUID: '{E436EB80-524F-11CE-9F53-0020AF0BA770}'),
  131.     (name: 'MPEG1Payload'; GUID: '{E436EB81-524F-11CE-9F53-0020AF0BA770}'),
  132.     (name: 'MPEG1AudioPayload'; GUID: '{00000050-0000-0010-8000-00AA00389B71}'),
  133.     (name: 'MPEG1System'; GUID: '{E436EB84-524F-11CE-9F53-0020AF0BA770}'),
  134.     (name: 'MPEG1VideoCD'; GUID: '{E436EB85-524F-11CE-9F53-0020AF0BA770}'),
  135.     (name: 'MPEG1Video'; GUID: '{E436EB86-524F-11CE-9F53-0020AF0BA770}'),
  136.     (name: 'MPEG1Audio'; GUID: '{E436EB87-524F-11CE-9F53-0020AF0BA770}'),
  137.     (name: 'QTMovie'; GUID: '{E436EB89-524F-11CE-9F53-0020AF0BA770}'),
  138.     (name: 'QTRpza'; GUID: '{617A7072-0000-0010-8000-00AA00389B71}'),
  139.     (name: 'QTSmc'; GUID: '{20636D73-0000-0010-8000-00AA00389B71}'),
  140.     (name: 'QTRle'; GUID: '{20656C72-0000-0010-8000-00AA00389B71}'),
  141.     (name: 'QTJpeg'; GUID: '{6765706A-0000-0010-8000-00AA00389B71}'),
  142.     (name: 'PCMAudio_Obsolete'; GUID: '{E436EB8A-524F-11CE-9F53-0020AF0BA770}'),
  143.     (name: 'dvsd_'; GUID: '{64737664-0000-0010-8000-00AA00389B71}'),
  144.     (name: 'dvhd'; GUID: '{64687664-0000-0010-8000-00AA00389B71}'),
  145.     (name: 'dvsl'; GUID: '{6C737664-0000-0010-8000-00AA00389B71}'),
  146.     (name: 'Line21_BytePair'; GUID: '{6E8D4A22-310C-11D0-B79A-00AA003767A7}'),
  147.     (name: 'Line21_GOPPacket'; GUID: '{6E8D4A23-310C-11D0-B79A-00AA003767A7}'),
  148.     (name: 'Line21_VBIRawData'; GUID: '{6E8D4A24-310C-11D0-B79A-00AA003767A7}'),
  149.     (name: 'DRM_Audio'; GUID: '{00000009-0000-0010-8000-00AA00389B71}'),
  150.     (name: 'IEEE_FLOAT'; GUID: '{00000003-0000-0010-8000-00AA00389B71}'),
  151.     (name: 'DOLBY_AC3_SPDIF'; GUID: '{00000092-0000-0010-8000-00AA00389B71}'),
  152.     (name: 'RAW_SPORT'; GUID: '{00000240-0000-0010-8000-00AA00389B71}'),
  153.     (name: 'SPDIF_TAG_241h'; GUID: '{00000241-0000-0010-8000-00AA00389B71}'),
  154.     (name: 'DssVideo'; GUID: '{A0AF4F81-E163-11D0-BAD9-00609744111A}'),
  155.     (name: 'DssAudio'; GUID: '{A0AF4F82-E163-11D0-BAD9-00609744111A}'),
  156.     (name: 'VPVideo'; GUID: '{5A9B6A40-1A22-11D1-BAD9-00609744111A}'),
  157.     (name: 'VPVBI'; GUID: '{5A9B6A41-1A22-11D1-BAD9-00609744111A}'),
  158.     (name: 'AnalogVideo_NTSC_M'; GUID: '{0482DDE2-7817-11CF-8A03-00AA006ECB65}'),
  159.     (name: 'AnalogVideo_PAL_B'; GUID: '{0482DDE5-7817-11CF-8A03-00AA006ECB65}'),
  160.     (name: 'AnalogVideo_PAL_D'; GUID: '{0482DDE6-7817-11CF-8A03-00AA006ECB65}'),
  161.     (name: 'AnalogVideo_PAL_G'; GUID: '{0482DDE7-7817-11CF-8A03-00AA006ECB65}'),
  162.     (name: 'AnalogVideo_PAL_H'; GUID: '{0482DDE8-7817-11CF-8A03-00AA006ECB65}'),
  163.     (name: 'AnalogVideo_PAL_I'; GUID: '{0482DDE9-7817-11CF-8A03-00AA006ECB65}'),
  164.     (name: 'AnalogVideo_PAL_M'; GUID: '{0482DDEA-7817-11CF-8A03-00AA006ECB65}'),
  165.     (name: 'AnalogVideo_PAL_N'; GUID: '{0482DDEB-7817-11CF-8A03-00AA006ECB65}'),
  166.     (name: 'AnalogVideo_PAL_N_COMBO'; GUID: '{0482DDEC-7817-11CF-8A03-00AA006ECB65}'),
  167.     (name: 'AnalogVideo_SECAM_B'; GUID: '{0482DDF0-7817-11CF-8A03-00AA006ECB65}'),
  168.     (name: 'AnalogVideo_SECAM_D'; GUID: '{0482DDF1-7817-11CF-8A03-00AA006ECB65}'),
  169.     (name: 'AnalogVideo_SECAM_G'; GUID: '{0482DDF2-7817-11CF-8A03-00AA006ECB65}'),
  170.     (name: 'AnalogVideo_SECAM_H'; GUID: '{0482DDF3-7817-11CF-8A03-00AA006ECB65}'),
  171.     (name: 'AnalogVideo_SECAM_K'; GUID: '{0482DDF4-7817-11CF-8A03-00AA006ECB65}'),
  172.     (name: 'AnalogVideo_SECAM_K1'; GUID: '{0482DDF5-7817-11CF-8A03-00AA006ECB65}'),
  173.     (name: 'AnalogVideo_SECAM_L'; GUID: '{0482DDF6-7817-11CF-8A03-00AA006ECB65}'),
  174.     (name: 'MPEG2_VIDEO'; GUID: '{E06D8026-DB46-11CF-B4D1-00805F6CBBEA}'),
  175.     (name: 'MPEG2_PROGRAM'; GUID: '{E06D8022-DB46-11CF-B4D1-00805F6CBBEA}'),
  176.     (name: 'MPEG2_TRANSPORT'; GUID: '{E06D8023-DB46-11CF-B4D1-00805F6CBBEA}'),
  177.     (name: 'MPEG2_AUDIO'; GUID: '{E06D802B-DB46-11CF-B4D1-00805F6CBBEA}'),
  178.     (name: 'DVD_SUBPICTURE'; GUID: '{E06D802D-DB46-11CF-B4D1-00805F6CBBEA}'),
  179.     (name: 'DVD_LPCM_AUDIO'; GUID: '{E06D8032-DB46-11CF-B4D1-00805F6CBBEA}'),
  180.     (name: 'SDDS'; GUID: '{E06D8034-DB46-11CF-B4D1-00805F6CBBEA}'),
  181.     (name: 'DVD_NAVIGATION_PCI'; GUID: '{E06D802F-DB46-11CF-B4D1-00805F6CBBEA}'),
  182.     (name: 'DVD_NAVIGATION_DSI'; GUID: '{E06D8030-DB46-11CF-B4D1-00805F6CBBEA}'),
  183.     (name: 'DVD_NAVIGATION_PROVIDER'; GUID: '{E06D8031-DB46-11CF-B4D1-00805F6CBBEA}'),
  184.     (name: 'MP42'; GUID: '{3234504D-0000-0010-8000-00AA00389B71}'),
  185.     (name: 'DIVX'; GUID: '{58564944-0000-0010-8000-00AA00389B71}'),
  186.     (name: 'VOXWARE'; GUID: '{00000075-0000-0010-8000-00AA00389B71}'));
  187.   FormatTypes: array[0..4] of TGUIDDescription =
  188.    ((name: '[Automatic]';  GUID: '{00000000-0000-0000-0000-000000000000}'),
  189.     (name: 'None';         GUID: '{0F6417D6-C318-11D0-A43F-00A0C9223196}'),
  190.     (name: 'VideoInfo';    GUID: '{05589F80-C356-11CE-BF01-00AA0055595A}'),
  191.     (name: 'VideoInfo2';   GUID: '{F72A76A0-EB0A-11D0-ACE4-0000C0CC16BA}'),
  192.     (name: 'WaveFormatEx'; GUID: '{05589F81-C356-11CE-BF01-00AA0055595A}'));
  193. implementation
  194.  uses ActiveX;
  195. {$R *.dfm}
  196.   constructor TFormMediaType.create(AOwner: TComponent);
  197.   var i: byte;
  198.   begin
  199.     inherited Create(AOwner);
  200.     MediaType:= TMediaType.Create;
  201.     for i := 0 to 15 do cbMajorTypes.Items.Add(MajorTypes[i].name);
  202.     for i := 0 to 97 do cbSubTypes.Items.Add(SubTypes[i].name);
  203.     for i := 0 to 4  do cbFormatType.Items.Add(FormatTypes[i].name);
  204.   end;
  205.   destructor TFormMediaType.Destroy;
  206.   begin
  207.     MediaType.Free;
  208.     inherited Destroy;
  209.   end;
  210. //    majortype            : TGUID;
  211. //    subtype              : TGUID;
  212. //    bFixedSizeSamples    : BOOL;
  213. //    bTemporalCompression : BOOL;
  214. //    lSampleSize          : ULONG;
  215. //    formattype           : TGUID;
  216. //    pUnk                 : IUnknown;
  217. //    cbFormat             : ULONG;
  218. //    pbFormat             : Pointer;
  219.   procedure TFormMediaType.FormShow(Sender: TObject);
  220.   begin
  221.     RefreshMediaType;
  222.   end;
  223.   procedure TFormMediaType.RefreshMediaType;
  224.   var i: byte;
  225.   begin
  226.     for i := 0 to 15 do
  227.       if IsEqualGUID(MajorTypes[i].GUID, MediaType.MajorType) then
  228.       begin
  229.         cbMajorTypes.ItemIndex := i;
  230.         Break;
  231.       end;
  232.     for i := 0 to 97 do
  233.       if IsEqualGUID(SubTypes[i].GUID, MediaType.SubType) then
  234.       begin
  235.         cbSubTypes.ItemIndex := i;
  236.         Break;
  237.       end;
  238.      if cbMajorTypes.ItemIndex = -1 then cbMajorTypes.ItemIndex := 0;
  239.      if cbSubTypes.ItemIndex   = -1 then cbSubTypes.ItemIndex := 0;
  240.      chkFixedSize.Checked    := MediaType.IsFixedSize;
  241.      chkTempCompress.Checked := MediaType.IsTemporalCompressed;
  242.      edSampleSize.Text := inttostr(MediaType.GetSampleSize);
  243.     for i := 0 to 4 do
  244.       if IsEqualGUID(FormatTypes[i].GUID, MediaType.FormatType) then
  245.       begin
  246.         cbFormatType.ItemIndex := i;
  247.         Break;
  248.       end;
  249.     edFormatSize.Text := inttostr(MediaType.FormatLength);
  250.     memo1.Clear;  
  251.     memo1.lines.Add(GetMediaTypeDescription(MediaType.AMMediaType));
  252.   end;
  253.   procedure TFormMediaType.btOKClick(Sender: TObject);
  254.   begin
  255.     try
  256.       MediaType.SetSampleSize(StrToInt(edSampleSize.Text));
  257.     except
  258.       MessageBox(Handle,PChar('Invalid Sample Size.'), PChar('Error'), mb_ok);
  259.       exit;
  260.     end;
  261.     ModalResult := mrOK;
  262.   end;
  263.   procedure TFormMediaType.cbMajorTypesChange(Sender: TObject);
  264.   begin
  265.     MediaType.MajorType := MajorTypes[cbMajorTypes.ItemIndex].GUID;
  266.     RefreshMediaType;
  267.   end;
  268.   procedure TFormMediaType.cbSubTypesChange(Sender: TObject);
  269.   begin
  270.     MediaType.SubType := SubTypes[cbSubTypes.ItemIndex].GUID;
  271.     RefreshMediaType;
  272.   end;
  273.   procedure TFormMediaType.chkFixedSizeClick(Sender: TObject);
  274.   begin
  275.     MediaType.AMMediaType.bFixedSizeSamples := chkFixedSize.Checked;
  276.     RefreshMediaType;
  277.   end;
  278.   procedure TFormMediaType.chkTempCompressClick(Sender: TObject);
  279.   begin
  280.     MediaType.AMMediaType.bTemporalCompression := chkTempCompress.Checked;
  281.     RefreshMediaType;
  282.   end;
  283.   procedure TFormMediaType.cbFormatTypeChange(Sender: TObject);
  284.   begin
  285.     MediaType.FormatType := FormatTypes[cbFormatType.ItemIndex].GUID;
  286.     RefreshMediaType;
  287.   end;
  288.   procedure TFormMediaType.edSampleSizeChange(Sender: TObject);
  289.   begin
  290.     try
  291.       if edSampleSize.Text = '' then MediaType.SetSampleSize(0) else
  292.         MediaType.SetSampleSize(StrToInt(edSampleSize.Text));
  293.     finally
  294.       RefreshMediaType;
  295.     end;
  296.   end;
  297. end.