fraunhoferhhi/vvdec

Does not work on processors without SSE4

Closed this issue · 5 comments

v0lt commented

The decoder crashes on processors without SSE4.

To see the cause of the error on a modern CPU, you need to force return SCALAR in the _get_x86_extensions function. When decoding the video, the PU::setAllAffineMv method will be called, which calls _mm_mullo_epi32 from SSE4.1. This shouldn't happen.

K-os commented

Yes, we always build with -msse4.1 enabled. This was a conscious design decision, because it is so old, basically all CPUs powerful enough to play VVC, should support it. Which CPU are you using, that does not support SSE4.1 ?

K-os commented

Oh, I just realized: if you really want to disable all SIMD code for such an old CPU, you can build with cmake -DVVDEC_ENABLE_X86_SIMD=0.

v0lt commented

Which CPU are you using, that does not support SSE4.1 ?

MPC-BE users have encountered the issue on the following processors:
Intel Pentium E6300
Intel Core 2 Duo E4300
Athlon 64 X2 (I don't know the exact model)

Yes, we always build with -msse4.1 enabled. This was a conscious design decision, because it is so old, basically all CPUs powerful enough to play VVC, should support it.

I looked at your code and expected the decoder to work correctly when _get_x86_extensions returns SCALAR (not SSE41 or higher).

K-os commented

Ok, interesting that people try to decode VVC on CPUs that are 17 years old...

We'll look into that and make sure to warp the places, where we explicitly call SSE41 instructions, to fall back to scalar code.

v0lt commented

Fine. Whether it works out or not, I will ask you to write somewhere the minimum requirements for x86 processors. It may be SSE2, SSSE3 or even SSE4.1, but I think it was documented.