Cover photo

Why FFmpeg Chooses SSSE3 Over AVX for Video Decoding

When people first learn about modern CPU instruction sets, a common assumption is:

“AVX is newer and wider than SSSE3 — so it must be faster, right?”

In theory, that sounds reasonable.
In practice, FFmpeg deliberately avoids AVX for many core video decoding paths and still relies heavily on SSSE3 for operations such as:

  • DCT / IDCT

  • Dequantization (Unquantization)

  • Motion compensation

  • Block-based transforms

This article explains why SSSE3 often beats AVX in real-world video decoding from the perspectives of:

  • CPU frequency scaling

  • Thermal behavior

  • Instruction-level parallelism

  • Memory access patterns

  • Long-term system stability


1. What is SIMD?

SIMD = Single Instruction, Multiple Data

It means one CPU instruction operates on many values at the same time.

Without SIMD (scalar C loop)

a[0] *= 2;
a[1] *= 2;
a[2] *= 2;
a[3] *= 2;

With SIMD

multiply 4 values at once

SIMD is the backbone of:

  • Video decoding

  • Audio processing

  • Image filters

  • Computer vision

  • AI inference


2. SSSE3 vs AVX: A Quick Comparison

Instruction Set

Year

Register Width

int16 per Instruction

MMX

1997

64-bit

4

SSE / SSSE3

2006

128-bit

8

AVX

2011

256-bit

16

AVX-512

2015

512-bit

32

At first glance, AVX is 2× wider than SSSE3.
In video decoding, this assumption breaks down completely.

At first glance, AVX is 2× wider than SSSE3.
In video decoding, this assumption breaks down completely.


3. Reason #1: AVX Is Too Wide for 8×8 Video Blocks

Classic codecs such as H.263, MPEG-2, and early H.264 are block-based:

  • Each block contains 8×8 = 64 values

  • Most math uses 16-bit integers

  • Heavy use of:

    • Shuffles

    • Sign operations

    • Multiplication

    • Clamping

SSSE3:

  • 8 values per instruction

  • 64 values → 8 vector ops

AVX:

  • 16 values per instruction

  • 64 values → 4 vector ops

In practice, memory bandwidth, shuffle pressure, and pipeline dependencies dominate.

Real speedup from SSSE3 → AVX is often only ~1.2×–1.5×.


4. Reason #2: AVX Forces the CPU to Downclock

This is the most critical reason.

When AVX is active:

  • Power consumption spikes

  • Heat increases rapidly

  • The CPU automatically reduces its clock frequency

Typical behavior:

Mode

Frequency

SSSE3

~4.8 GHz

AVX

~3.9 GHz

AVX-512

~3.2 GHz

Even if AVX processes more data per instruction, the CPU runs significantly slower overall.

For continuous workloads like video decoding, this downclocking cancels out most of AVX’s theoretical advantage.


5. Reason #3: Video Decoding Is Not “Pure Math”

AVX works best when:

  • Data is continuous

  • There are no branches

  • Memory access is predictable

  • Loops are long and vector-friendly

Video decoding contains:

  • Motion compensation

  • Edge clipping

  • Block prediction

  • Many conditionals

  • Cache-unfriendly memory access

These patterns reduce AVX efficiency severely.

SSSE3 is lighter and integrates better with scalar code.


6. Reason #4: Hardware Compatibility and Stability

FFmpeg must run on:

  • Old laptops

  • Office desktops

  • Mini PCs

  • Virtual machines

  • Low-power servers

Meanwhile:

  • Many CPUs do not support AVX

  • Some BIOS setups disable AVX

  • Many virtual machines cannot expose AVX

  • Low-TDP systems throttle aggressively under AVX

SSSE3:

  • Supported on almost all x86 CPUs since ~2007

  • Low power usage

  • Minimal thermal impact

  • Extremely stable


7. Reason #5: AVX ↔️ SSE Transitions Are Expensive

Switching between AVX and SSE/SSSE3 requires:

  • Vector state flush

  • Pipeline synchronization

  • Execution stalls

These hidden costs often erase AVX’s gains.

Keeping everything in SSE/SSSE3 avoids these penalties.


8. When FFmpeg Does Use AVX

FFmpeg uses AVX when the workload is a good fit:

  • Image scaling

  • Color space conversion

  • Video filters

  • HDR tone mapping

  • AI-based upscaling

But not for:

  • DCT / IDCT

  • Block unquantization

  • Motion-compensated prediction


9. Engineering Conclusion

SSSE3 sits at the perfect balance of:

  • Performance

  • Power efficiency

  • Thermal stability

  • Hardware compatibility

AVX introduces:

  • Thermal throttling

  • Frequency downclocking

  • Platform incompatibility

  • Scheduling complexity

For video decoding, consistency beats peak theoretical throughput.


10. One-Sentence Summary

FFmpeg avoids AVX for video decoding because AVX causes CPU downclocking, thermal pressure, and poor real-world efficiency for small block-based workloads — while SSSE3 delivers stable, portable performance.