проблема с загрузкой CiFilter

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

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

Однако измененное приложение QTKitPlayer не ЗАГРУЗИТ мой CIFilter. Точки останова показывают, что все встроенные фильтры CIFilter загружены, а мой фильтр — нет.

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

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

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

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

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

Чего не хватает моему приложению QTKit, что ему нужно загрузить CIPlugin?


person Brian    schedule 24.05.2011    source источник


Ответы (2)


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

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

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

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

person Brian    schedule 23.07.2011

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

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

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

person JJBee    schedule 21.07.2011