Hi,

While working on tile-based multi-threading, I noticed a bug in the RMD flow. 
4x4 blocks were offset an additional 2 samples to the left or down. This 
resulted in the reconstruction writing garbage in the left and bottom blocks. 
When running in single-threaded mode, this went unnoticed since the encoding 
process followed the raster scan order. The garbage was eventually clobbered by 
good samples. When running in multi-threaded mode, the garbage eventually 
clobbered valid reconstructed samples and was messing with the rest of the 
process.

I’ve attached the patch for review.

Additionally, here are some quick tests I’ve ran to make sure the patch is 
correct.

Cheers,
FC

# Check that we are using the latest version.
$ git fetch
$ git status
On branch develop
Your branch is up-to-date with 'origin/develop'.

nothing to commit, working directory clean

$ git log | head
commit a75bb0d31c2633a9010341f0cf2127631ff59c29
Author: Laurent Birtz <[email protected]>
Date:   Thu May 15 09:37:46 2014 -0400

    Fix compilation issues on OSX

commit aa2d78ca790f0cc399e893e6bdea2f7300dacfd3
Author: Laurent Birtz <[email protected]>
Date:   Wed May 14 10:58:49 2014 -0400


# Build f265.
$ scons
scons: Reading SConscript files ...
Checking for C library m... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
cp build/f265/f265_config.h.tmp build/f265/f265_config.h
gcc -o build/cli/cli.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -Wno-deprecated-declarations -pthread -I. 
-Icli -Ibuild -I/usr/local/include cli/cli.c
nasm -D ARCH_AMD64 -i f265/asm/ -f macho64 f265/asm/avx2/dct.asm -o 
build/f265/avx2/dct.o
nasm -D ARCH_AMD64 -i f265/asm/ -f macho64 f265/asm/avx2/encode.asm -o 
build/f265/avx2/encode.o
nasm -D ARCH_AMD64 -i f265/asm/ -f macho64 f265/asm/avx2/pixel.asm -o 
build/f265/avx2/pixel.o
gcc -o build/f265/bdi.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -Ibuild -I. -If265/ktools f265/bdi.c
gcc -o build/f265/bdi_ro.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -Ibuild -I. -If265/ktools f265/bdi_ro.c
gcc -o build/f265/ktools/karray.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/karray.c
gcc -o build/f265/ktools/khash.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/khash.c
gcc -o build/f265/ktools/klist.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/klist.c
gcc -o build/f265/ktools/krb_tree.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/krb_tree.c
gcc -o build/f265/ktools/kstr.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/kstr.c
gcc -o build/f265/ktools/ktools.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/ktools.c
gcc -o build/f265/ktools/kutil.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -If265/ktools 
f265/ktools/kutil.c
gcc -o build/f265/parse.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -Ibuild -I. -If265/ktools f265/parse.c
sed 's/fenc/f265_lbd/g' < f265/entropy.c > build/lbd/f265/entropy.c
sed 's/fenc/f265_lbd/g' < f265/enc.h > build/lbd/f265/enc.h
gcc -o build/lbd/f265/entropy.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/entropy.c
sed 's/fenc/f265_lbd/g' < f265/analyze.c > build/lbd/f265/analyze.c
gcc -o build/lbd/f265/analyze.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/analyze.c
sed 's/fenc/f265_lbd/g' < f265/bs.c > build/lbd/f265/bs.c
gcc -o build/lbd/f265/bs.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd -I. -Ibuild 
-If265/ktools build/lbd/f265/bs.c
sed 's/fenc/f265_lbd/g' < f265/deblock.c > build/lbd/f265/deblock.c
gcc -o build/lbd/f265/deblock.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/deblock.c
sed 's/fenc/f265_lbd/g' < f265/enc.c > build/lbd/f265/enc.c
gcc -o build/lbd/f265/enc.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/enc.c
sed 's/fenc/f265_lbd/g' < f265/hm.c > build/lbd/f265/hm.c
gcc -o build/lbd/f265/hm.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd -I. -Ibuild 
-If265/ktools build/lbd/f265/hm.c
sed 's/fenc/f265_lbd/g' < f265/inter.c > build/lbd/f265/inter.c
gcc -o build/lbd/f265/inter.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/inter.c
sed 's/fenc/f265_lbd/g' < f265/intra.c > build/lbd/f265/intra.c
gcc -o build/lbd/f265/intra.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/intra.c
sed 's/fenc/f265_lbd/g' < f265/la.c > build/lbd/f265/la.c
gcc -o build/lbd/f265/la.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd -I. -Ibuild 
-If265/ktools build/lbd/f265/la.c
sed 's/fenc/f265_lbd/g' < f265/pixel.c > build/lbd/f265/pixel.c
gcc -o build/lbd/f265/pixel.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/pixel.c
sed 's/fenc/f265_lbd/g' < f265/rec.c > build/lbd/f265/rec.c
gcc -o build/lbd/f265/rec.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/rec.c
sed 's/fenc/f265_lbd/g' < f265/me.c > build/lbd/f265/me.c
gcc -o build/lbd/f265/me.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd -I. -Ibuild 
-If265/ktools build/lbd/f265/me.c
sed 's/fenc/f265_lbd/g' < f265/me_hm.c > build/lbd/f265/me_hm.c
gcc -o build/lbd/f265/me_hm.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/me_hm.c
sed 's/fenc/f265_lbd/g' < f265/rc.c > build/lbd/f265/rc.c
gcc -o build/lbd/f265/rc.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd -I. -Ibuild 
-If265/ktools build/lbd/f265/rc.c
sed 's/fenc/f265_hbd/g' < f265/entropy.c > build/hbd/f265/entropy.c
sed 's/fenc/f265_hbd/g' < f265/enc.h > build/hbd/f265/enc.h
gcc -o build/hbd/f265/entropy.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/entropy.c
sed 's/fenc/f265_hbd/g' < f265/analyze.c > build/hbd/f265/analyze.c
gcc -o build/hbd/f265/analyze.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/analyze.c
sed 's/fenc/f265_hbd/g' < f265/bs.c > build/hbd/f265/bs.c
gcc -o build/hbd/f265/bs.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd -I. -Ibuild 
-If265/ktools build/hbd/f265/bs.c
sed 's/fenc/f265_hbd/g' < f265/deblock.c > build/hbd/f265/deblock.c
gcc -o build/hbd/f265/deblock.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/deblock.c
sed 's/fenc/f265_hbd/g' < f265/enc.c > build/hbd/f265/enc.c
gcc -o build/hbd/f265/enc.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/enc.c
sed 's/fenc/f265_hbd/g' < f265/hm.c > build/hbd/f265/hm.c
gcc -o build/hbd/f265/hm.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd -I. -Ibuild 
-If265/ktools build/hbd/f265/hm.c
sed 's/fenc/f265_hbd/g' < f265/inter.c > build/hbd/f265/inter.c
gcc -o build/hbd/f265/inter.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/inter.c
sed 's/fenc/f265_hbd/g' < f265/intra.c > build/hbd/f265/intra.c
gcc -o build/hbd/f265/intra.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/intra.c
sed 's/fenc/f265_hbd/g' < f265/la.c > build/hbd/f265/la.c
gcc -o build/hbd/f265/la.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd -I. -Ibuild 
-If265/ktools build/hbd/f265/la.c
sed 's/fenc/f265_hbd/g' < f265/pixel.c > build/hbd/f265/pixel.c
gcc -o build/hbd/f265/pixel.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/pixel.c
sed 's/fenc/f265_hbd/g' < f265/rec.c > build/hbd/f265/rec.c
gcc -o build/hbd/f265/rec.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/rec.c
sed 's/fenc/f265_hbd/g' < f265/me.c > build/hbd/f265/me.c
gcc -o build/hbd/f265/me.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd -I. -Ibuild 
-If265/ktools build/hbd/f265/me.c
sed 's/fenc/f265_hbd/g' < f265/me_hm.c > build/hbd/f265/me_hm.c
gcc -o build/hbd/f265/me_hm.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/me_hm.c
sed 's/fenc/f265_hbd/g' < f265/rc.c > build/hbd/f265/rc.c
gcc -o build/hbd/f265/rc.o -c -g3 -O2 -std=gnu99 -fPIC -Wall -Wno-write-strings 
-Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd -I. -Ibuild 
-If265/ktools build/hbd/f265/rc.c
ar rc build/libf265.a build/f265/ktools/karray.o build/f265/ktools/khash.o 
build/f265/ktools/klist.o build/f265/ktools/krb_tree.o build/f265/ktools/kstr.o 
build/f265/ktools/ktools.o build/f265/ktools/kutil.o build/f265/bdi.o 
build/f265/bdi_ro.o build/f265/parse.o build/f265/avx2/pixel.o 
build/f265/avx2/dct.o build/f265/avx2/encode.o build/lbd/f265/entropy.o 
build/lbd/f265/analyze.o build/lbd/f265/bs.o build/lbd/f265/deblock.o 
build/lbd/f265/enc.o build/lbd/f265/hm.o build/lbd/f265/inter.o 
build/lbd/f265/intra.o build/lbd/f265/la.o build/lbd/f265/pixel.o 
build/lbd/f265/rec.o build/lbd/f265/me.o build/lbd/f265/me_hm.o 
build/lbd/f265/rc.o build/hbd/f265/entropy.o build/hbd/f265/analyze.o 
build/hbd/f265/bs.o build/hbd/f265/deblock.o build/hbd/f265/enc.o 
build/hbd/f265/hm.o build/hbd/f265/inter.o build/hbd/f265/intra.o 
build/hbd/f265/la.o build/hbd/f265/pixel.o build/hbd/f265/rec.o 
build/hbd/f265/me.o build/hbd/f265/me_hm.o build/hbd/f265/rc.o
ranlib build/libf265.a
gcc -o build/f265cli -pthread build/cli/cli.o build/libf265.a -L/usr/local/lib 
-lavformat -lavcodec -liconv -lbz2 -lz -lavutil -lm -framework CoreFoundation 
-framework VideoDecodeAcceleration -framework QuartzCore
gcc -o build/yuvdiff_d/yuvdiff.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized 
-Wno-deprecated-declarations -pthread -I. -Iyuvdiff -Ibuild 
-I/usr/local/include yuvdiff/yuvdiff.c
gcc -o build/yuvdiff -pthread build/yuvdiff_d/yuvdiff.o -L/usr/local/lib 
-lavformat -lavcodec -liconv -lbz2 -lz -lavutil -lm -framework CoreFoundation 
-framework VideoDecodeAcceleration -framework QuartzCore
scons: done building targets.

