Низкий FPS при доступе к буферу изображения вывода видео iPhone

Я пытаюсь выполнить некоторую обработку изображений на iPhone. Я использую http://developer.apple.com/library/ios/#qa/qa2010/qa1702.html для захвата кадров камеры.

Моя проблема в том, что когда я пытаюсь для доступа к захваченному буферу частота кадров в секунду падает с 30 до примерно 20. Кто-нибудь знает, как это исправить?

Я использую самое низкое качество захвата, которое я смог найти (AVCaptureSessionPresetLow = 192x144) в формате kCVPixelFormatType_32BGRA. Если кто-нибудь знает, что я могу использовать более низкое качество, я хочу попробовать.

Когда я делаю такой же доступ к изображениям на других платформах, таких как Symbian, он работает нормально.

Вот мой код:

#pragma mark -
#pragma mark AVCaptureSession delegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
    fromConnection:(AVCaptureConnection *)connection 
{ 
 /*We create an autorelease pool because as we are not in the main_queue our code is
  not executed in the main thread. So we have to create an autorelease pool for the thread we are in*/
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
 //Lock the image buffer
    if (CVPixelBufferLockBaseAddress(imageBuffer, 0) == kCVReturnSuccess)
    {  

  // calculate FPS and display it using main thread
  [self performSelectorOnMainThread:@selector(updateFps:) withObject: (id) nil waitUntilDone:NO];


  UInt8 *base = (UInt8 *)CVPixelBufferGetBaseAddress(imageBuffer); //image buffer start address

  size_t width  = CVPixelBufferGetWidth(imageBuffer); 
  size_t height = CVPixelBufferGetHeight(imageBuffer);

  int size = (height*width);
  UInt8* pRGBtmp = m_pRGBimage;

        /*
        Here is the problem; m_pRGBimage is RGB image I want to process.
        In the 'for' loop I convert the image from BGRA to RGB. As a resault, the FPS drops to 20.
        */ 
  for (int i=0;i

В качестве дополнения к ответам мне нужно обработать изображение в реальном времени, он отображается.

Я заметил, что когда я использую AVCaptureSessionPresetHigh, самое простое, что я делаю, например:

 for (int i=0;i

приводит к падению частоты кадров до 4-5 кадров в секунду. Я думаю, это потому, что изображение такого размера не кэшируется.

В основном мне нужно изображение 96x48. есть ли простой способ уменьшить выходное изображение камеры, способ, использующий аппаратное ускорение, чтобы я мог работать с маленьким?

8
задан Brad Larson 24 November 2010 в 14:41
поделиться