我目前在使用 libvpx v1.10.0 ( https://github.com/webmproject/libvpx/releases ) 的项目中遇到问题。
我已经在 Windows 10 (PC x64) 上成功构建了 Visual Studio 16 的库。
[我必须自己构建 libvpx,因为我还需要它在 Windows 10 ARM64 / VS16(Hololens 2)上运行,并且没有官方提供这样的构建]
我制作了一个 C++ DLL,它使用来自 libvpx 的静态库(用作 Unity 中的本机插件)。虽然 VP9 编码部分似乎在使用我的 DLL 的示例应用程序中正常工作,但我无法初始化 VP9 解码器。也许我在 libvpx 的配置步骤中遗漏了一些东西?
为了构建 libvpx 静态库,我从 Visual Studio 2019 的 x64 Native Tools 命令提示符启动了 MSYS2。然后,我设置了如下配置,灵感来自 ArchLinux AUR 包中的内容(https://aur .archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libvpx-git):
./configure --target=x86_64-win64-vs16 --enable-libyuv \
--enable-vp8 --enable-vp9 --enable-postproc --enable-vp9-postproc \
--enable-vp9-highbitdepth --enable-vp9-temporal-denoising
make -j
在编译结束时,构建成功,出现 0 个错误,但出现 2 个警告。配置脚本的--help
表示该--enable-vp9
选项同时启用 VP9 编码器和解码器。
然后,当我使用执行编码和解码的 C++ DLL 运行我的应用程序时,我从 libvpx 收到此错误消息: Codec does not implement requested capability。
它发生在我调用该vpx_codec_dec_init()
函数时。我不明白为什么它无法初始化,因为我认为 VP9 编解码器已完全构建。当我将--enable-vp9-encoder
--enable-vp9-decoder 选项和所有其他 VP9 相关选项添加到配置中时,也会出现错误。
在初始化 VP9 解码器之前,代码本身有什么可做的吗?我在代码示例中没有看到这样的东西。请注意,如果我也使用 VP8(编码 OK / 解码 KO,同样的错误),就会出现问题。
这是我解码帧的函数的开始:
vpx_codec_err_t resultError;
vpx_codec_ctx_t codec;
const vpx_codec_iface_t* decoderInterface = vpx_codec_vp9_cx(); // >>> OK!
if (!decoderInterface)
{
return "libvpx: unsupported codec (decoder)";
}
resultError = vpx_codec_dec_init(&codec, decoderInterface, nullptr, 0); // >>> KO...
if (resultError)
{
std::cout << vpx_codec_error(&codec) << std::endl; // outputs "Codec does not implement requested capability"
return "libvpx: failed to initialize decoder";
}
vpx_codec_iter_t iter = nullptr;
vpx_image_t* yuvFrame = nullptr;
resultError = vpx_codec_decode(&codec, compressedFrame, (unsigned int)compressedFrameSize, nullptr, 0);
if (resultError)
{
return "libvpx: failed to decode frame";
}
// ....
任何帮助都会很棒!谢谢你。:)