据我所知,可以使用
-hwaccel_device
或 -gpu
在命令行中指定 GPU 设备,但是如何在使用 API 时指定 GPU?
我试图在 ffmpeg.c 中找到它,但这对于 c++ 和 ffmpeg 的新手来说太复杂了。
我可以使用 AVDictionary 吗?关键字是什么?
如果有人能给一些提示,我将不胜感激!
通过阅读OpenCV的源码,我终于解决了这个问题。 关键的API是
int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, const char *device, AVDictionary *opts, int flags)
.
OpenCV
cap_ffmpeg_hw.hpp
中的源代码:
char device[128] = "";
char* pdevice = NULL;
if (hw_device >= 0 && hw_device < 100000) {
if (child_type == AV_HWDEVICE_TYPE_VAAPI) {
snprintf(device, sizeof(device), "/dev/dri/renderD%d", 128 + hw_device);
}else {
snprintf(device, sizeof(device), "%d", hw_device);
}
pdevice = device;
}
const char* hw_child_name = av_hwdevice_get_type_name(child_type);const char* device_name = pdevice ? pdevice : "'default'";
int err = av_hwdevice_ctx_create(&hw_device_ctx, child_type, pdevice, NULL, 0);
最好的学习方式是源代码:ffmpeg hw 解码示例