Delphi调用Xvid编解码范例(国外英文资料).doc
文本预览下载声明
Delphi调用Xvid编解码范例(国外英文资料)
单元主要;
接口
使用
Windows,消息,SysUtils,变体,类,图形,控件,表单,
对话框、DSUtil、stdctrl、DSPack、DirectShow9、菜单、extctrl、lib_xvid;
类型
TVideoForm =类(TForm)
FilterGraph:TFilterGraph;
VideoWindow:TVideoWindow;
MainMenu1:TMainMenu;
设备:TMenuItem;
过滤器:TFilter;
图片:TImage;
SampleGrabber:TSampleGrabber;
快照:TButton;
回调:TCheckBox;
mmo1:TMemo;
lbl1:TLabel;
过程FormCreate(发送者:TObject);
程序形式closequery(发送者:TObject;var CanClose:Boolean);
过程SnapShotClick(发送者:TObject);
过程SampleGrabberBuffer(发送者:TObject;SampleTime:双;
pbuf:指针;BufferLen:整数);
私人
/ / XVID编码器
xvid_gbl:xvid_gbl_init_t;
xvid_enc:xvid_enc_create_t;
xvid_encFrame:xvid_enc_frame_t;
xvid_encStats:xvid_dec_stats_t;xVid_decode:xvid_dec_create_t;
xvid_decFrame:xvid_dec_frame_t;
xvid_decStats:xvid_dec_stats_t;
公共
过程OnSelectDevice(发送者:TObject);
结束;常量
MaxPixelCount = 65536;
类型
/ / Pf24bit真彩色位图像素数据结构体
pRGBTripleArray = ^ TRGBTripleArray;
TRGBTripleArray = array[0 . .MaxPixelCount - 1)TRGBTriple;
var
VideoForm:TVideoForm;
SysDev:TSysDevEnum;
FrameBuf:array[0 . .352 * 288 * 3]字节;
FrameImg:array[0 . .352 * 288 * 3]字节;
FrameSequece:LongWord = 0;
防晒指数:TFileStream;
xvid_Version:整数;
实现
{ $ R * .dfm }
过程TVideoForm。FormCreate(发送方:TObject);
var
我:整数;
设备:TMenuItem;
开始
xvid_Version:= XVID_MAKE_VERSION(1 1 0);
SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
如果SysDev。CountFilters 0然后
i:= 0到SysDev。CountFilters - 1做
开始
设备:= TMenuItem.Create(设备);
设备。标题:= SysDev.Filters[我].FriendlyName;
设备。标签:=我;
设备。OnClick:= OnSelectDevice;
Devices.Add(设备);
结束;
结束;
过程TVideoForm。OnSelectDevice(发送方:TObject);
var
xerr:整数;
开始
FilterGraph.ClearGraph;
FilterGraph。活动:= false;
(1).moniker.
FilterGraph.
With FilterGraph as ICaptureGraphBuilder2 do
The begin
RenderStream (@pin_category_preview, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IBaseFilter);
The end;
The try
/ / XVID library initialization
Xvid_gbl.version: = xvid_Version / / Version: 1.1.0
Xvid_gbl.cpu_flags: = 0 / / Word (XVID_CPU_FORCE or XVID_CPU_ASM); / / 0: automatically
显示全部