Я искал простой пример того, как декодировать поток H264 с аппаратным ускорением с помощью ffmpeg в Windows, но я не смог его найти. Я знаю, что мне следует использовать dxva2 с ffmpeg для аппаратного ускорения.
Я могу декодировать H264 с помощью ffmpeg на ЦП, затем конвертировать формат NV12 в RGBA и сохранять кадры в виде файлов bmp, благодаря примерному проекту, представленному в опубликовать.
Я следил за тем, что представлено в следующем сообщении, чтобы получить справку о dxva2: -with-dxva2">опубликовать
Я считаю, что могу успешно декодировать с помощью dxva2; однако, когда я хочу получить декодированный кадр, преобразовать его в формат RGBA и сохранить в виде файла bmp, я получаю сообщение об ошибке об указателях источника.
Я декодирую и получаю кадр следующим образом:
int videoFrameBytes = avcodec_decode_video2(pCodecCtx_hwaccel, pFrameYuv, &got_picture_ptr, avpkt);
if (got_picture_ptr==1)
{
if(dxva2_retrieve_data_call(pCodecCtx_hwaccel, pFrameYuv) == 0)
{
fprintf(stderr, "Got frame successfully\n");
result = true;
}
}
и подайте выходной кадр на:
sws_scale(pImgConvertCtx, pFrameYuv->data, pFrameYuv->linesize, 0, height, frame->data, frame->linesize);
Я получаю эту ошибку:
[swscaler @ 030c5c20] неправильные указатели изображений src
Очевидно, что-то не так с pFrameYuv->data
, но я не знаю что.
Как мы можем преобразовать кадр NV12, декодированный с помощью DXVA2, в RGBA с помощью sws_scale?