2011-05-24 127 views
1

这个问题也可能与其他第一次CIFilter编写者有关。 我需要关于更新Mac OS X(基于QTKitPlayer)的视频播放器QTKit应用程序以使用CIFilter的建议。我已经阅读了图像单元和核心图像指南。我已经成功地使用[CIPlugIn loadAllPlugIns]来获取应用程序来加载并运行内置的CIFilter。加载CiFilter时出现问题

我也成功地编写了我的第一张CIFilter,将它封装成一个图像单元,并将它放到/ Library/Graphics/Image Units中 我用Quartz Composer成功地进行了测试,Quartz Composer加载并运行成功。我也成功地将它加载到Core Image Fun House中。

但是,改变的QTKitPlayer应用程序不会加载我的CIFilter。断点显示所有内置的CIFilters已加载,但我的过滤器没有加载。

因为我是一个新手编写和使用CIFilters,我担心我一定错过了一些核心图像初始化代码,或QTMovieView笔尖旗标,或编译器标志,或其他东西。在调用loadAllPlugins之前是否需要做任何设置? 代码如下:

[CIPlugIn loadAllPlugIns]; CIFilter * ciFilter = [CIFilter filterWithName:@“MyDistortionWarp”];

我检查,看它是否与加载:

的NSArray * filterList = [CIFilter filterNamesInCategories:[NSArray的arrayWithObject:kCICategoryDistortionEffect]];

在调试过程中,我的CIFilter没有出现在我的QTKitPlayer派生中的filterList中。但是,将相同的代码插入到Core Image Fun House src中,则会显示filterList包含我的过滤器。 FunHouse也将ciFilter设置为过滤器,但我的应用程序只设置为无。

我的QTKit应用缺失,需要加载CIPlugin?

回答

1

您确定要为自定义过滤器使用正确的名称吗?

(CIFilter *ciFilter = [CIFilter filterWithName:@"MyDistortionWarp"];) 

这必须是类名(CIFilterClass)不插件(或图像单元)的名称。

2

感谢您的回复。 我已经解决了这个问题。 原来是XCode中的32位与64位构建问题。

我的项目是为发布构建而设计的,它是32位和64位插件二进制文件。 但是,经常将Debug版本设置为仅构建“本机”二进制文件。由于这些项目要么是旧的,要么是改变了示例代码项目,我花了一段时间才意识到问题出现在旧版本设置中,而不是新修改的代码。

[CIPlugIn loadAllPlugIns]只加载与应用程序二进制兼容的插件。所以,一个32位的应用程序不会看到CIFilters只为64位构建。而且,64位应用程序不会看到只为32位系统构建的插件。等等。在我的情况下,FunHouse可以加载我的图像单元,而改变后的QTKitPlayer则无法加载。我只需要改变项目的构建设置。

聪明之词 - 在升级到新的Mac之后,如果遇到暮光区问题,请使用新的OSX &新的XCode - 检查您的构建设置。

相关问题