ffmpeg-X264 кодировать --BGRA в AVFrame (ffmpeg) и наоборот? для IOS

Работаю над обработкой видео в IOS (iphone/ipod/ipad) с использованием цели c. Я использую AVFoundation Framework для захвата видео. я хочу кодировать/декодировать этот видеокадр, используя ffmpeg-libx264. Я скомпилировал библиотеку ffmpeg-x264 для iOS. я получил kCVPixelFormatType_32BGRA от AVFoundation.

моя проблема
1. Как преобразовать kCVPixelFormatType_32BGRA в AVFrame для enode с помощью avcodec_encode_video?

2.Как конвертировать AVFrame в kCVPixelFormatType_32BGRA @decode side из avcodec_decode_video2?

Пожалуйста, помогите мне начать описанный выше процесс или укажите путь к рабочему руководству. Заранее спасибо.


person Asta ni enohpi    schedule 08.02.2012    source источник


Ответы (1)


Если вы пытаетесь использовать FFMpeg, вам нужно использовать kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, а не kCVPixelFormatType_32BGRA, а затем вы можете вставить его в AVFrame. Возможно, вам также захочется преобразовать то, что вы получаете с камеры iOS (YUVNV12), в YUV420P, чтобы вы могли получать его на других устройствах, отличных от iOS. Если вы используете только устройства iOS и это все, что вам нужно, вы можете пропустить эту часть преобразования цвета и просто упаковать ее в AVFrame.

Поскольку вы уже переводите его в формат YUV, вы можете просто использовать CVPixelBufferGetBaseAddressOfPlane(buf,0) и закодировать этот адрес.

После декодирования изображения вам нужно изменить цвета на BGRA с YUV420P. Если вы не поменяли местами цвета должным образом перед кодированием, вы просто замените YUVNV12 на BGRA.

Надеюсь, что это помогает немного. Вы можете найти правильные алгоритмы преобразования цвета в Интернете.

person rodisbored    schedule 05.04.2012