为什么在libavfilter中存在vaapi过滤器,但在我编译的ffmpeg版本中不存在?

为什么在libavfilter中存在vaapi过滤器,但在我编译的ffmpeg版本中不存在?,ffmpeg,vaapi,Ffmpeg,Vaapi,我已经编译了启用vaapi的ffmpeg的最新快照 $ffmpeg-hwaccesls ffmpeg版本N-98129-g0b182ff版权所有c 2000-2020 ffmpeg开发者 使用gcc 5.4.0 Ubuntu 5.4.0-6ubuntu1~16.04.12 20160609构建 配置:-禁用调试-禁用文档-禁用ffplay-启用共享-启用avresample-启用libopencore amrnb-启用libopencore amrwb-启用gpl-启用libass-启用font

我已经编译了启用vaapi的ffmpeg的最新快照

$ffmpeg-hwaccesls ffmpeg版本N-98129-g0b182ff版权所有c 2000-2020 ffmpeg开发者 使用gcc 5.4.0 Ubuntu 5.4.0-6ubuntu1~16.04.12 20160609构建 配置:-禁用调试-禁用文档-禁用ffplay-启用共享-启用avresample-启用libopencore amrnb-启用libopencore amrwb-启用gpl-启用libass-启用fontconfig-启用libfreetype-启用libvidstab-启用libmp3lame-启用libopus-启用libthera-启用libvorbis-启用libvpx-启用libwebp-启用libx265-enable libxvid-enable-libx264-enable nonfree-enable openssl-enable-libfdk_aac-enable postproc-enable small-enable-version3-enable libzmq-extra libs=-ldl-prefix=/opt/ffmpeg-enable libopenjpeg-enable libkvazaar-enable libaom-extra libs=-lpthread-enable libsrt-enable vaapi-extra cflags=-I/opt/ffmpeg/include-额外ldflags=-L/opt/ffmpeg/lib libavutil 56。54.100 / 56. 54.100 libav编解码器58。92.100 / 58. 92.100 libav58格式。46.101 / 58. 46.101 libav58设备。11.100 / 58. 11.100 libav7。86.100 / 7. 86.100 libavresample4。00 / 4. 00 Libsw5。8.100 / 5. 8.100 libswresample 3。8.100 / 3. 8.100 Libroc 55。8.100 / 55. 8.100 硬件加速方法: 瓦皮 我知道vaapi正在工作,因为我可以使用它对h264视频进行硬件解码和编码。我还可以看到一些vaapi过滤器

$ffmpeg-过滤器| grep vaapi ... 逐行扫描V->V null ... 去噪_vaapi V->V null ... procamp_vaapi V->V null ... 刻度盘V->V空 ... 锐度V->V零 然而,我注意到这个列表缺少我特别寻找的过滤器,即transpose_vaapi。如果查看libavfilter源代码,您将看到以下内容

这显示了allfilters.c文件中定义的transpose_vaapi过滤器

这显示了transpose_vaapi过滤器的源代码

如果过滤器是在源代码中定义的,那么它是在allfilters.c中定义的,并且我已经在启用vaapi的情况下从这个源代码编译了ffmpeg,为什么我不能将这个过滤器与ffmpeg一起使用呢

$ffmpeg-y-隐藏条幅-nostats-日志级别错误\ -hwaccel-vaapi-hwaccel\u设备/dev/dri/render128-hwaccel\u输出格式vaapi\ -i./test_video.mp4\ -vf'格式=nv12,转置=2'\ -c:v h264_vaapi\ /tmp/U video.mp4 [AVFilterGraph@0xf14000]没有这样的过滤器:“transpose_vaapi” 重新初始化筛选器时出错! 无法将帧插入筛选器网络:参数无效 编辑-

通过查看vf_transpose_vaapi.c的源代码,我看到了以下逻辑

如果管道\u caps.rotation\u标志{ av_logavctx,av_LOG_错误,VAAPI驱动程序不支持转置\n; 返回平均值; }
这是transpose_vaapi_build_filter_params函数的内部,它是过滤器初始化过程的一部分。我猜,如果调用失败,可能无法构建筛选器,并且无法注册为有效筛选器?这似乎是在运行时尝试运行筛选器时发生的情况,而不是在设置定义的筛选器时在编译时发生的情况。

筛选器还取决于对VAProcFilterParameterBufferHDRToneMapping的生成时检查,如./configure中所示

tonemap_vaapi_filter_deps="vaapi VAProcFilterParameterBufferHDRToneMapping"

./configure的输出是什么?您能帮我确定如何检查依赖关系吗?我看到字符串的唯一位置是在配置文件和源文件本身中,配置如何在尝试将tonemap_vaapi_筛选器作为可用筛选器包含之前检查VaProcFilterParameterBufferHdroneMapping值是否有效?它编译include va/va.h include va/va_vpp.h int mainvoid{VAProcFilterParameterBufferHDRToneMapping v;返回0;}并检查对象是否已成功生成。非常感谢!我非常感谢您的帮助,这足以解释我今后需要更改的内容。