Используйте GPUImage в EDK Marmalade

Я пытаюсь написать расширение GPUImage для мармелада Framework. Для этого я использовал официальную документацию и Marmalade Extension Development Kit (EDK). Я пишу пример кода, скомпилировать с:

mkb s3egpuimage_iphone.mkb --arm --release --compiler clang

Он хорошо компилируется, и я получаю библиотеку и заголовки и делаю связь с помощью развертываемого инструмента marlmalade и linkage отлично. Но я записываю ipa в iPod touch и запускаю этот код, получаю или замораживаю приложение или приложение сбоя. Сбой или заморозка начинаются с звонка:

[videoCamera startCameraCapture]

конечно я инициализировал видеокамеру с

[[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];

и сделать легкую цель:

textureOutput = [[GPUImageTextureOutput alloc] init];
...
[videoCamera addTarget:textureOutput]; 
[videoCamera startCameraCapture];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
unlink([pathToMovie UTF8String]);
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];

movieWriter.shouldPassthroughAudio = YES;
videoCamera.audioEncodingTarget = movieWriter;

[movieWriter startRecording];

Я думаю об этом, но я не понимаю этого. С тобой помочь, пожалуйста?

1 ответ

Снова я бы прокомментировал, если бы мог, но... Так что это частичный ответ.

Стоит просмотреть журнал, чтобы увидеть, появляются ли какие-либо сообщения, которых вы не ожидали. Однако вы не показали файл s4e, но несколько вещей для рассмотрения:

1) На нижнем уровне вы работаете в потоке ОС (либо указав его в файле s4e, либо свернув свой собственный)? Узнайте, к чему следует обращаться, и будьте последовательны - не смешивайте и не сочетайте.

2) Если вы находитесь в ветке os, обратите внимание на любые исключения. [код мармелада, вызываемый через поток os, не любит необработанные исключения.]

3) API, который вызывает через потоки, использует varargs (...). Это выглядит мощно, но есть известные проблемы с varargs, и мы бы сейчас не советовали - проблемы касаются 64-битных и подобных проблем с выравниванием. Предложите создать блок параметров для каждой функции и передать его вместо этого.

Если вы найдете больше, не стесняйтесь писать.

Другие вопросы по тегам