gpt4 book ai didi

gpu - 通过 libavcodec 使用硬件加速

转载 作者:行者123 更新时间:2023-12-01 21:55:11 40 4
gpt4 key购买 nike

我下载了一个软件( info-beamer ),我想使用 GPU 加速来解码 H.264 视频。我知道我的平台能够使用 GPU 解码 H.264 视频。我使用以下命令对 gstreamer 进行了一些测试,视频播放流畅,没有太多 CPU 使用率:

gst-launch-1.0 filesrc location=./Sintel.mp4 ! qtdemux ! vaapidecode ! vaapisink

但是当我使用 info-beamer 播放相同的视频时,100% 的 CPU 被使用。我认为 libavcodec 会自动使用 VAAPI(如果可用)...我应该使用另一个库吗?我做错了什么?

我的平台运行的是配备 intel HD 的 Atom E3826,并安装了 Ubuntu 14.04。

编辑:

我想我安装了所有必需的库:

nap@nap:~$ dpkg -l | grep libva
ii libva-dev:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- development files
ii libva-drm1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- DRM runtime
ii libva-egl1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- EGL runtime
ii libva-glx1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- GLX runtime
ii libva-intel-vaapi-driver 1.3.0-1ubuntu1 all VAAPI driver for Intel G45 & HD Graphics family (transitional package)
ii libva-tpi1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- TPI runtime
ii libva-wayland1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- Wayland runtime
ii libva-x11-1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- X11 runtime
ii libva1:amd64 1.3.0-2 amd64 Video Acceleration (VA) API for Linux -- runtime
nap@nap:~$ dpkg -l | grep vaapi
ii gstreamer1.0-vaapi:amd64 0.5.7-0ubuntu4 amd64 VA-API plugins for GStreamer
ii libgstreamer-vaapi1.0-0:amd64 0.5.7-0ubuntu4 amd64 GStreamer libraries from the "vaapi" set
ii libva-intel-vaapi-driver 1.3.0-1ubuntu1 all VAAPI driver for Intel G45 & HD Graphics family (transitional package)

这是 vainfo 的输出:

nap@nap:~$ sudo vainfo 
error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.35 (libva 1.3.0)
vainfo: Driver version: Intel i965 driver - 1.3.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD

最佳答案

仍在研究它,我错误地认为硬件编解码器是 AVCodec => 事实并非如此。 AVHWAccel 绑定(bind)到上下文,它不是直接编解码器...因此 avcodec_find_decoder_by_name("h264_vaapi") 不会返回任何内容。

info-beamer 不支持硬件解码编解码器(即 h264_vaapi):

video.c代码:

video->codec = avcodec_find_decoder(video->codec_context->codec_id);

我添加了

if (video->codec_context->hwaccel != NULL)
{
fprintf(stderr, "HW accel IN USE : %s\n", video->codec_context->hwaccel->name);
}
else
{
fprintf(stderr, "NO HW accel IN USE\n");
}

"NO HW accel IN USE\n"显示,而我之前检查过它是否已注册:

fprintf(stderr,"\n hw Decoders\n");
AVHWAccel *first_hwaccel = av_hwaccel_next(NULL);
fprintf(stderr,"%p", first_hwaccel);
AVHWAccel *hwaccel = first_hwaccel;
AVHWAccel *h264 = NULL;
const char * h264_name = "h264_vaapi";
while (hwaccel != NULL)
{
if ( hwaccel != NULL)
{
fprintf(stderr,"%s ", hwaccel->name);
if (strcmp(hwaccel->name, h264_name)== 0)
{
h264=hwaccel;
}
}
hwaccel=av_hwaccel_next(hwaccel);

if (hwaccel == first_hwaccel)
{
break;
}
}
fprintf(stderr,"\n");

它显示:

hw Decoders
0x7f19af53fa80h263_vaapi h263_vdpau h264_vaapi h264_vdpau mpeg1_vdpau mpeg2_vaapi mpeg2_vdpau mpeg4_vaapi mpeg4_vdpau vc1_vaapi vc1_vdpau wmv3_vaapi wm3
_vdpau

所以 libavcodec 知道这些,但 Stream-beamer 不使用它们。

header 中的 video.c 代码声称是从 avcodec_sample.0.5.0.c fork 出来的...因此它并非完全由 info-beamer 团队编写。

关于gpu - 通过 libavcodec 使用硬件加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791722/

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