Jump to content

3.6.0.74-beta (onward) - VAAPI Broken on 'braswell' Based Systems


solabc16
Go to solution Solved by solabc16,

Recommended Posts

solabc16

Hello All
 
I've just taken a look at the diags from @@postboy99's system, and I also have reports coming in from other 'braswell' (CherryView) users on the development/beta channels.
 
This seems to be the common factor.
 
There's no obvious issues with the underlying plumbing, this appears to be working well and is consistent with prior releases.

libva info: VA-API version 1.3.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /var/packages/EmbyServer/target/ffmpeg/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_3
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.3 (libva 2.3.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.2.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
      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

Best
- James

Edited by solabc16
  • Like 1
Link to comment
Share on other sites

solabc16

...and here's the equivalent FFdetect section from a .NET Core installation reporting the same issue:-

"Devices": [{
"DeviceIndex": 0,
"DeviceInfo": {
"VendorId": 32902,
"DeviceId": 8881,
"SubsytemVendorId": 32902,
"SubsytemDeviceId": 29296,
"DevPath": "/sys/bus/pci/devices/0000:00:02.0",
"DrmCard": "/dev/dri/card0",
"DrmRender": "/dev/dri/renderD128",
"IsEnabled": 0,
"IsBootVga": 1,
"ApiVersionMajor": 1,
"ApiVersionMinor": 3,
"Driver": "Intel i965 driver for Intel(R) CherryView - 2.2.0"
},

Prior to the updates, the (limited) VAAPI support available on this platform was working as it has been for some time.
 
Best
- James

Link to comment
Share on other sites

Thanks James, for creating this thread.

 

Here's some more background. I just didn't want to complicate things in the Docker thread.

 

The reason why I started to consider the 'IsEnabled' value was actually due to Emby execution inside Docker.

Tests had shown that gpu devices that are not enabled for a certain Docker container have "IsEnabled: 0".

 

Detecting an unavailable device is almost as bad as not detecting a device. This is important to understand.

Emby only performs a single attempt for hardware transcoding and if that fails, it falls back to software transcoding.

 

That's why we can't just handle this by ignoring the "IsEnabled" value.

We would rather need to find out why it's disabled at all.

 

 

First thing I'd need is a full hwdection log for the situation when not running inside Docker.

 

And then:

  • Was there a monitor connected to the device?
  • If not, could you try this again with a monitor connected?
  • Are there any BIOS settings related to the onboard graphics? E.g. enable, disable, auto, memory assignment etc.?
Link to comment
Share on other sites

postboy99

@@softworkz

 

hw-detection-log is attached and your questions:

 

I run Emby on a Synology DS716+ NAS without any graphics output (No HDMI or other graphic ports on this NAS).

 

I don't really know if there is a way to enable/disable/auto the onboard graphics. On the Synology DSM itself I didn't found anything like that. 

But it's Linux based, maybe you can give some commands to find out? I'm not that much familiar to Linux.

 

I'm just asking myself, why the new hardware-detection feature is not getting it up the right way, but the old way does(non-beta).

hw_detection_log.txt

Edited by postboy99
Link to comment
Share on other sites

solabc16

Hello @@softworkz, All

 

These systems are essentially appliances, so to answer the above questions...

  • Was there a monitor connected to the device? NO
  • If not, could you try this again with a monitor connected? N/A
  • Are there any BIOS settings related to the onboard graphics? E.g. enable, disable, auto, memory assignment etc.? N/A

You may indeed need to pay special attention to detection with IGPs on headless systems, I recall working through something similar on another project with certain generations of Intel GPUs in a headless configuration.

 

Another detection log attached for reference.

 

Best

- James

 

hardware_detection-63680207346.txt

Edited by solabc16
Link to comment
Share on other sites

solabc16

Hello @softworkz, All

 

For comparison, here's the output from an 'apollolake' (Broxton) based system; these are all working well and as expected.

libva info: VA-API version 1.3.0libva info: va_getDriverName() returns 0
libva info: Trying to open /var/packages/EmbyServer/target/ffmpeg/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_3
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.3 (libva 2.3.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Broxton - 2.2.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      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
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointVLD

The h/w detection log is attached.

 

Best

- James

 
 

hardware_detection-63680277388.txt

Edited by solabc16
Link to comment
Share on other sites

I'm just asking myself, why the new hardware-detection feature is not getting it up the right way, but the old way does(non-beta).

 

Thank you very much for posting the log. Before I come to analyze I want to respond your question above:

 

The old way worked by trial-and-error. You could even select Android or Windows specific accelerations when running on Linux.

When it worked, it worked, but when not, you would have hoped for the software-fallback to jump in. Every time you start or resume playback.

That adds to the response delays of the media playback experience.

But the detection is doing much more than just a "VAAPI yes/no" decision. It detects which encoders and decoders are available and all their individual capabilities (frame size, frame rate and bitrate limits, color formats, encoding profiles and levels). This information is used to provide and individually optimized transcoding experience.

 

I hope this answers your question.

Link to comment
Share on other sites

@@solabc16 @@postboy99

 

Before adding an exception, there's one test I'd like to ask one of you to perform on a "CherryView" system:

 

Could you please run the attached binary with the following command:

./ffdetect -show_error -show_log 99 -print_format json vaencdec

and post the output.

 

Thank you very much for your assistance!

Edited by softworkz
Link to comment
Share on other sites

You may indeed need to pay special attention to detection with IGPs on headless systems, I recall working through something similar on another project with certain generations of Intel GPUs in a headless configuration.

Hi James, 

 

do you remember more details about that subject or do you have any references?

This would seem to be crucial information for us to address this in the best possible way..

 

Thanks.

Link to comment
Share on other sites

postboy99

@@softworkz

 

I've just put your file to the ffmpeg folder of the EmbyServer.

This is the output:

patrick@NAS:/volume1/@appstore/EmbyServer/ffmpeg$ sudo ./ffdetect -show_error -show_log 99 -print_format json vaencdecc
./ffdetect: error while loading shared libraries: libva.so.2: cannot open shared object file: No such file or directory

 

Edited by postboy99
Link to comment
Share on other sites

postboy99

@@softworkz

 

This is what I found:

 

patrick@NAS:/volume1/Backup$ sudo find / -name vainfo
/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/var/bin/vainfo
/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/bin/vainfo




patrick@NAS:/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/var/bin$ sudo ./vainfo
libva info: VA-API version 1.3.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /var/packages/EmbyServer/target/ffmpeg/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_3
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.3 (libva 2.3.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.2.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
      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


patrick@NAS:/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/bin$ sudo ./vainfo
libva info: VA-API version 1.3.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /var/packages/EmbyServer/target/ffmpeg/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_3
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.3 (libva 2.3.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.2.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
      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

And still I get this error from your ffdetect:

 

sudo ./ffdetect -show_error -show_log 99 -print_format json vaencdec
./ffdetect./ffdetect: error while loading shared libraries: libva.so.2: cannot open shared object file: No such file or directory

 

Do I have to put the file in a certain path/folder?

Edited by postboy99
  • Like 1
Link to comment
Share on other sites

@@softworkz

 

And still I get this error from your ffdetect:

 

sudo ./ffdetect -show_error -show_log 99 -print_format json vaencdec
./ffdetect./ffdetect: error while loading shared libraries: libva.so.2: cannot open shared object file: No such file or directory

 

Do I have to put the file in a certain path/folder?

 

No specific folder is required, but don't use an existing folder where Emby is installed. Best would be to create a temp folder.

 

Did you notice that I have posted a different version of ffdetect? 

The result above seems to be from the previous version.

Link to comment
Share on other sites

postboy99

@@softworkz

 

Sorry, but still the same.

 

patrick@NAS:/volume1/Backup$ sudo ./ffdetect -show_error -show_log 99 -print_format json vaencdec
./ffdetect: error while loading shared libraries: libva.so.1: cannot open shared object file: No such file or directory
Link to comment
Share on other sites

solabc16

Hello @@softworkz

 

Have you pushed these FFdetect changes to GitHub? If not, PM me an archive with the source and I'll get a patch built to make this straightforward for beta testers to install and run.

 

Best

- James

Link to comment
Share on other sites

solabc16

Hi James, 

 

do you remember more details about that subject or do you have any references?

This would seem to be crucial information for us to address this in the best possible way..

 

Thanks.

 

Hello @@softworkz

 

I'll find some time to take a look at the FFdetect source over the weekend to see what we're doing here to determine this value.

 

That should give me the necessary mental jog, if there is common ground / cause.

 

Best

- James

Link to comment
Share on other sites

solabc16

Hello @@postboy99

 

Did you put the copy of vainfo here - 'var/bin/vainfo'?

 

That wouldn't exist as part of a regular install.

patrick@NAS:/volume1/Backup$ sudo find / -name vainfo
/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/var/bin/vainfo
/volume1/@appstore/EmbyServer/3rdparty/ffmpeg/4.0.2/bin/vainfo

Best

- James
Link to comment
Share on other sites

solabc16

Hello @@postboy99

 

OK, thanks, I'll make a note to check that again with you after the next update is made available and you've installed it.

 

Best

- James

Edited by solabc16
Link to comment
Share on other sites

Hello @@softworkz

 

Have you pushed these FFdetect changes to GitHub? If not, PM me an archive with the source and I'll get a patch built to make this straightforward for beta testers to install and run.

 

Hi James,

 

I had posted this alternate ffdetect version because libva2 couldn't be found. But it turned out that libva1 didn't exist either...

There are no code changes involved, it was just compiled differently.

Link to comment
Share on other sites

solabc16

Hi @@softworkz

 

We've probably crossed over each other a little here. I'm taking a guess that there is something different about this version of FFdetect (putting libva dependency resolution to one side, we can sort that), which is why we wanted to run it? (post #11)

 

That's why I was offering to get it built (if it's from a newer set of source files), so we can get the output you requested.

 

Let me know...

 

Best

- James

Edited by solabc16
Link to comment
Share on other sites

Hi James,

 

I think we can skip that. This was just a dumb attempt to see if he has libva1 because I've seen that libva2 could be found. But libva1 couldn't be found either.

We should make sure that libva2 is available, that's all. Maybe it is available but just not in the library load path when ffdetect is run from the command line.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...