FFmpeg + cpp, как получить список моих графических процессоров, обрабатывающих h264_nvenc?
Я пишу приложение для использования на ПК с более чем одним графическим процессором, я пытаюсь получить список индексов графического процессора, которые могут декодировать поток в h264, чтобы назначить все новые источники видео поровну между всеми доступными графическими процессорами.
Я нашел, как это сделать в командной строке, но мне нужно написать строку, принадлежащую ей на С ++
ffmpeg -vsync 0 -i input.mp4 -c:v h264_nvenc -gpu list -f null –
Мне нужно, чтобы он динамически передавал его av_hwdevice_ctx_create(AVBufferRef**,char *int)
Кто-нибудь знает как это сделать?
1 ответ
Насколько я знаю, вам не нужно явно передавать устройство в
av_hwdevice_ctx_create (
AVBufferRef ** device_ctx,
enum AVHWDeviceType type,
const char * device,
AVDictionary * opts,
int flags
)
то device_ctx
может быть NULL, потому что создается здесь. Вам нужно только знать, какой тип вы хотите. напримерAV_HWDEVICE_TYPE_CUDA
. Остальные параметры могут быть NULL или 0. По крайней мере, так это сделано в примере hw_decode:
static AVBufferRef *hw_device_ctx = NULL;
//...
static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceType type)
{
int err = 0;
if ((err = av_hwdevice_ctx_create(&hw_device_ctx, type,
NULL, NULL, 0)) < 0) {
fprintf(stderr, "Failed to create specified HW device.\n");
return err;
}
ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);
return err;
}
(Примечание: я сам не использовал эту функцию. Я просто основываю свой ответ на том, как это делается в примере.)