# Encode the first 30 frames.
# Default algo settings use rough mode decision.
# Setting "algo=0" disables rough mode decision.

# Baseline with Square sequence available on f265 website.
$ ./build/f265cli -p "quality=25 algo=0" -c 30 Square_416x240_60.mp4 
square_algo0.265 
$ ./build/f265cli -p "quality=25" -c 30 Square_416x240_60.mp4 
square_algo_default.265 

# Baseline with RaceHorses sequence available on f265 website.
$ ./build/f265cli -p "quality=25 algo=0" -c 30 RaceHorses_832x480_30.mp4 
race_algo0.265
$ ./build/f265cli -p "quality=25" -c 30 RaceHorses_832x480_30.mp4 
race_algo_default.265

# Baseline with Speed sequence available on f265 website.
$ ./build/f265cli -p "quality=25 algo=0" -c 30 Speed_1024x768_30.mp4 
speed_algo0.265
$ ./build/f265cli -p "quality=25" -c 30 Speed_1024x768_30.mp4 
speed_algo_default.265

# Apply proposed patch.
$ patch -p1 < RMD.patch 
patching file f265/analyze.c

# Rebuild f265.
$ scons
scons: Reading SConscript files ...
Checking for C library m... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
sed 's/fenc/f265_lbd/g' < f265/analyze.c > build/lbd/f265/analyze.c
gcc -o build/lbd/f265/analyze.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_LBD -Ibuild/lbd 
-I. -Ibuild -If265/ktools build/lbd/f265/analyze.c
sed 's/fenc/f265_hbd/g' < f265/analyze.c > build/hbd/f265/analyze.c
gcc -o build/hbd/f265/analyze.o -c -g3 -O2 -std=gnu99 -fPIC -Wall 
-Wno-write-strings -Wno-parentheses -Wno-uninitialized -DF265_HBD -Ibuild/hbd 
-I. -Ibuild -If265/ktools build/hbd/f265/analyze.c
ar rc build/libf265.a build/f265/ktools/karray.o build/f265/ktools/khash.o 
build/f265/ktools/klist.o build/f265/ktools/krb_tree.o build/f265/ktools/kstr.o 
build/f265/ktools/ktools.o build/f265/ktools/kutil.o build/f265/bdi.o 
build/f265/bdi_ro.o build/f265/parse.o build/f265/avx2/pixel.o 
build/f265/avx2/dct.o build/f265/avx2/encode.o build/lbd/f265/entropy.o 
build/lbd/f265/analyze.o build/lbd/f265/bs.o build/lbd/f265/deblock.o 
build/lbd/f265/enc.o build/lbd/f265/hm.o build/lbd/f265/inter.o 
build/lbd/f265/intra.o build/lbd/f265/la.o build/lbd/f265/pixel.o 
build/lbd/f265/rec.o build/lbd/f265/me.o build/lbd/f265/me_hm.o 
build/lbd/f265/rc.o build/hbd/f265/entropy.o build/hbd/f265/analyze.o 
build/hbd/f265/bs.o build/hbd/f265/deblock.o build/hbd/f265/enc.o 
build/hbd/f265/hm.o build/hbd/f265/inter.o build/hbd/f265/intra.o 
build/hbd/f265/la.o build/hbd/f265/pixel.o build/hbd/f265/rec.o 
build/hbd/f265/me.o build/hbd/f265/me_hm.o build/hbd/f265/rc.o
ranlib build/libf265.a
gcc -o build/f265cli -pthread build/cli/cli.o build/libf265.a -L/usr/local/lib 
-lavformat -lavcodec -liconv -lbz2 -lz -lavutil -lm -framework CoreFoundation 
-framework VideoDecodeAcceleration -framework QuartzCore
scons: done building targets.

