Смена камеры Назад во время съемки видео вызывает странную проблему - PullRequest
0 голосов
/ 26 марта 2019

Я создаю приложение камеры, которое захватывает видео, используя SCRecorder . Я пытаюсь применить несколько фильтров к видео. Я изменяю конфигурацию видео рекордера, как показано ниже

func swipeableFilterView(_ swipeableFilterView: SCSwipeableFilterView, didScrollTo filter: SCFilter?) {
    selectedFilter = filter!
    recorder.videoConfiguration.filter = filter!
}

Я снимаю видео с помощью , применяя фильтры , когда я переключаю камеру назад на передний план, тогда я получаю черный экран с правой стороны как сильфонное изображение:

enter image description here

с задней камерой будет работать идеально

вот код appendVideoSampleBuffer

- (void)appendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer toRecordSession:(SCRecordSession *)recordSession duration:(CMTime)duration connection:(AVCaptureConnection *)connection completion:(void(^)(BOOL success))completion {
    @autoreleasepool {
        CVPixelBufferRef sampleBufferImage = CMSampleBufferGetImageBuffer(sampleBuffer);

        size_t bufferWidth = (CGFloat)CVPixelBufferGetWidth(sampleBufferImage);
        size_t bufferHeight = (CGFloat)CVPixelBufferGetHeight(sampleBufferImage);

        CMTime time = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
        SCFilter *filterGroup = _videoConfiguration.filter;
        SCFilter *transformFilter = [self _transformFilterUsingBufferWidth:bufferWidth bufferHeight:bufferHeight mirrored:
                                     _device == AVCaptureDevicePositionFront
                                     ];

            if (filterGroup == nil && transformFilter == nil) {
                [recordSession appendVideoPixelBuffer:sampleBufferImage atTime:time duration:duration completion:completion];
                return;
            }

        CVPixelBufferRef pixelBuffer = [recordSession createPixelBuffer];

        if (pixelBuffer == nil) {
            completion(NO);
            return;
        }

        CIImage *image = [CIImage imageWithCVPixelBuffer:sampleBufferImage];
        CFTimeInterval seconds = CMTimeGetSeconds(time);

            if (transformFilter != nil) {
                image = [transformFilter imageByProcessingImage:image atTime:seconds];
            }

            if (filterGroup != nil) {
                image = [filterGroup imageByProcessingImage:image atTime:seconds];
            }

        CVPixelBufferLockBaseAddress(pixelBuffer, 0);

        [_context render:image toCVPixelBuffer:pixelBuffer];

        [recordSession appendVideoPixelBuffer:pixelBuffer atTime:time duration:duration completion:^(BOOL success) {
            CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

            CVPixelBufferRelease(pixelBuffer);

            completion(success);
        }];
    }
}

Я отладил код и думаю, проблема с

     CVPixelBufferLockBaseAddress(pixelBuffer, 0);

любой, пожалуйста, помогите мне!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...