CVPixelBuffer со звуком - PullRequest
       35

CVPixelBuffer со звуком

0 голосов
/ 29 января 2012

Я использую AVFoundation для захвата CMSampleBufferRef с камеры, а затем преобразую его в CVPixelBufferRef для записи в видео. Что я хочу сделать, это изменить некоторые пиксели внутри видеокадров. Вот почему мне нужно вытащить CVPixelBufferRef из моего CMSampleBuffer. Моя проблема в том, что я не смог включить аудиоданные оригинала CMSampleBuffer в мой новый CVPixelBufferRef

Я также пытался воссоздать CMSampleBuffer с CVPixelBufferRef, но он возвращает мне ошибку:

- (CMSampleBufferRef)newModifyImage:(CMSampleBufferRef)sampleBuffer {
    CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer);
    CVPixelBufferLockBaseAddress(cvimgRef,0);

    uint8_t *buf=(uint8_t *)CVPixelBufferGetBaseAddress(cvimgRef);

    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(cvimgRef); 
    size_t width = CVPixelBufferGetWidth(cvimgRef); 
    size_t height = CVPixelBufferGetHeight(cvimgRef); 


    CVPixelBufferRef pixelBufRef = NULL;
    CMSampleBufferRef newSampleBuffer = NULL;
    CMSampleTimingInfo timimgInfo = kCMTimingInfoInvalid;
    CMSampleBufferGetSampleTimingInfo(sampleBuffer, 0, &timimgInfo);

    OSStatus result = 0;

    OSType pixFmt = CVPixelBufferGetPixelFormatType(cvimgRef);

    CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, pixFmt, buf, bytesPerRow, NULL, NULL, NULL, &pixelBufRef);

    CMVideoFormatDescriptionRef videoInfo = NULL;

    result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBufRef, &videoInfo);

    CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBufRef, true, NULL, NULL, videoInfo, &timimgInfo, &newSampleBuffer);
    return newSampleBuffer;
}

1 Ответ

1 голос
/ 29 января 2012

проверьте образец кода RosyWriter http://developer.apple.com/library/ios/#samplecode/RosyWriter/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40011110

записывает видео и аудио из буферов семплов

...