Decoding with intel hardware acceleration

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Decoding with intel hardware acceleration

pasifus
Hi all

I try to decode H264 RTSP stream to YUV in my c++ code

I use Ubuntu Server 14.04 and chipset Intel i965 driver for Intel(R) Skylake - 1.8.0.pre1

My streamer pipeline with software decoding is something like this: rtspsrc location=... ! rtph264depay ! queue ! avdec_h264 ! video convert ! ...  ! appsink

to use it I installed:
gstreamer-1.8.3
gst-plugins-base-1.8.3
gst-plugins-good-1.8.3
gst-libav-1.8.3

and it's seems work ok.

Because my motherboard have availability to use decoder from hardware acceleration I tried to add it support. Installed:
intel-vaapi-driver
libra
libra-utils
gst-plugins-bad-1.8.3
gstreamer-vaapi-1.8.3

vainfo
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_40
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.40 (libva )
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.8.0.pre1 (1.7.3-306-g8ccf612)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :             VAEntrypointVLD
      VAProfileMPEG2Simple            :             VAEntrypointEncSlice
      VAProfileMPEG2Main              :              VAEntrypointVLD
      VAProfileMPEG2Main              :              VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:  VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:  VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:  VAEntrypointEncSliceLP
      VAProfileH264Main               :  VAEntrypointVLD
      VAProfileH264Main               :  VAEntrypointEncSlice
      VAProfileH264Main               :  VAEntrypointEncSliceLP
      VAProfileH264High               :   VAEntrypointVLD
      VAProfileH264High               :   VAEntrypointEncSlice
      VAProfileH264High               :   VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :        VAEntrypointVLD
      VAProfileH264MultiviewHigh      :        VAEntrypointEncSlice
      VAProfileH264StereoHigh         :            VAEntrypointVLD
      VAProfileH264StereoHigh         :            VAEntrypointEncSlice
      VAProfileVC1Simple              :  VAEntrypointVLD
      VAProfileVC1Main                :   VAEntrypointVLD
      VAProfileVC1Advanced            :             VAEntrypointVLD
      VAProfileNone                   :       VAEntrypointVideoProc
      VAProfileJPEGBaseline           :               VAEntrypointVLD
      VAProfileJPEGBaseline           :               VAEntrypointEncPicture
      VAProfileVP8Version0_3          :            VAEntrypointVLD
      VAProfileVP8Version0_3          :            VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice



But how I see to use it I need install X Server.
I tried to test is: gst-launch-1.0 filesrc location= big_buck_bunny_720p_h264.mov ! qtdemux ! h264parse ! vaapidecode ! fakes, but without X11 it's not work.

How I can add decoding hardware acceleration without installing X server? (It's possible?)
It's posible parallel decode video using hardware and software decoders together? When is not availability hardware decoded (because it overload) change to software decode


Thanks.
Reply | Threaded
Open this post in threaded view
|

Re: Decoding with intel hardware acceleration

Victor Jaquez
pasifus wrote
But how I see to use it I need install X Server.
I tried to test is: gst-launch-1.0 filesrc location= big_buck_bunny_720p_h264.mov ! qtdemux ! h264parse ! vaapidecode ! fakes, but without X11 it's not work.
It should not. vaapi elements can work headless using the libdrm  vaapi backend.

What error do you have?

pasifus wrote
How I can add decoding hardware acceleration without installing X server? (It's possible?)
It's posible parallel decode video using hardware and software decoders together? When is not availability hardware decoded (because it overload) change to software decode
The problem with release 1.8 is, if your are going to map in userspace the VA surfaces, you might have an data alignment problem. That was fixed in 1.10.

You can force, using vaapsink to set the drm backend using "vaapisink display=drm" in your pipeline.

vmjl