проблема с загрузкой CiFilter - PullRequest
1 голос
/ 24 мая 2011

Этот вопрос, вероятно, актуален и для других авторов, впервые написавших CIFilter.Мне нужен совет по обновлению приложения видеопроигрывателя QTKit для Mac OS X (на основе QTKitPlayer) для использования CIFilters.Я уже прочитал руководства по Image Unit и Core Image.И я успешно получил приложение для загрузки и запуска встроенных CIFilters, используя [CIPlugIn loadAllPlugIns].

Я также успешно написал свой первый CIFilter, обернул его как модуль изображения и поместил в /Библиотечные / графические / графические блоки И я успешно протестировал его с помощью Quartz Composer, который загружает его и успешно работает.Я также успешно загрузил его в Core Image Fun House.

Однако измененное приложение QTKitPlayer не загрузит мой CIFilter.Точки останова показывают, что все встроенные фильтры CIF загружены, но мой фильтр - нет.

Поскольку я новичок в написании и использовании CIFilters, я беспокоюсь, что, должно быть, я пропустил какой-то код инициализации Core Image, или флаг nib QTMovieView, или флаг компилятора, или что-то еще.Нужно ли делать какие-либо настройки перед вызовом loadAllPlugins?Вот код:

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

Я проверяю, загружает ли он:;

Во время отладки мой CIFilter не отображается в filterList внутри моего производного QTKitPlayer.Но вставка того же кода в ядро ​​Core Image Fun House показывает, что filterList содержит мой фильтр.FunHouse также устанавливает для фильтра ciFilter, но для моего приложения устанавливается только значение Nil.

Чего не хватает в моем приложении QTKit, которое необходимо для загрузки CIPlugin?

Ответы [ 2 ]

2 голосов
/ 23 июля 2011

Спасибо за ваш ответ.С тех пор я решил эту проблему.Это оказалось 32-битной или 64-битной проблемой сборки в XCode.

Мои проекты были настроены для сборки выпуска, чтобы быть как 32-, так и 64-битными двоичными файлами плагинов.Но часто сборка Debug настраивалась на сборку только «родных» двоичных файлов.Поскольку проекты были либо старыми, либо проектами с измененным примером кода, мне потребовалось некоторое время, чтобы понять, что проблема заключалась в старых настройках сборки, а не во вновь измененном коде.

[CIPlugIn loadAllPlugIns] загружает только те плагины, которыебинарный совместимый с приложением.Таким образом, 32-битное приложение не увидит CIF-фильтры, созданные только для 64-битных.И 64-битное приложение не увидит плагины, созданные только для 32-битных систем.И т. Д., И т. Д. В моем случае, FunHouse мог загрузить мои модули изображения, в то время как измененный QTKitPlayer не смог.Мне просто нужно было изменить настройки сборки проекта.

Слово мудрому - после обновления до нового Mac, с новым OSX и новым XCode, если у вас возникают проблемы с сумеречной зоной - проверьте настройки сборки.

1 голос
/ 21 июля 2011

Вы уверены, что используете правильное имя для своего пользовательского фильтра?

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

Это должно быть имя класса (CIFilterClass), а не имя плагина (или модуля изображения).

...