gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:12:41 29 4
gpt4 key购买 nike

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

$ ffmpeg -hwaccesls
ffmpeg version N-98129-g0b182ff Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-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 --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 54.100 / 56. 54.100
libavcodec 58. 92.100 / 58. 92.100
libavformat 58. 46.101 / 58. 46.101
libavdevice 58. 11.100 / 58. 11.100
libavfilter 7. 86.100 / 7. 86.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100
Hardware acceleration methods:
vaapi

我知道 vaapi正在工作,因为我可以将它用于 h264 视频的硬件解码和编码。我可以看到一些 vaapi过滤器也

$ ffmpeg -filters | grep vaapi
... deinterlace_vaapi V->V (null)
... denoise_vaapi V->V (null)
... procamp_vaapi V->V (null)
... scale_vaapi V->V (null)
... sharpness_vaapi V->V (null)

但是,我注意到此列表缺少我专门寻找的过滤器,即 transpose_vaapi .如果您查看 libavfilter 源代码,您将看到以下内容

这显示了 transpose_vaapi allfilters.c 中定义的过滤器文件
https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/allfilters.c#L414

这显示了 transpose_vaapi过滤源代码
https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_transpose_vaapi.c

如果过滤器在源代码中定义,则在 allfilters.c 中定义。 ,并且我已经使用 vaapi 从此源编译了 ffmpeg已启用,为什么我不能将此过滤器与 ffmpeg 一起使用?

$ ffmpeg -y -hide_banner -nostats -loglevel error \
-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi \
-i ./test_video.mp4 \
-vf 'format=nv12,transpose_vaapi=2' \
-c:v h264_vaapi \
/tmp/rotated_video.mp4
[AVFilterGraph @ 0xf14000] No such filter: 'transpose_vaapi'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument

编辑 -

查看 vf_transpose_vaapi.c 的源代码我看到以下逻辑

    if (!pipeline_caps.rotation_flags) {
av_log(avctx, AV_LOG_ERROR, "VAAPI driver doesn't support transpose\n");
return AVERROR(EINVAL);
}

那在 transpose_vaapi_build_filter_params里面函数,它是过滤器初始化过程的一部分。我想有可能,如果该调用失败,过滤器将无法构建并且它不会被注册为有效过滤器?这似乎是在我尝试运行过滤器时在运行时发生的事情,而不是在设置定义哪些过滤器时在编译时发生的事情。

最佳答案

过滤器还依赖于 VAProcFilterParameterBufferHDRToneMapping 的构建时间检查。 ,如 ./configure 中所示

tonemap_vaapi_filter_deps="vaapi VAProcFilterParameterBufferHDRToneMapping"

关于ffmpeg - 为什么在 libavfilter 中存在 vaapi 过滤器,但在我编译的 ffmpeg 版本中不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62352743/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com