delphi下编写filter以及调试
来源:互联网 发布:mac pro10.9无法升级 编辑:程序博客网 时间:2024/06/07 16:37
一般用dspack开发directshow
1.从工程文件以dll方式建立filter工程,在工程头加上如下
uses
BaseClass,
xxx.pas; //编写filter单元的文件,套加
{$E ax} //编译出.AX格式文件
exports //导出Filter相关的函数,定义在BaseClass.Pas
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
begin
end.
2.创建单元文件main.pas,下面基本可以照套.
unit main;
interface
uses BaseClass, ActiveX, DirectShow9, Windows;
{DirectShow9 定义了各种DirectShow基本接口和类型,
BaseClass 实现了各种接口的基类}
const
CLSID_MyClass : TGUID = '{90A70CF4-A445-4211-B962-308054E93023}';
//定义Filter媒体类型和Pin的属性,这里是演示TransformFilter如下:
MyPinTypes : TRegPinTypes =
(clsMajorType: @MEDIATYPE_NULL;
clsMinorType: @MEDIASUBTYPE_NULL);
MyPins : array[0..1] of TRegFilterPins =
((strName: 'Input'; bRendered: FALSE; bOutput: FALSE; bZero: FALSE;
bMany: FALSE; oFilter: nil; strConnectsToPin: nil;
nMediaTypes: 1; lpMediaType: @MyPinTypes),
(strName: 'Output'; bRendered: FALSE; bOutput: TRUE; bZero: FALSE;
bMany: FALSE; oFilter: nil; strConnectsToPin: nil;
nMediaTypes: 1; lpMediaType: @MyPinTypes));
//从基类TBCTransInPlaceFilter派生出一个TransformFilter,
// TBCTransInPlaceFilter支持数据的"就地"处理,从这个基类派生出新的Filter,
// 只要实现function Transform(Sample: IMediaSample): HRESULT;
// function CheckInputType(mtin: PAMMediaType): HRESULT
//这两个虚函数就可以使用了
type
TMyClass = class(TBCTransInPlaceFilter)
function Transform(Sample: IMediaSample): HRESULT; override;
function CheckInputType(mtin: PAMMediaType): HRESULT; override;
end;
implementation
function TMyClass.CheckInputType(mtin: PAMMediaType): HRESULT;
begin
// 这里是检测mtin的媒体类型,如果跟我们所要的是一样,我们就返回S_OK,否则返回S_False,
//if IsEqualGUID(mtin.majortype, MEDIATYPE_Video) and IsEqualGUID(mtin.subtype, MEDIASUBTYPE_RGB24) then
// result := S_OK else result := S_False;
result := S_OK;
end;
function TMyClass.Transform(Sample: IMediaSample): HRESULT;
begin
//这里就是我们实现对Sample的数据进行处理的代码,可以是视频的处理,
//可以是音频的处理,要看输入PIN(MyPinTypes)是什么样的媒体类型
result := NOERROR;
end;
initialization
//类工厂注册Filter的一些信息,
// 第一个参数是Filter本身的实现对象TMyClass,
// 第二个参数是Filter的名字'MyFilter',
// 第三个参数是Filter的GUID CLSID_MyClass,
// 第四个参数是注册Filter的类型,
// 第五个参数是Filter的Merit值,这个值如果设得高的话,智能连接里被使用率就要高,
// 第六个参数是PIN的个数,这里一个输入PIN一个输出PIN,所以是2,
// 最后一个参数是PIN的类型属性,就是上面定义的MyPins数组
TBCClassFactory.CreateFilter(TMyClass, 'MyFilter', CLSID_MyClass,
CLSID_LegacyAmFilterCategory, MERIT_DO_NOT_USE, 2, @MyPins);
end.
调试FIlter
1. 先注册.用regsvr32
2. 在Run Parameters里的Host Application里设置Graphedt.exe的路径,
3. Run
如果跟不进去,则在工程文件编译开关中加入debug宏(或定义在工程文件中)
还跟不进去的话,估计是在工程管理中有多个工程,在工程管理中只能有
一个工程。(不知道是delphi7的问题还是其他,反正我机子上是不能在多工
程文件下跟进去。怪)
- delphi下编写filter以及调试
- 编写filter
- 用GDB调试程序以及makefile编写
- 汇编环境配置以及代码编写调试
- 在Delphi中调试编写的ASP组件
- Delphi WebService 的编写、调试、发布(IIS)、调用
- Delphi WebService 的编写、调试、发布(IIS)、调用
- Delphi下如何调试动态库
- Delphi下DLL调用以及共享数据库连接
- Delphi下DLL调用以及共享数据库连接
- linux环境下c++的编写、调试以及makefile多文件连编需要注意的问题
- win7下编写调试自己的OS
- Delphi 调试
- Delphi 调试
- ubuntu 下编写程序以及运行可执行文件
- delphi编写的程序如何在win7下提升权限
- delphi编写与调用DLL(delphi7下测试通过)
- Winamp "in_cdda" 模块的调试以及SHELLCODE的编写
- 【数据库】聚簇索引和非聚簇索引
- c# 线程入门教程,详解
- poj1470
- CEdit & CRichEdit 使用技巧
- 读书摘要 - 团队的秘密 如何打造高绩效的卓越团队(美 马克·米勒)
- delphi下编写filter以及调试
- struct&& class
- IOS结合hessian实现远程调用
- 程序员半年随想
- Poj 1384 & Hdu 1114 Piggy-Bank (完全背包)
- Linux内核版本号的含义
- 对协议有无状态的理解
- MySQL 添加列,修改列,删除列
- 浅谈聚集因子