bluedot inc.

AVIF Speed/Quality Test Condition
(a) originalPNG / 582.9kb
(b) compressedjpeg / 16.2kb
psnr=34.19, ssim=0.914, vmaf=81.4
(d) compressedpulsar avif / 7.1kb
psnr=35.49, ssim=0.927, vmaf=77.6
Codec
CodecCode baseHash

libjpeg-turbo

a JPEG codec to accelerate libjpeg by 2-6x
https://github.com/libjpeg-turbo/libjpeg-turbo

a01857cff6a2b7b3283ef1d0ecb6b01d06b597f8

avifenc

https://github.com/AOMediaCodec/libavif v0.11.1
  • aom: v3.5.0
  • svt: v1.3.0

6ab53189045e7a6fe0bd93d14977b2a4f8efa5e9

pulsar-avif

BLUEDOT's FPGA-based AVIF encoder

5307f4605513110ad3c267fac6873e1deb913385

Command line
libjpeg-turbo./cjpeg -quality ${quality} -sample 2x2 -outfile ${output jpg} ${input ppm}avifenc with AOM./avifenc ${input png} --min ${qp} --max ${qp} -y 420 -d 8 -j ${thread} -r l -c aom ${output avif}avifenc with SVT./avifenc ${input png} --min ${qp} --max ${qp} -y 420 -d 8 -j ${thread} -r l -c svt ${output avif}pulsar-avif./avif_sp_client -i ${input yuv} -o ${output avif} --width ${width} --height ${height} --enable-avif 1 --avif-seq 0 --fps 1 --frames 1 --qp ${qp}
The test images are in the format of jpg. For the evaluation, we used decoded images of them. Therefore, the speed measured here does not include a time for decoding jpg and converting color space.
Test Images
https://drive.google.com/drive/folders/1VK12pBFnYJzJRD1k8uo38yammO-_XtkO
Quality Metrics and Coding Efficiency
BD-Rate for the following metrics:
  • PSNR_Y
  • PSNR_AVG: (PSNR_Y * 4 + PSNR_U + PSNR_V) / 6
  • SSIM
  • VIF
BD-Rate: G. Bjontegaard, Calculation of average PSNR differences between RD-curves (VCEG-M33)
ResultsCoding Efficiency
Interpretation: For example, when avifenc(aom) has the same PSNR_Y score as libjpeg-turbo, avifienc(aom)'s file size is 56.21% smaller than libjpeg-turbo.
The coding efficiency of pulsar-avif is not much different from the software AVIF encoders.
ExamplesCLIC, 2048x1320, john-price-5258
(a) originalpng / 3,604kb
(b) compressedjpeg / 132kb
psnr=40.7dB, ssim=0.964, vmaf=89.96
(c) compressedaom avif / 66kb
psnr=41.93, ssim=0.973, vmaf=88.82
(d) compressedpulsar avif / 67kb
psnr=42.01, ssim=0.972, vmaf=88.62
Kodak, 512x768, kodim09
(a) originalpng / 582.9kb
(b) compressedjpeg / 16.2kb
psnr=34.19, ssim=0.914, vmaf=81.4
(c) compressedaom avif / 6.2kb
psnr=34.99, ssim=0.923, vmaf=75.7
(d) compressedpulsar avif / 7.1kb
psnr=35.49, ssim=0.927, vmaf=77.6
Encoding SpeedHardware Platforms
EncoderMicrosoft Azure VMSpecs.

pulsar-avif

NP10
NP-series - Azure Virtual Machines | Microsoft Learn

AMD Alveo U250 1ea + Intel(R) Xeon(R) Platinum 8171 CPU @ 2.6GHz, 10 cores

avifenc,
libjpeg-turbo

D32s
Dv3 and Dsv3-series - Azure Virtual Machines | Microsoft Learn

Intel(R) Xeon(R) Platinum 8370C CPU @ 2.8GHz, 32 cores

Kodak (24 images of 768x512)
  • Encoding 24 images simultaneously (24 processes)
  • Each software encoding process is executed with 4 threads. (-j 4)
time [ms]fpsCPU utilization

pulsar-avif

58.6

409.85

305%

avifenc(aom)

405

59.26

3200%

avifenc(svt)

1325

18.11

3200%

Note. When we tested pulsar-avif with 100 times of encoding 24 images, the average frame rate was increased to 582 fps.
CLIC (303 images of 2048x1320)
  • avifienc(aom): encoding 32 images simultaneously with -j 8 to encode 303 images
  • avifenc(svt): encoding 16 images simultaneously with -j 4 to encode 303 images
time [ms]fpsCPU utilization

pulsar-avif

3267

92.74

570%

avifenc(aom)

16191

18.71

3200%

avifenc(svt)

65826

4.60

3200%

Note. When we tested pulsar-avif with 100 times of encoding 303 images, the average frame rate was increased to 93.5 fps.
Note. For the evaluation of the performance of pulsar-avif, we developed and used a daemon where a queue is embedded. The CPU utilization reported above is mostly taken by the daemon and client processes waiting for allocation of AVIF encoding hardware resources. For example, the 305% utilization to encode 24 Kodak images in pulsar-avif consists of 65% from daemon and 240% from 24 client processes (10% per process).
How we determined the number of threads for each processWe picked up threads# where CPU utilization was not increased anymore, even if more threads were specified in the command line for encoding a single image.

Check out the products of BLUEDOT

for the online video service

cost reduction.

Go to Product page