2016-07-26 5 views
3

Я пытаюсь получить CVPixelBufferRef из CMSampleBufferRef в целях изменения CVPixelBufferRef для наложения водяного знака на лету.CMSampleBufferGetImageBuffer, возвращающий нуль

Я использую CMSampleBufferGetImageBuffer(sampleBuffer) для достижения этого. Я печатаю результат возвращенного CVPixelBufferRef, но его всегда null.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

    NSLog(@"PixelBuffer %@",pixelBuffer); 
... 

} 

У меня там ничего не хватает?

ответ

4

После нескольких часов отладки выясняется, что образец может быть образцом видео или аудио. Поэтому попытка получить CVPixelBufferRef из звукового буфера возвращает null.

Я решил его, проверив тип образца перед продолжением. Поскольку меня не интересуют звуковые сэмплы, я просто возвращаю их аудио-образец.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

    CMFormatDescriptionRef formatDesc = CMSampleBufferGetFormatDescription(sampleBuffer); 
    CMMediaType mediaType = CMFormatDescriptionGetMediaType(formatDesc); 

    //Checking sample type before proceeding 
    if (mediaType == kCMMediaType_Audio) 
    {return;} 

//Processing the sample... 

} 
Смежные вопросы