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
RMD.patch
Description: RMD.patch