# Re-encode first 30 frames with default algo settings.
$ ./build/f265cli -p "quality=25" -c 30 Square_416x240_60.mp4 
square_algo_default_fixed.265 
$ ./build/f265cli -p "quality=25" -c 30 RaceHorses_832x480_30.mp4 
race_algo_default_fixed.265
$ ./build/f265cli -p "quality=25" -c 30 Speed_1024x768_30.mp4 
speed_algo_default_fixed.265

# Check file MD5 sums. They should differ.
# Square sequence.
$ ls square*.265 | xargs md5 | awk '{ print $4 }' | uniq
81ec022ce0a6ddd6483486d366e308b1
841bad72b7ead2961d98a9c2933e9b7d
393db43510383e7788a371ccc41c259a

# Race sequence.
$ ls race*.265 | xargs md5 | awk '{ print $4 }' | uniq
a968084614116395c5bc4ed0d23f0b32
3851ba6e7c1f0a96c59cdf4ad1f64bd1
0f2734b96fd51a588eaf9c4e889ce370

# Speed sequence.
$ ls speed*.265 | xargs md5 | awk '{ print $4 }' | uniq
8d8ba4fe1367fff90125ad795af02ac5
1762fe51ce59f6f022f02236279d4ece
7c3ed755e0746dfaf9b7b2449062aeb6

