Input Description

To save space on the SPEC CPU® media, the movie is first decoded to YUV format in a (non-timed) setup phase, using the
decoder 'ldecod' from the H.264/AVC reference software implementation. (The H.264/AVC encoder
was used in SPEC CPU®2006 benchmark 464.h264ref.)

The reference workload encodes back to MPEG-4. It is run two separate ways on different parts of the movie. First a two pass method uses the options:

--pass 1 --stats x264_stats.log --bitrate 1000 --frames 1000

--pass 2 --stats x264_stats.log --bitrate 1000 --frames 1000

Followed by a single pass method:

--seek 500 --frames 1250

Output Description

525.x264_r creates individual frames from the movie as it is being encoded. The option --dumpyuv
200 writes every 200th frame to a .yuv file. Therefore,

Frames 0 and 500 are simply dumps of the starting points, and are not validated.
The others from the lists just above are validated
using the SPEC utility imagevalidate,
which calculates the Structural SIMilarity (SSIM) index over 8x8 pixel areas
between the benchmark-produced image and a SPEC-provided expected image. SSIM
indexes range from -1 (maximally different) to 1 (identical) for each of those
regions.

You can see the validation commands if you go to a run directory and use specinvoke -n compare.cmd. The commands can be
entered by hand if you wish. A brief (one line) report is sent to the .out file, and a longer report that you might wish
to examine is sent to the .err. For example:

The option -dumpfile for imagevalidate can be used to
output the generated file in TGA format, which can then be viewed by a suitable
image viewer.

In all cases, the expected output from imagevalidate is:

<filename>: AVG SSIM = 1.000000000

which is then checked by specdiff to
verify that the overall average of SSIM indexes is at least 0.85.

Programming Language

C

Known portability issues

The benchmark uses some C99 features so you may need a compiler flag such as GCC's "-std=c99".

On most platforms, the benchmark source code assumes that your compiler supports the non-standard
extension __attribute__((aligned(n))).

The original benchmark source code assumed that the "char" data type is signed, which is not true on all platforms. SPEC has
attempted to edit the code to mark the affected declarations with the 'signed' keyword; however, it is possible that some
instances may have been missed, in which case platforms where "char" is by default unsigned may need a compiler portability flag
such as GCC's "-fsigned-char".

Sources and Licensing

As noted above, the encoder is from the VideoLan x264 project (GPL); Big Buck Bunny is from the Blender Foundation
(Creative Commons); and the (non-timed) decoder is from the H.264/AVC reference implementation.