Как конвертировать CMSampleBuffer / UIImage в AVPicture ffmpeg? - PullRequest
8 голосов
/ 21 декабря 2010

Я пытаюсь кодировать кадры камеры iPhone в видео H.264, используя библиотеки libf * от ffmpeg. Я нашел в этом Статья Apple , как конвертировать CMSampleBuffer в UIImage, но как я могу конвертировать его в AVPicture ffmpeg?

Спасибо.

1 Ответ

14 голосов
/ 21 декабря 2010

Отвечая на мой вопрос:

CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);

// access the data
int width = CVPixelBufferGetWidth(pixelBuffer);
int height = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *rawPixelBase = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);

// Do something with the raw pixels here
// ...

// Fill in the AVFrame
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

AVFrame *pFrame;
pFrame = avcodec_alloc_frame();

avpicture_fill((AVPicture*)pFrame, rawPixelBase, PIX_FMT_RGB32, width, height);

Теперь pFrame заполняется содержимым буфера семплов, который использует пиксельный формат kCVPixelFormatType_32BGRA.

Это решило мою проблему. Спасибо.

...