libav: где взять ссылку на AV_PIX_FMT_NV12 при использовании cuda / cuvid? - PullRequest
0 голосов
/ 28 марта 2019

Скажем, я использую av_hwdevice_find_type_by_name("cuda"), как в здесь . Мне нужно преобразовать декодированные кадры в RGB, используя SwsContext. По своему опыту я знаю, что при использовании декодера cuda / cuvid я получаю кадры в формате AV_PIX_FMT_NV12, хотя каждая структура, на которую я смотрю, говорит либо AV_PIX_FMT_NONE, либо AV_PIX_FMT_YUV420P.

В каком поле какой структуры я могу получить значение AV_PIX_FMT_NV12, чтобы я мог удалить свой жестко запрограммированный исходный формат при моем вызове SwsContext.sws_scale? Спасибо!

Обновление:

Похоже, я могу получить это:

AVCodecContext* avctx;
...
frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
AVPixelFormat pixel_fmt = frames_ctx->sw_format;

... после декодирования хотя бы одного кадра. Не уверен, что это правильный путь.

1 Ответ

0 голосов
/ 29 марта 2019

Что касается CUDA, ваша лучшая ставка будет, когда см. AV_PIX_FMT_YUV420P на AVHWFramesContext::sw_format, рассмотрите ее как AV_PIX_FMT_NV12, а когда AV_PIX_FMT_YUV420P10, на самом деле AV_PIX_FMT_P010.

Насколько я знаюни CUDA, ни NVDEC (не было CUVID) не поддерживают ничего, кроме формата 420, в качестве декодированных кадров.

...