# Verify PSNR and quality.
# Square sequence. The fix improves PSNR (33.11 > 33.05) and makes the stream
# smaller (78361 < 78660).
$ ./build/yuvdiff -m psnr -a Square_416x240_60.mp4 square_algo0.265 
===============================
   frame                   psnr   
===============================
Average     33.09  42.23  42.61   

$ ./build/yuvdiff -m psnr -a Square_416x240_60.mp4 square_algo_default.265 
===============================
   frame                   psnr   
===============================
Average     33.05  42.16  42.71   

$ ./build/yuvdiff -m psnr -a Square_416x240_60.mp4 
square_algo_default_fixed.265 
===============================
   frame                   psnr   
===============================
Average     33.11  42.39  42.76 

$ ls -l square*.265
-rw-r--r--  1 francoiscaron  staff  77952 23 May 08:56 square_algo0.265
-rw-r--r--  1 francoiscaron  staff  78660 23 May 08:57 square_algo_default.265
-rw-r--r--  1 francoiscaron  staff  78361 23 May 09:04 
square_algo_default_fixed.265

# RaceHorses sequence. The fix improves PSNR (34.76 > 34.70) but makes the new
# stream bigger (346406 > 343853).
$ ./build/yuvdiff -m psnr -a RaceHorses_832x480_30.mp4 race_algo0.265 
===============================
   frame                   psnr   
===============================
Average     34.71  39.46  40.27   

$ ./build/yuvdiff -m psnr -a RaceHorses_832x480_30.mp4 race_algo_default.265 
===============================
   frame                   psnr   
===============================
Average     34.70  39.51  40.32   

$ ./build/yuvdiff -m psnr -a RaceHorses_832x480_30.mp4 
race_algo_default_fixed.265 
===============================
   frame                   psnr   
===============================
Average     34.76  39.50  40.36

$ ls -l race*.265
-rw-r--r--  1 francoiscaron  staff  341904 23 May 08:59 race_algo0.265
-rw-r--r--  1 francoiscaron  staff  343853 23 May 08:59 race_algo_default.265
-rw-r--r--  1 francoiscaron  staff  346406 23 May 09:04 
race_algo_default_fixed.265

# Speed sequence. The fix improves PSNR (37.48 > 37.27) but makes the stream
# bigger (442445 > 436096).
$ ./build/yuvdiff -m psnr -a Speed_1024x768_30.mp4 speed_algo0.265 
===============================
   frame                   psnr   
===============================
Average     37.20  41.75  41.28   

$ ./build/yuvdiff -m psnr -a Speed_1024x768_30.mp4 speed_algo_default.265 
===============================
   frame                   psnr   
===============================
Average     37.27  41.78  41.30   

$ ./build/yuvdiff -m psnr -a Speed_1024x768_30.mp4 speed_algo_default_fixed.265 
===============================
   frame                   psnr   
===============================
Average     37.48  41.78  41.25

$ ls -l speed*.265
-rw-r--r--  1 francoiscaron  staff  436598 23 May 09:01 speed_algo0.265
-rw-r--r--  1 francoiscaron  staff  436096 23 May 09:02 speed_algo_default.265
-rw-r--r--  1 francoiscaron  staff  442445 23 May 09:05 
speed_algo_default_fixed.265

Attachment: RMD.patch
Description: RMD.patch

Reply via email to