Я пытаюсь научиться использовать разные библиотеки ffmpeg с Какао и пытаюсь отобразить кадры с помощью Core Video. Кажется, я получил обратные вызовы CV для работы, и он получает кадры, которые я пытаюсь вставить в CVImageBufferRef, который я позже рисую с Core Image.
Проблема в том, что я пытаюсь заставить PIX_FMT_YUYV422 работать с libswscale, но как только я изменяю формат пикселя на любой другой, кроме PIX_FMT_YUV420P, происходит сбой с EXC_BAD_ACCESS.
Пока я использую YUV420P, программа работает, хотя она не отображается должным образом. Я подозревал, что формат пикселей не поддерживается, поэтому я хотел попробовать PIX_FMT_YUYV422.
Я уже работал и успешно записывал файлы PPM с PIX_FMT_RGB24. По какой-то причине это просто обрушилось на меня сейчас, и я не вижу, что может быть не так.
Я немного перегружен головой, но именно так я предпочитаю учиться. :)
Вот как я распределяю AVFrames:
inFrame = avcodec_alloc_frame();
outFrame = avcodec_alloc_frame();
int frameBytes = avpicture_get_size(PIX_FMT_YUYV422, cdcCtx->width, cdcCtx->height);
uint8_t *frameBuffer = malloc(frameBytes);
avpicture_fill((AVPicture *)outFrame, frameBuffer, PIX_FMT_YUYV422, cdcCtx->width, cdcCtx->height);
Затем я пытаюсь запустить его через swscale так:
static struct SwsContext *convertContext;
if (convertContext == NULL) {
int w = cdcCtx->width;
int h = cdcCtx->height;
convertContext = sws_getContext(w, h, cdcCtx->pix_fmt, outWidth, outHeight, PIX_FMT_YUYV422, SWS_BICUBIC, NULL, NULL, NULL);
if (convertContext == NULL) {
NSLog(@"Cannot initialize the conversion context!");
return NO;
}
}
sws_scale(convertContext, inFrame->data, inFrame->linesize, 0, outHeight, outFrame->data, outFrame->linesize);
И, наконец, я пытаюсь записать его в пиксельный буфер для использования с Core Image:
int ret = CVPixelBufferCreateWithBytes(0, outWidth, outHeight, kYUVSPixelFormat, outFrame->data[0], outFrame->linesize[0], 0, 0, 0, ¤tFrame);
С 420P он работает, но не совпадает с форматом kYUVSPixel для пиксельного буфера, и, как я понимаю, он не принимает YUV420.
Я был бы очень признателен за любую помощь, независимо от того, насколько она мала, поскольку она могла бы помочь мне в борьбе. :)