GPUImage: отмена GPUImageMovieWriter

Есть ли способ отменить/остановить GPUImageMovieWriter и GPUImageMovie после запуска startRecording и startProcessing?


person John Estropia    schedule 04.09.2012    source источник


Ответы (3)


Недавно в GPUImageMovie был добавлен новый метод, позволяющий отменить обработку видеофайла:

- (void)cancelProcessing;

Это позволит вам эффективно отменить обработку видео и кадры больше обрабатываться не будут.

Примите во внимание, что ваш GPUImageMovieWriter's completeBlock будет вызываться в любом случае, поэтому у вас должен быть какой-то флаг, чтобы проверить, был ли вызван блок для успешного завершения или отмены.

Вот пример кода:

- (void)processVideo
{
    _wasCancelled = NO;

    self.imageMovie = [self createImageMovie];
    self.filter = [self createFilter];
    [imageMovie addTarget:filter]
    self.movieWriter = [self createMovieWriter];

    [self.movieWriter startRecording];
    [self.imageMovie startProcessing];

    [self.movieWriter setCompletionBlock:^{
        [self.filter removeTarget:movieWriter];
        [self.movieWriter finishRecording];

        if (!_wasCancelled) {
            // Do stuff with the video
        }
    }];
}

- (void)cancelVideoProcessing
{
    _wasCancelled = YES;
    [self.imageMovie cancelProcessing];
}
person Kinopio    schedule 30.05.2013

Предполагая, что self.movieWriter является GPUImageMovieWriter, вам необходимо установить обратный вызов перед вызовом startRecording и startProcessing:

[self.movieWriter setCompletionBlock:^{
    [self finishFilter];
}];

И тогда вы можете остановить обработку изображения с помощью:

[self.movieWriter endProcessing];

И обратный вызов:

- (void)finishFilter {
    //remove all targets from your filter chain calling "removeAllTargets"
    //then:
    [self.movieWriter finishRecording];
    self.movieWriter.completionBlock = nil;
    self.movieWriter = nil;
}
person Nikita    schedule 27.09.2012
comment
Что, если я не хочу его заканчивать? Когда я говорю «отменить», я действительно имею в виду «отменить»; Я не хочу сохранять часть фильма. - person John Estropia; 28.09.2012

Почему. Есть возможность отменить запись.

[self.movieWriter cancelRecording];

Видео не сохраняется, если оно каким-либо образом прерывается.

person girish_vr    schedule 12.02.2013