Я пытаюсь захватить видеокадры с моей камеры MacBook и обрабатывать их на лету (для последующего обнаружения лица). Чтобы уменьшить использование памяти, я хочу уменьшить разрешение захвата с заданного значения 1200x720 до 640x480.AVFoundation: как изменить размер кадров в sampleBuffer (AVCaptureSessionPreset) не влияет на это
Вот мой код, чтобы настроить Capture Session:
_session = [[AVCaptureSession alloc] init];
if ([_session canSetSessionPreset:AVCaptureSessionPreset640x480]){
[_session setSessionPreset:AVCaptureSessionPreset640x480];
NSLog(@"resolution preset changed");
}
// configure input
_camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
_deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_camera error:nil];
// configure output
_videoOutput = [[AVCaptureVideoDataOutput alloc] init];
NSDictionary* newSettings = @{ (NSString*) kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)};
_videoOutput.videoSettings = newSettings;
//discard if the data output queue is blocked
[_videoOutput setAlwaysDiscardsLateVideoFrames:YES];
// process frames on another queue
dispatch_queue_t videoDataOutputQueue;
videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL);
[_videoOutput setSampleBufferDelegate:videoBufferDelegate queue:videoDataOutputQueue];
[_session addInput:_deviceInput];
[_session addOutput:_videoOutput];
[_session startRunning];
После этого сеанса устанавливает соответствующим образом, он записывает «разрешение предварительно изменилось» правильно и передает видеоданные делегата на другой очереди на обрабатывать его. Когда я проверяю session.sessionPreset
, он говорит, что пресет AVCaptureSessionPreset640x480
.
Сейчас в делегатом:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
//get the image from buffer, transform it to CIImage
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
self.image = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer];
self.image.extent.size
При осмотре, он показывает и неправильный размер 1200x720, как если бы я не изменил предустановку раньше. Даже при проверке аргумента метода sampleBuffer
он показывает размерность 1200x720.
Я просмотрел интернет и ссылку на яблоко в течение нескольких часов, но не смог найти решение. Надеюсь, вы можете спасти меня!