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

Delphi控件源码

开发平台:

Delphi

  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, OleServer, dspack, StdCtrls, DirectShow9,
  6.   DSUtil, ComCtrls;
  7. type
  8.   TForm1 = class(TForm)
  9.     CaptureGraph: TFilterGraph;
  10.     Button1: TButton;
  11.     OpenDialog: TOpenDialog;
  12.     debug: TMemo;
  13.     Label1: TLabel;
  14.     ListBox1: TListBox;
  15.     ListBox2: TListBox;
  16.     Button2: TButton;
  17.     SaveDialog: TSaveDialog;
  18.     Label2: TLabel;
  19.     Button3: TButton;
  20.     Button4: TButton;
  21.     Button5: TButton;
  22.     ListBox3: TListBox;
  23.     Button6: TButton;
  24.     Button7: TButton;
  25.     Label3: TLabel;
  26.     Label4: TLabel;
  27.     Label5: TLabel;
  28.     Label6: TLabel;
  29.     Label7: TLabel;
  30.     Label8: TLabel;
  31.     Button8: TButton;
  32.     Label9: TLabel;
  33.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  34.     procedure Button1Click(Sender: TObject);
  35.     procedure Button2Click(Sender: TObject);
  36.     procedure FormCreate(Sender: TObject);
  37.     procedure Button3Click(Sender: TObject);
  38.     procedure Button4Click(Sender: TObject);
  39.     procedure Button5Click(Sender: TObject);
  40.     procedure Button6Click(Sender: TObject);
  41.     procedure Button8Click(Sender: TObject);
  42.     procedure CaptureGraphDSEvent(sender: TComponent; Event, Param1,
  43.       Param2: Integer);
  44.   private
  45.     { Private declarations }
  46.   public
  47.     { Public declarations }
  48.   end;
  49. var
  50.   Form1: TForm1;
  51.   SourceFile  : IBaseFilter;
  52.   multiplexer : IBaseFilter;
  53.   DestFile    : IFileSinkFilter;
  54.   CapFilters  : TSysDevEnum;
  55.   AudFilters  : TSysDevEnum;
  56.   CompFilter  : TFilterList;
  57. implementation
  58. {$R *.dfm}
  59. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  60. begin
  61.   CompFilter.Free;
  62.   CaptureGraph.ClearGraph;
  63.   CaptureGraph.Active := false;
  64.   CapFilters.Free;
  65.   AudFilters.Free;
  66. end;
  67. procedure TForm1.Button1Click(Sender: TObject);
  68. var
  69.   EnumMT: TEnumMediaType;
  70.   i: integer;
  71. begin
  72.   if OpenDialog.Execute then
  73.   begin
  74.     CaptureGraph.ClearGraph;
  75.     CompFilter.Clear;
  76.     ListBox2.Clear;
  77.     label2.Caption := '';
  78.     Label1.Caption := OpenDialog.FileName;
  79.     debug.Clear;
  80.     EnumMT := TEnumMediaType.Create(OpenDialog.FileName);
  81.     if EnumMT.Count > 0 then
  82.       for i := 0 to EnumMT.Count - 1 do
  83.         debug.lines.Add(EnumMT.MediaDescription[i]);
  84.     EnumMT.Free;
  85.     with CaptureGraph as IGraphBuilder do
  86.       AddSourceFilter(StringToOleStr(OpenDialog.FileName),
  87.       StringToOleStr(OpenDialog.FileName), SourceFile);
  88.     debug.Lines.Add('Source filter added')
  89.   end;
  90. end;
  91. procedure TForm1.Button2Click(Sender: TObject);
  92. begin
  93.   if SaveDialog.Execute then
  94.   begin
  95.     with CaptureGraph as ICaptureGraphBuilder2 do
  96.       SetOutputFileName(MEDIASUBTYPE_Avi,
  97.       StringToOleStr(SaveDialog.FileName), multiplexer, DestFile);
  98.     Label2.Caption := SaveDialog.FileName;
  99.     debug.Lines.Add('Destination filter added');
  100.   end;
  101. end;
  102. procedure TForm1.FormCreate(Sender: TObject);
  103. var i : integer;
  104. begin
  105.   CompFilter  := TFilterList.Create;
  106.   AudFilters  := TSysDevEnum.Create(CLSID_AudioCompressorCategory);
  107.   CapFilters := TSysDevEnum.create(CLSID_VideoCompressorCategory);
  108.   For i := 0 to CapFilters.CountFilters - 1 do
  109.     ListBox1.Items.Add(CapFilters.Filters[i].FriendlyName);
  110.   For i := 0 to AudFilters.CountFilters - 1 do
  111.     ListBox3.Items.Add(AudFilters.Filters[i].FriendlyName);
  112. end;
  113. procedure TForm1.Button3Click(Sender: TObject);
  114. begin
  115.   if ListBox1.ItemIndex <> -1 then
  116.   begin
  117.     CompFilter.Add(CapFilters.GetBaseFilter(ListBox1.ItemIndex));
  118.     with CaptureGraph as IGraphBuilder do
  119.       AddFilter(CompFilter.Last, StringToOleStr(ListBox1.Items.Strings[ListBox1.ItemIndex]));
  120.     ListBox2.Items.Add(ListBox1.Items.Strings[ListBox1.ItemIndex])
  121.   end;
  122. end;
  123. procedure TForm1.Button4Click(Sender: TObject);
  124. begin
  125.   if ListBox2.ItemIndex <> -1 then
  126.   begin
  127.     with CaptureGraph as IGraphBuilder do
  128.     RemoveFilter(CompFilter.Items[ListBox2.ItemIndex]);
  129.     CompFilter.Delete(ListBox2.ItemIndex);
  130.     ListBox2.Items.Delete(ListBox2.ItemIndex);
  131.   end;
  132. end;
  133. procedure TForm1.Button5Click(Sender: TObject);
  134. var i: integer;
  135. begin
  136.   if CompFilter.Count > 0 then
  137.     for i := 0 to CompFilter.Count - 1 do
  138.       with CaptureGraph as ICaptureGraphBuilder2 do
  139.         RenderStream(nil,nil,SourceFile,CompFilter.Items[i],multiplexer);
  140. end;
  141. procedure TForm1.Button6Click(Sender: TObject);
  142. begin
  143.   if ListBox3.ItemIndex <> -1 then
  144.   begin
  145.     CompFilter.Add(AudFilters.GetBaseFilter(ListBox3.ItemIndex));
  146.     with CaptureGraph as IGraphBuilder do
  147.       AddFilter(CompFilter.Last, StringToOleStr(ListBox3.Items.Strings[ListBox3.ItemIndex]));
  148.     ListBox2.Items.Add(ListBox3.Items.Strings[ListBox3.ItemIndex])
  149.   end;
  150. end;
  151. procedure TForm1.Button8Click(Sender: TObject);
  152. begin
  153. //  with CaptureGraph as ICaptureGraphBuilder2 do
  154.   CaptureGraph.Play;
  155. end;
  156. procedure TForm1.CaptureGraphDSEvent(sender: TComponent; Event, Param1,
  157.   Param2: Integer);
  158. begin
  159.   debug.Lines.Add(GetEventCodeDef(Event));
  160. end;
  161. end.