From 502dfd636bc04048372a599ab77ef6eaa26a3376 Mon Sep 17 00:00:00 2001 From: "Brian R. Bondy" Date: Thu, 25 Aug 2011 16:09:06 -0400 Subject: [PATCH] Bug 549468 and Bug 670466 - Reftests for ICO and BMP encoders. r=joe --- .../reftest/encoders-lossless/encoder.html | 112 +++++++++++++ .../reftest/encoders-lossless/reftest.list | 155 ++++++++++++++++++ .../reftest/encoders-lossless/size-15x15.png | Bin 0 -> 809 bytes .../reftest/encoders-lossless/size-16x16.png | Bin 0 -> 879 bytes .../reftest/encoders-lossless/size-17x17.png | Bin 0 -> 1000 bytes .../reftest/encoders-lossless/size-1x1.png | Bin 0 -> 70 bytes .../reftest/encoders-lossless/size-2x2.png | Bin 0 -> 83 bytes .../reftest/encoders-lossless/size-31x31.png | Bin 0 -> 2936 bytes .../reftest/encoders-lossless/size-32x32.png | Bin 0 -> 3106 bytes .../reftest/encoders-lossless/size-33x33.png | Bin 0 -> 3303 bytes .../reftest/encoders-lossless/size-3x3.png | Bin 0 -> 107 bytes .../reftest/encoders-lossless/size-4x4.png | Bin 0 -> 136 bytes .../reftest/encoders-lossless/size-5x5.png | Bin 0 -> 173 bytes .../reftest/encoders-lossless/size-6x6.png | Bin 0 -> 218 bytes .../reftest/encoders-lossless/size-7x7.png | Bin 0 -> 271 bytes .../reftest/encoders-lossless/size-8x8.png | Bin 0 -> 313 bytes .../reftest/encoders-lossless/size-9x9.png | Bin 0 -> 368 bytes .../test/reftest/encoders-lossless/test.png | Bin 0 -> 3106 bytes modules/libpr0n/test/reftest/reftest.list | 4 + 19 files changed, 271 insertions(+) create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/encoder.html create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/reftest.list create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-15x15.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-16x16.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-17x17.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-1x1.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-2x2.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-31x31.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-32x32.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-33x33.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-3x3.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-4x4.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-5x5.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-6x6.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-7x7.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-8x8.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/size-9x9.png create mode 100644 modules/libpr0n/test/reftest/encoders-lossless/test.png diff --git a/modules/libpr0n/test/reftest/encoders-lossless/encoder.html b/modules/libpr0n/test/reftest/encoders-lossless/encoder.html new file mode 100644 index 00000000000..08b14898777 --- /dev/null +++ b/modules/libpr0n/test/reftest/encoders-lossless/encoder.html @@ -0,0 +1,112 @@ + + +Image reftest wrapper + + + + + + + + + diff --git a/modules/libpr0n/test/reftest/encoders-lossless/reftest.list b/modules/libpr0n/test/reftest/encoders-lossless/reftest.list new file mode 100644 index 00000000000..0ecf89b8fe9 --- /dev/null +++ b/modules/libpr0n/test/reftest/encoders-lossless/reftest.list @@ -0,0 +1,155 @@ +# Encoder ref tests +# These reftests must be run as HTTP because of canvas' origin-clean security +# file:// URLs are always considered from a different origin unless same URL +# +# The test will copy a PNG image to a canvas, then use canvas.toDataUrl to get +# the data, then set the data to a new image hence invoking the appropriate +# encoder. +# +# The tests should only be used with lossless encoders. +# +# Valid arguments for encoder.html in the query string: +# - img= +# - mime= +# - options= +# Example: +# encoder.html?img=escape(reference_image.png) +# &mime=escape(image/vnd.microsoft.icon) +# &options=escape(-moz-parse-options:bpp=24;format=png) + +# PNG +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/png +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/png +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/png +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/png +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/png +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/png +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/png +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/png +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/png +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/png +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/png +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/png +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/png +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/png +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/png + +# BMP using default parse options +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/bmp +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/bmp +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/bmp +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/bmp +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/bmp +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/bmp +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/bmp +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/bmp +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/bmp +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/bmp +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/bmp +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/bmp +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/bmp +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/bmp +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/bmp + +# BMP using image/bmp mime type and 32bpp parse options +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D32 + +# BMP using image/bmp mime type and 24bpp parse options +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/bmp&options=-moz-parse-options%3Abpp%3D24 + +# ICO using default parse options +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/vnd.microsoft.icon +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/vnd.microsoft.icon +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/vnd.microsoft.icon +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/vnd.microsoft.icon +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/vnd.microsoft.icon +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/vnd.microsoft.icon +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/vnd.microsoft.icon +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/vnd.microsoft.icon +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/vnd.microsoft.icon +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/vnd.microsoft.icon +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/vnd.microsoft.icon +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/vnd.microsoft.icon +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/vnd.microsoft.icon +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/vnd.microsoft.icon +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/vnd.microsoft.icon + +# ICO using image/vnd.microsoft.icon mime type and 32bpp parse options with bmp +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D32%3Bformat%3Dbmp + +# ICO using image/vnd.microsoft.icon mime type and 24bpp parse options with bmp +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Abpp%3D24%3Bformat%3Dbmp + +# ICO using image/vnd.microsoft.icon mime type png +HTTP == size-1x1.png encoder.html?img=size-1x1.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-2x2.png encoder.html?img=size-2x2.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-3x3.png encoder.html?img=size-3x3.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-4x4.png encoder.html?img=size-4x4.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-5x5.png encoder.html?img=size-5x5.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-6x6.png encoder.html?img=size-6x6.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-7x7.png encoder.html?img=size-7x7.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-8x8.png encoder.html?img=size-8x8.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-9x9.png encoder.html?img=size-9x9.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-15x15.png encoder.html?img=size-15x15.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-16x16.png encoder.html?img=size-16x16.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-17x17.png encoder.html?img=size-17x17.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-31x31.png encoder.html?img=size-31x31.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-32x32.png encoder.html?img=size-32x32.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng +HTTP == size-33x33.png encoder.html?img=size-33x33.png&mime=image/vnd.microsoft.icon&options=-moz-parse-options%3Aformat%3Dpng + diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-15x15.png b/modules/libpr0n/test/reftest/encoders-lossless/size-15x15.png new file mode 100644 index 0000000000000000000000000000000000000000..e1287430d05e2b48d8c689310633b269dbe8cff8 GIT binary patch literal 809 zcmV+^1J?YBP)4~-|d=XRbu4s>Mnm&&b7NHbw?AjCtVGZey1 z2r|JR3e8M#GQrMrSXmBZP(Z&mjU4>0knIa;Pe@WBPKBtia48iwQ^8LKHx-<|Q0uA8 z_cSWKyO{3Xi;R9&7~By0iO@}iI1xIDa4As;62VUdHxZm9Pi;@bOiCQ>-p};j!^puk zVGs*xEOd8;I2Jmw5XM3f3+u6hyOU#iN23;(Fn8xL;z!WFJBHl;QX$(G(nz7Zt+2Z- zbRr>)6oN=)JyL0Qrf6)Hs7Etc+Y1=c)972zA%~Z93`2#qEp$U+x2+I`Lf969wu%=P zSq;ma2aOxi^eHh#!Gm{JDf2- zWZC$Ph00Y-<3|kRSG4jz@{cybK%3^b$-DVUdysFnV_eZra$)K$?`d!Fs&El)7=Yo=`DvWALSnHexX~t=dQBH+h}%MAer~kH5s1^G#?!d1ZQMzmXoVwFP!?q(NO3Og^n+{zOd~J8@@vAD2{oQq3rAA{YA8+BAKVRkc%HAQpXFA6iNc`B^}%fxdha3AZxo`A5O#!9PZ)NE zfhTl5q3tO+UYuq}#p>u(y(P+Ck$m?yy0^xB=VRpZVS-6p7`wvA6?|71xI))eaNRhL zo1y7mqweM~+eON5g+hA`-EFYoeu`W?P?$KvxFrOR;5$O!5jw3HUu>sowKO)IMJ#89 zs#C#m*2y~!G-r!U>j5&o7bm(aoZCWRD-3Ogz8$C2Oyk-bJN6Q`U8HVTFzq$Uc7uYw ziQe30q4^M*eiS3BE1X*jztj|bD^9PL=IdIPwv}VYDq>p|toj<&dV`X6pL~4}&DtmP z;kU^2-8d6dIA2u=stNq6O3%#VRdckfD>!Ba+x!5_Y*01tQ#L=RVD6)v-!s4Z7@5AQ zFfoL%6yw=V6~C0FZ!FO?$j!ds7d6`uSHJw0P z>P)H9KiA4KbQ3`FpwpeF%-8ox4}Sd?FA=@Yt3~igLU+R8wlN�OB;^)?tNZn-M@ zLboNIAgEif4g}HJo9u-s=HkN(1(!?*zR_NXFXws_QJSW{`TF_Df9nQ+_c!oIe}J3o z8~DDT=2}0+<@F6*SWolDTAEY+G%u{BIn+<{WIxUBzQ(Tp0QdHFHuf^e>R&06B*ju9 zbdnTNB7}E^AQ2jgFq;ToBGeM0oCu{vD6S~1l{C3K0~mKUBE4HFl30jip%V-3Sh%{Z z2x6fb3-wqy5eu~?!CexZSg@B;SW6l5@g|IT3$priin})yaaZWvP_(#L!lE2?NAYh!h9$+LWLg+UZ|*q8g6JX9_A>9 z+pxl6^5Nqci%%hIA8I6lupB5lfzX~8!axxOLUTdkF9_aziladWH^|}y+pvQn3c)C5 zun!|Rg!C?GBy)d@BH1}gRpFwXt zkF33>k@!Mf7rMTpT^FwUioh4n)fIK$;P`Boia$u%AHu1RV%I0w;ZKqGUnEmMh4fBp zB%Tm^ijJpH(bU6n15rLhTG@?JY8ucahbnHSUy! z*cCdiqUCBVx(2~ymZrNE-yOzt_fT>7XV|dO46=w?9nZ_AEjXi!A%eh3}`2?eM4Ox98&5ErNk7!)C z4I(?oqP?BK9;RXM;mpVcGxijf;xXLftCWgo87Y21!M=iNe~CWw9n#yGX2nYJ+n`R@ z%F?#Ban%}P!5U-EnqanY1g|hn%{oolI*Vgnq-cGLWqn1y@B>ESCi3rQjX%vaOXfXX z&)rAMe1Ol)$GDW+MNoxl QBcKF>r>mdKI;Vst0IwSl1poj5 literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-2x2.png b/modules/libpr0n/test/reftest/encoders-lossless/size-2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..e512d3f9b4f415ccc88e429b62fc5bb169d26e9b GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`1|*BN@u~nRDNh&25RRG2H}+V5tFPbxw7zYP g&cy$Wj6DAtgAZ}cpPiv322{o1>FVdQ&MBb@0Q}GvQUCw| literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-31x31.png b/modules/libpr0n/test/reftest/encoders-lossless/size-31x31.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a86425144e210aa639bf0272dcc8112a9faeba GIT binary patch literal 2936 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 literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-3x3.png b/modules/libpr0n/test/reftest/encoders-lossless/size-3x3.png new file mode 100644 index 0000000000000000000000000000000000000000..cb42ec4f87c5e64c6bf02001d33cfc862c1f5eb5 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~MxHK?AsjOq)fsO5XSi@#>;Kjr z{QvC^xcz6CGoRsqQ!B%N;i=O98MYXj|6e4p`d?FH!~Y58!o5qp-)#cwX7F_Nb6Mw< G&;$S;j3bNy literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-4x4.png b/modules/libpr0n/test/reftest/encoders-lossless/size-4x4.png new file mode 100644 index 0000000000000000000000000000000000000000..e6afafd89ac86972d6ba8d67f0333d0e5a69ac72 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{={5@S9LpWwKx-jhi&v56S^#4<5 zIRA&=*8lH%QuaT?_MHs>mn>uWZ?ui;zsd@R{|vW7_5YuAmi-?TH0QsY+XSErL+<~p kR2cpn8`u6FS$5RRFQnGDnZGdz7R{{QfO zf&cyY1pmk07X5E@P5wW_wY?nwH*aSCU$>e2zwZXo|7sgF|1(_g;QYV2j_ZF-jm&@l z8uS0E)nWe`E{AgeU*|3Kzskqtzn@>!e* XPnhw})xUfhXg`CetDnm{r-UW|aQ#MO literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-6x6.png b/modules/libpr0n/test/reftest/encoders-lossless/size-6x6.png new file mode 100644 index 0000000000000000000000000000000000000000..415c2d9c6ac29b9221a446c7acd7f063ba050f25 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJ1db&7o-KjRSBf2;js{}p#j10`m&{XZ~; z;s4}GO#jm+iT$^nWb$8OqT_#t`$gRU4`p%wpPC{5KP$`RzfD%`f2H)C{|xt>1pgnf z68}Hh%H)5hP4s^|yN>?~mec+-T$E$~zg0@~e~*;){{)%T|AsOX|BFj3`Ohihd*NS* S_En%`89ZJ6T-G@yGywqgoL-9n literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-7x7.png b/modules/libpr0n/test/reftest/encoders-lossless/size-7x7.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2f892747207b8d9c863ede684e0e7770e3c190 GIT binary patch literal 271 zcmWlUy-LGi7=>SLZDL||(2%B@MHd$ZA&o^G{E4+$f>g0hvt)3v;01`3SVU1T!9^vZ z1qby492HR#2QfH^I8?+Ay@%uH@SJBjoZ+0VS*vLwD-coIEE*+d?jJtI@}X3IV|q7@ z#SQ+fCnOEj?G7UD2)O+nz)45M7GvQ@#CUrc^!?h0=p}(x*o*xr2`3VuKMg^BRzdBn zB*GS<84$c6g-Ren_a`yx&$H!W3SlFGrpLjnOR&9Z%z6ck)m>J)JVK`*K}CXRPoY}1 zkhgcBmXAPRa~vKu5tq3M?CHzc)VHDKj*-!P&_`Cpy)5Hg$zxY>u&y*PBVS-dxYie=m^xd(svzIxvP literal 0 HcmV?d00001 diff --git a/modules/libpr0n/test/reftest/encoders-lossless/size-8x8.png b/modules/libpr0n/test/reftest/encoders-lossless/size-8x8.png new file mode 100644 index 0000000000000000000000000000000000000000..fe2ff40a1dc9050bba19630f64de6b51fcc07d95 GIT binary patch literal 313 zcmV-90mlA`P)2q8$;F_w7!%_Szy%&g2Ty=;kVj%1Jb)%H(noah01hrfHBQC@ zIEn4xpsRK$gWllx`^4|x9G^3r=e)#CZgZL!*`Jl!${m(}<`LP4MVbm85`$4H zgr?S(hVrmF-U z6~I-3x(Z^dAVn2Mz7M0njUoKUFv=5nUI51v*j|v`c8Eedg=|lvw`LK3BZ6`T9arEw zL2Nfd#nmV{8Kk>_ez%VB&qF9XK*tW?*dZ)SqiSa`YRgD#i?nrs={f>2Y2(od+$?jkd~ZYL9ZN&WhGxCh0MneC8icJ+B_!?wD)< O000050zoPBcC_(YZF!n40MP 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