谁做过MCI编程,帮帮忙吧,有关视频采集的问题 (200分)

  • 主题发起人 主题发起人 jieson
  • 开始时间 开始时间
J

jieson

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做大屏幕的控制系统,需要在窗口里显示来自视频卡video口的视频流。厂家提供了一个vb的demo,可是我转成delphi之后就是显示不出来,我也不知道问题出在哪,因为函数返回值都是对的。下面是一部分代码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, mmSystem, Clipbrd, Menus;
const
CONFIG_BASE = 100;

CONFIG_SOURCE_1 = (CONFIG_BASE + 10);
CONFIG_SOURCE_2 = (CONFIG_SOURCE_1 + 1);
CONFIG_SOURCE_3 = (CONFIG_SOURCE_1 + 2);
CONFIG_SOURCE_4 = (CONFIG_SOURCE_1 + 3);

CONFIG_SOURCE_5 = (CONFIG_SOURCE_1 + 4);
CONFIG_SOURCE_6 = (CONFIG_SOURCE_1 + 5);
CONFIG_SOURCE_MAX = CONFIG_SOURCE_6 ;

MCI_DGV_SETVIDEO_SRC_NTSC = $4000;
MCI_DGV_SETVIDEO_SRC_RGB = $4001;
MCI_DGV_SETVIDEO_SRC_SVIDEO = $4002;
MCI_DGV_SETVIDEO_SRC_PAL = $4003;
MCI_DGV_SETVIDEO_SRC_SECAM = $4004;
MCI_DGV_SETVIDEO_SRC_GENERIC = $4005 ;

CONFIG_TYPE_BASE = (CONFIG_BASE - MCI_DGV_SETVIDEO_SRC_NTSC + 20);
CONFIG_TYPE_NTSC = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_NTSC);
CONFIG_TYPE_RGB = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_RGB);
CONFIG_TYPE_SVIDEO = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_SVIDEO);
CONFIG_TYPE_PAL = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_PAL);
CONFIG_TYPE_SECAM = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_SECAM);
CONFIG_TYPE_GENERIC = (CONFIG_TYPE_BASE + MCI_DGV_SETVIDEO_SRC_GENERIC);

CONFIG_TYPE_MIN = CONFIG_TYPE_NTSC;
CONFIG_TYPE_MAX = CONFIG_TYPE_GENERIC;




type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
property1: TMenuItem;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure property1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
DrvError:LongInt;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Close overlay left open from a previous run cut short by the debugger
mciSendStringA('close overlay', ' ', 0, 0 );

DrvError := mciSendStringA('open overlay ', ' ', 0, 0);
If DrvError <> 0 Then
showmessage('MCI Error code ' + inttoStr(DrvError) + ' when opening device ');

IMage1.Picture.Assign(Clipboard);
DrvError := mciSendString(PChar('window overlay handle ' + inttoStr(self.Handle)), ' ', 0, 0);

If DrvError <> 0 Then
showmessage( 'MCI Driver did not get the window handle Error code: ' + inttoStr(DrvError));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DrvError := mciSendString('window overlay handle default', ' ', 0, 0);

If DrvError <> 0 Then
showmessage('MCI Error code: ' + inttoStr(DrvError) + ' while handle default ');

DrvError := mciSendString('close overlay', ' ', 0, 0);
If DrvError <> 0 Then
showmessage('MCI Error code: ' + inttoStr(DrvError) + ' while handle default ');
end;
他那个vb的实例,formcreate之后就能显示图象了,为什么delphi不行?难道delphi的form和vb的form不一样?
procedure TForm1.property1Click(Sender: TObject);
begin
form2.show;
end;

end.
 
摄像头做过
 
你告诉我怎么显示在窗体上啊哥们,信号已经发出来了,但是我不会显示,你做摄象头怎么显示的?
 
把那些和视频相关的东东放到显示视频的那个窗口的show事件中试试。
 
所有的东西都在这了,现在已经能显示了,因为我发现我关闭程序的时候根本关闭不了,程序执行不到关闭事件,所以每次DrvError := mciSendString('close overlay', ' ', 0, 0);都不会执行,回到delphi之后,因为我的注释是粉红色的,我发现在我的注释上的字正在播放vcd!我分特呀分特,原来窗体是粉红色才能播放的!!
为什么啊???一百遍啊一百遍!
 
还有播放的时候显示的不只是vcd里的东西,连vcd外面的也能显示,就是分隔的那个而且上面的东西底下也有显示,比如屏幕内容应该这样:
1234
5678
90ab
但是显示出来就是
1234
5678
90ab
1234
上面的内容显示类两次,谁做过这东西啊,帮帮我,我用的是datapath的卡

 
用directx吧,很通用,现在的卡都支持wdm
 
我只有mci的例子,别的我也不懂啊。
到现在都没解决,够痛苦的。
换个机器显示的效果就不一样,而且每次点右上角的“X”关闭时都不触发FormClose事件
 
多人接受答案了。
 
后退
顶部