Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
*.swp
perf.data
perf.data.old
/samples/
Binary file added jxl/resources/test/jpeg/cmyk_16x16.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/gradient_32x32.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/grayscale_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_grayscale_8x8.pnm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P5
8 8
255

Binary file added jxl/resources/test/jpeg/libjpeg_progressive_8x8.pnm
Binary file not shown.
Binary file added jxl/resources/test/jpeg/libjpeg_restart_8x8.pnm
Binary file not shown.
Binary file added jxl/resources/test/jpeg/libjpeg_rgb_8x8.pnm
Binary file not shown.
Binary file added jxl/resources/test/jpeg/libjpeg_subsampled_420.pnm
Binary file not shown.
Binary file added jxl/resources/test/jpeg/libjpeg_subsampled_422.pnm
Binary file not shown.
Binary file added jxl/resources/test/jpeg/libjpeg_subsampled_444.pnm
Binary file not shown.
4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_testorig.ppm

Large diffs are not rendered by default.

Binary file added jxl/resources/test/jpeg/libjpeg_testorig12.ppm
Binary file not shown.
4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_testorig_gray_scale_1_2.pgm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P5
114 75
255
/0234444322322220//.....,-/03467;?BCEDDFCKU]cgkmvwvusrqja``_^\ZXVUUTVUVWXYafcaR;75313221/////,0=Q`q‚‡‰oOMOk’¡–qTTT./12222221122222//.-0000/01224569<?@@@ACDIOTTZcipsvvtsqh`_^^][YWUUTSTTUVX[cgicP<9854322100001//7EUcv€‚dKJLPrƒ‚jUXX,-/00000/../0000/.--00001112234669;;<<>AFHKNNT^hnprrsrnc^^]\[YWUUTSSSRSUY]ehfcK9:8643221000021.1<FQl}}fOJGFHVYTUZZ+,./.....--.,,,,.--,....000012454677:;>ACEGIKNV_hlqtqpk]]\\[ZXVTTSSRRQRTZ_ghnpXD97533221111102//2:IsŽˆvUFCEBISTXZZ----.-,,,,,,,,,,,,-.....-/00//13256778;>@BCBGLSX^dlqsrf\[ZYYWVTSRQQPQQSV[dhl{rWI>72310/0000111117K™–mUMSg|„wdZ\....-,+++***+++++,,,--..-./.--/13566679;=?@?CHPUZ[aioodZZXWXVUSRQPOOOPSW_cjuŠ’„iQG=20../////000003S…–”–’‰…‘¡œŒjTZ.....-,,,+*)+++++***+,-.,--+,,.0456555689;<;?ENTXW[`eg_XWVUUTSQPOONMOQVZ]bo‚–›ybPA91-,.----..../1U…–—Ÿ·´´¥¡¥›‹ePR////0/...-+*******)(*+-.,,+)--/15654434578998?HNSUWXY_[WVTSTSRPONMMLPSY_\gy›œ‘‚p`N@5.+-,,,,----.0M~”—¡·¼¸¢Ÿž–^HE/011332010.---,*++++,-..-../.02467655335565424=HOTVSSVWUUTRQSRPOMIMKPZ]^cu„“›–Š{meR@2,****+,,,,.-H{•—¤¬¤š˜—Œy\F>12335654320///.+,,,,../00///23689:8653357763449?GNRRSTUVTSRPPONMNKMNTZ\_ew„‘š˜ƒzuhT@1+**+,,,,,.+Dw†•™•””’‰w\A8556789:986544420////0122333468;<==;976679:98879;CJOONRTTTRQPNNNMJ]LUVY\cku€•š—Ž‡…ƒ|lVA2.,+,++++,;Qo{‚‡‰Œ’‘Œ…u[>67789:<=<<;:9997533332234469;:<>@@@=::99::<>><<=>ALW[]RNSSRPOOOOOTkZVX^hr}‚”š™’ŒŒˆ~mWA840/1111EZgrv{„‡‰‡‹ˆt[E=99:=<>?@AA@?>=<<::998754669;<?BCCA?=;::;=<EILLPYZ^ZYbea`^TROOQK[zm[]aem{€jlv‚Œ„vi_RF9989?R`r|{€†ˆ‡‰Œ‰{r]NK78<?@@AABBBACB?=<===9865679<>@BBBA>==<<=?Yx{Y]lo_][^`V[]\ejeNKgrhcvgcln‚uwsvqpsvx|~~|…†„k?@<CPb|„ƒ‚ƒˆ— ¨ªœ‚o^UW67:>@ABCDDDEEC@?>===;:8778:=?ACBA@=<<<=?Kzs]TS`e\[bh]X[finopmzmhfa^xcfw‰unr{{rouww{}~}|„‚‡yFDGW|™™– š­ÁÈÊŲŽpaXZ5569<>BDEEFGFFEDDB?=<;9888;=ABCBA?=;;;<?^kXWXZYWVV`c^Zffcfdighgfddc€qm…xskdjwssuxvx|€€~€……•‘‰h]ƒ¬¼¼ÂÉÑÝäåáÛÄœxjed1478:=ADGGHJHIRLGAB=<9:799;=?ABA?=<;<=;JlTVXX^\ZWX^_\`h^behiijihfd_ks‚xusj^\nrsx{}z}‚z~†‡„††‚„p¦ÖããåëñõøôíåÕ¶‡.0358;?BFHJKK`wygSG@>89969;;?ABA;;:8;;@[VWXVZabb_Z[\]ic_dfhhiifcchfhcpxqmf\[_sq~v}}{€‚‡†ˆˆ†‚w¡Y¢çø÷ôøüþþûøöèʯª®¨201369=@EILLQt”–„r_QA9668;=?ABAA<878;UY[^[\Y_bfe__^de]degihjheabcfkvkrha_]bbir|t|‚~|ƒŠ†Œ‰Œ…¤¹a‘Ýûýüýþýýýú÷ïÚÑÔÑÄ:51247;>DJMLT{¡±°§¡•†kUKF>;=?ABACNUTLO`U]^`]\`cgedfcjcigghihiifcdbddv…ma_^^dinrru{…ƒ}‰‹‰‹†Ž„‚€‡ÈôýýýüùüþøîâÝéõíÖ>;75238>CILPQt±º»¹¶¨’xc\UD??CAMfzwom_XY\]]\bhjjklnqk{€lfhhkibccedcfzxa___bh{okv}€~†„ˆŠ‡‰Œ†z«ãõýÿþûúùúå×à÷þõÜC@<9547<AFILQk”«¸½À¿·¨”€ocVE;FPn‰†umm`^YZ^bflmicdplecffxqgiggc`dfiijklba`_esqhqx{yˆˆ†Š‘‹’Œ„a…ÉíúþÿýúúüðÚÝúýôáIFB?:88;@EGJOcަ´¸º¹´­¤˜xl]Z^pyzyobsnifdfjolgdefjhfcc`giurjiacglljgq€mwiacb`fgbjrwv‰—Œ†‘‹–‘•}[k¶çùýÿþþýÿýèåûýôëMKGD@<;<AFGIK`¤­²µµ±®®¬¤œ–Œyssrppkexjnefea]`bdfmghcbadbafqsrkkjjifc^Šjqwdbbac^a_ipq‰–’‹¤–œ·¡X\¬äûþÿýþûýÿ÷òûýüúPOLJECAACGJLOb‰ ªª®²°­¯¯­¤¥†ppppmkkjuoliilk]^`agmejda`bbacabehefgghd\wtl|ncbb_a`]acf“‘˜šŽš¢¥–^`¯ìüûþýøõþþýùõ÷ýÿRPNMIGFGFILMOb„—ž¡§««¥¢ž—–Œrpppplletpnhgh`l_^chocfgi_^`_rkbbc`babeaedxh}‘…o^_]_^\^`gŽ‘Œ’‘ž™€›…^iÀùþþÿùîæíõ÷óåêùýRQPOMLKLILNNN^x‹’•™›œ†|y{vqttttpm]rpmmm`^``cghkiglfac^kkg`abbiii`cbdkidemqmh`]\\\\c}ސš‘•¡‘z‘Šr€ÇùÿýóàÍÉÐÛéíààäãPOONNMNOLNOOPUbt†ŒŽˆ~umfoutuuuuoj\oc^jgaa``afghjpnnnkpjfgdddmmmrh_bbp`lcedbwd[\\^[\sŒ–›™œœŠz‡žŒ³ÙÞͽ±¨¯·ÀÏßßÓÊÁOOOOMNNOOPPQPQV\is€ŒŠ€ƒu[cmvtsurf`\lkbk\^babccfojhghegj_fd`bmnkjgp^`gqbjh`dc…b`\YYZ\a‰›Ÿ¢ž —‡|~–‰‡•–Š…‡œ¥ª­®½ÏƸ«NNNNMNNOOPPQSQRTZex†‘Œ‘}ifmotutka[Zhilvi_aecaesjfeeedeebisnhkjefjŽhljda]_bc_jimlf_`€›¦¡¡Ÿ’ƒy|wou|yu€”›¢£¦  ³¼¨–NNNNMNNOOPPQPQRSV\p}Ÿ“zxylotvthaYYcsqm‚j]ccamkejlnojmlurwphe_^}€mobea\^[crboihkjg]vš©ž¢yy^iu}…‹’—˜›ŸŸ¢Ÿ›µË¶MMMMMNNOOPPQSSSRUYp}‰›–€rwqnppne^Y_ijeg}‹fcdgjgmnmiddji|‹mlWVZ]wgcxbaa[YVmsgjjkjih`h‘¬¤£—Š|vqTjƒŒ“™•”•–™šžžŸºÍ´•NNNNOOOOOPPSTSTSU]xŒ••™”wzrmjh`\Zgeffhfqzdgqilqfggebfcu”Š|ie_MNWm_nsg_baW^ouehmkjjibaŒ­©’†ywhNoˆŽ”“‘“––šž¥«ŒmOOOOPPPPPSQQSVZ^am„“—•˜’~|tjihb\al]cgfheulgqjq€jdgeedw„|xnhbbg]Uno€hjionpnwkdilkjjid\Œ°¥˜ƒx~OTr„ŠŽŒŒŽ““–žž“U?QQQQPPPPOQPS[nsruŠ“™‡~…Šolkjd_Xzs_dhggnpmgikŒŽhnfekv[`meai„Žoˆ‰jktjelhhzeehkkjjigY„¯£’„zxtE]u„‹ŠŠ‹Ž’‘“—™–ˆseRRRRQQQQSRS\sƒ€}‰›¥±ºœlbv|qnldb[uƒq_eggiqigijm‚ˆsvuˆm`qqgx’”ŽŒ†scgwvgijmsvffglkjjihYx­›Œz}[FWq‚‹‰„…ˆ‹“”‚pcPSRSTQUTUTZp…~x‚“ª¿ÎÔÒɨˆˆ{nmhccltƒebfglhghhhhmz–”‘”‡wnfl‹•“Œufdfoihknnngfhgklkkjj[n­–ˆ~z{D=Ne…ƒ€ƒ†ˆ‰‹ŠˆˆkXKINRSUUUVST]q~€xm|‘¬ÈÜâá×À¡ˆu„›{tnkk_\|adozddecfl]s€~‰›{ile}z„wioqiiginllleghgklkkjm_pž…yzkJ>DXt}|~‚„ˆ†}tfXRU]JOQTUVUV\v|wjwŒ¤¼ÏØÚÔÆªŠzyy™›Œzppgg_oheqŽnjigc^Yfmkt†{or{‰gkzmmpmiljjkmmmfhhgilkkjk_~—†{y~[TLFLewzz|€‚„~xtmdafdeEKNSYXWat{{uks‡›¨¶½À½³ª’ugkjm¡—„vop^efjkihilighdha`v‚…sckpnjnnmmkehmmllkkkehifilkkjfd“Š|x|mELNBBVnvvx{~~yutqmloij@FJPSV`pxznfo‘ž£¥¥£¡ž˜…l_^bmv¢¤Œ^_^bhfhchjgcbbjh]ex|kdhghlkihjljmiklkjkiehhhhjkkihp—‚}y|I6BB@CYjrsvz~}ywtsqrons7>DKPUdqrf_gw†•——•“’‘Ž}i^\^s}Œ”¤¨—``_`cfbh_edda_aehjklfcijjhgfegiomiklkllieggggfhhgeˆˆ}zyi339<?X‹}orw|~zywtrtrw|18>EJQdlfX^p€‹’ŽŒŽ‰wc]]]i{‰’• ™aaabbfebcfhbdddc`ggga_ilmnnmmllmgiklknmjeeeeeeghhk’~zv~A53:9_›·rs}ƒ‚€zzzutvu}‚,26<DL_ca^pƒŒŒ‹‹‹‚m_]`_hx‚Œ˜ˆncbdee_dc`fwedbabcfhkgjqokijjjnmhiiklkonjeddddacee{Š|v{[=98:Q—º´”sr~…‚~xxzvuxx€…,,07=GT^_j—’ŠŠŒŽŠƒub_^_`_r{‡„ighdeef_de`_zabdcaaehdnulkjjiusoljijmnoonldbbbba[beŽ|syh@=<:Kƒ°®£{hq}€~xtxxzyy‡‹0/04:BNV]m…—𒇆Œ‘‰‚sg^^]^`_f|}ihhgdeef__daljcaabbadcjomlkn{€liijmkmnnmljb_____YXs†t{vMB;8;t¢¨©’X`o{}{uv{~}}}ƒ‘9889>CKQWe{˜’†€ƒˆ„{qd^]^^`cejmfghegdeef`Yabyib]``bcehpknoqˆ•pdmkjjklmnmnmkd\\ZZZWY„~zvnLD:Hk‰–£’]F[p{|yuz}€€€ˆ‘’BCDCEINRX\l~‡‡{poroia^`a`acfi^aehfgddeef`U`cm{iYfcfmpmlmmmx_dmllklmmnmllkibZYWVTUcrppI<MˆŸ‡ƒxH=@Uq|}yz}}†‡ˆ’MMMMOQTV[[ajpsma]YWX\]_`d^koc[behhgeeeee`VXaagtkskollnkmj]ZcflmnlllljlmlnljaYVSQPN~~llmoR^£ƒ`P?=<>Pn€~}†‰’„sWWWWVWYZ]]^_aa_ZVOMPTX]`cesfc`_efggeeeeebVT_b^gogdlpmiki\XY^illmmmmmllkjkl`VVTQOIUnigloo„ª›]@C<9<;=Opƒ‚‚ƒƒ€ƒ‡Œ’‡od\\\\\]^__abaa``a]TKHKNSW[^|sjfabdfffeeeebXQ[`aailkkjjlj\[[ZY]hlmmmmmmmmkh`UTSQNLJTigiilq…}I47;>9::<Nr„……†…ƒˆ‘‰tqh_____``acb``a```_ZQIEFHINQ\qujf^ceffeeee`[PU]b_jpsme^d^XZ[[ZY]cnnnnnplfaXRRPQOLIH^chikllV@=8:DD:98:Lq„…††…†Ž–Šuvshaaaaaaaabbbbbbbb`_ZNFBBBEEJoƒxngbddffffea^PP[amwth\YZWTSUVXYYX\bimomlaWSSQOOLKJGNb`djgkkSRA;M[G;::;Ms„„†ˆ‡‹“xv{shaaaabbbbccccccccbb^UJDB@?EEsr‰zqcbbbefffdb]bpvwqnaZ\YURPOOQRSSVY\`a`YVSSQOMMLKHGY^]efgmu…sGVhRA;89<Ls……†‰ˆ‘{q|wrfaaaabbbbccccccccdcc]SJD@BD^b]ˆvkmqtuvw{xvwtsrrp`ZYVSPONOOONNOPSUVWTRPONLJJJJEI\Z`ifilhWLbkT?@:88=Inƒ…††Ž‘pxzyodaaaaccccdddddddddcdaZOHBAPi`gqŽslojmnpqpsusssqok]ZUQPOPONNNLMLKMNOQPQONLIHHFHEM`]dcffeFSigWA8@::8=Ef…‡ŠŽƒsvwzvnbabbcbbbbccccddddcffcc`WJCVsflnqrqjnkkmoorrstsqpqk]VRRPOPPOONMMMMLLLLLLKJJIGFDCEPaacecga`k]WL<6==78;?^{„ˆŽ‰tquxxsj\abbcbbbbccccddddeafej‚qQBADCHR\lkknloqrrrssrpopofVPRPOPOONMMMMMLLKKMLKKIHFEDCCN`ceghcfeQIKLC:;999;=Vs‚‹ŒxootvurfXabbcbbbbccccddddggg~˜²´¨RCAD?=>@Zlpoqrqrrqqqooolj]SRPOPONMMMMMMLKJIKJJIGFDCCAAK`dfeaWSF;8<CD@<8889;Oo…Ž‚moprsrpeUabbcbbbbccccddddfi†¶Ñììߏ]DDB=:<<^€xxvsrrqpqononkdRRPOPNMMLMMMMLKIHHHGFFECBCA@Iadd`UG=65436?D@9347;Hl†‰rhmmqqpoaQcccccccccddeeeeefŒÄìøþþùéÍŸbFB==>FrºµxurqommnmkojcTRPOOMLLKLLLLMKHGFFFFEIDAA<=E`b^L?;8776436>A<114:Bkˆ‚jeikppno\Hcccccccccddeeeffs¬ÞúÿþþÿøêТgFFBM±Üøç–rvnppkmmmlleWRPOOMLLKNMMMIHFEEEEEGFF@@<<JaWC85898876549?A;1/5BpŠwecefilmiR:cccccccccddeefghz¬ÛùýþúõùõêÆ”UHG}»ÓíöüüÄ}qmijlmlllbWRPOOMLLKNMLKGFEDEEEEECEBA==RO:8778756655459??711Ax„d^__aglnbA,cccccccccddeefhiošÒóúýüù÷øôÕ¥fWo¬Ûðøüûüÿì–kkklkinj\VRPOOMLLKLKIHGFFEDDDDDGFKKE]W8764533433334346=?:1BqkWY]Z\ejkX5&dddddddddeefcjg¦Íîüþþúúøøöפfp–Åëøúþþþþÿþ»oklkjki^XTROOMLJIIJHEFEEDBEEDDGHKP\yf76554332222231136;>;C\PLXYWYdjgK,(dddddddddeefgit§ÓùÿþþýõðòóíΣ€’´ÜöýþþþþþÿüÿãŠcpkik]ZURPOMLKJIIGEGFEEEDEGIHLMUd†[5543433211111001138=AF=ESWUSbka?+(dddddddddeefgm}³äÿýÿÿùéáèëçÑÀ¼Íàñüþýþþþþþÿÿýú®kkgi_XVSQPMMLLKIHHGGFEGFFIKOONTiE5543433211110//020257;8;ENRUblZ5)&dddddddddeefijs¥áýþýþôçåççãÕÒâñùýÿþþþþþþÿÿþÿþÿЂkigZVTQQMMMMOKJKHGGFFHIHM\TRUnn8765543320000/--/00123:><9@HP^gR0,)ddddeeeeeffgklsœÎôþþþøóëëæÞÖÝîùÿþþþþþþþþþþþþÿýÿõ­mjeVSONMNNNNMLKHJJIIM>8KEW[[tQ79877765544320//.0//115=D>:;HW`J3-,ddddeeeeeffgjmt¡ÑõþþýøñçÜרÞíøüþþþþþþþþþþþþþÿþÿüþé¯o]SRLPOLLKJJIJKKIIWJBA?C^jk?=<;::;;::9877430.---/2/4@FC;9JTH720cceeeeeeeffgjloŸÐôýÿÿþõæÓÌÖéúÿþþþþþþþþþþþþþþüýþþûþýôÓ¦‚mYPJLJKKKMMLJJpaF@CCJt\D><<;:;;;<=<;;:8641/.//024@GD>?GB61/bcefeeeeeffgimp¤ÛùþþüûñßÌÁÍèüÿþÿþþþþþþþþþþþþÿÿþÿÿÿýûÿÿüùð´SLMNOPONMJM]ICEJHWcXTH??>=;<=>>==<==<<951000003AFDAEC820`cfhfeeffgfegjxµàøýü÷ðæÔÁ³¿Üøþýýþþþþþýþÿþýÿýþýõõýÿÿýÿþþýö²LIMMMMKMKHJCDHOQZWUWUQFB>><<>>><<>>>?B@?<966;HTQJFISQ>0.`cfiihghgfeeej€°Ù÷ûôëÛο·¿Òéúþýþþþþþþþýýþüÿþÿûßêýÿÿýþÿþûù±JJMNNLKKKKKHLUc€pQLLORQKD@<==>>==>>>@BDDC@@<Gal`H<HZ\G51`chkljhiheeffj~£ÑòõêÜËÀ¶ÅÙëúüþýþþþþþýþýúýúýÿþüîòýÿÿýýÿýùýµMMMONJIJKMNQVd–¤”kKHIMNLHD>==<?>>???ACDDB@>=G\f[@5@V[G0*
4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_testorig_scale_1_2.ppm

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_testorig_scale_1_4.ppm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P6
57 38
255
0/-51.72.92,80-80-80-80-5-*4,)5-*5-*1.'41*63,96/B<0H@3JA2MA1YB4†C3«?2ÀF;æCHñAD÷:@Ù?=³@-°?-¦?,˜@*‘>.=+“=,”?+™?6¸B4±E9_>/;5572/62/41,.0-0/-5,-=13yD@œ`l±XT†PGbopuŽ‘†bcSYSa,,,0/-2.+3.*2-*2-*2-*2-*2-*1,)3.+3.+41,41,52-850<5-@7.C9/I=1JG6fA/„;*¢E6ÊE>è@?ò;=ÁB3ª?-¨?, ?.”?+>-Œ=,‹<-Œ=.žB3ÂA;ªPHPF<@6494043.02--3/02/21/3/.P5*sTY|~»YXžJ>fDCUMVQQYNaXQ,-/---.-+/+(.*).*)/+*/+*/+*0,+1-,1-,1-*2.+1-*40-:2/=4/?4.E80J=5V93r7/’;1¦A5ÇD:ÙF?ªC2@.=-–=-Œ=,‰<,‡;-„<0†B7žH;¶OJ¡}mhseKI=77-01+/0+.0-//-00.00.:/7jhiŒ’Äv‚¶hoiyx‚—ˆj{k`Z@,03./1....-+-+,+)*+)*+)*+)**(),*+/-./+*.*)0,+3/.;23<21<1/@2/?82A83X6-;.’>4™A3­C6?3’?-“;-<.‡;-…9)9+>5…IA–KE¨nc¥…|yZfR?E710+2)*1++1++1-,1-,6,-cqMŽœ–º–ŸÆ§Š²‰«†g~bOO312,32-74/72.7/,3--/-.,+0/(//)+.-+/0*///2.+70*=3*?6->5.<1-<1/D1+B0.D,*\4,x>0:3‹?2A3<1ƒ>.ˆ<.€;+w;0v>/†C:†MB–\X~•x‹¨Š€^‹bWpS>D:.-+-)*1(-/*0+,10,+^cL„šl†¨uް}‚¨w~žy`r\?A4671872=:5?:6?74;629527327./50-41,43.540;62@7.G:1G=4C90?61?61D65M34A9.K8*m61‰==„A;„=7B1…;.<,{>,¨KFŠG>tM<VFxwX§xhž˜~…¡{†pxpasYGD39.*./)1-*=&,H@5clQmŠ^r˜erœjw tt“qZsUD;4893=<7B?:D?;FA;F?9F?7D;4B92B92<7194.96/@9/F<0M@0M?4H;2B90?;2\:8œEK„@7¤EAœD6¥=2¤E3ª@2©<A—D@y=2¶:DÔ@>ªVLjeG…kPæOVÿ+Iý;UôL]äWgØclÐ`lÐQfÁL_DKR3.E=2cZ9yƒ`sŒdx“f„ޤ{‘|YrRURC671;:5B?:GB>HC=LE=MC9L@4H>2D<1A:2<71<8-C;0K?/O?/M=0F:.A:0A?3¨EHÌ17 <%°=+¥:0¶A8¨</»?5Ô<1÷.4â=7æ42Ö6*¾NC‘]HÖ[Vè>AÑFAô>Jü5Hþ9Uÿ;`ÿ?mûArÿFjùTr»WalLA‹~u©«¨«³µ¾¼¿ÚÒÏÙÏ×§©¦`w][eJ10.762<<4BB8JH<NL7PPHb`xWNQH?@A96=82>71>;6F?5P?-A>-D65>;4h;5«;-¡:'«>*»9+©;,¬>-·?/Á;/Ñ7+Þ7.ô.+Ú7&Ù6#Ë=1ÚFBñADÒA>­<.ÇG<ó@FøDMýAYÿBjýIxÿKwùVuóJkžnnÓ»¯îëòþäýÿóüýøõöíðÒÎÍ—“•›74/52+:70@=4OE9TK<ecq–œÖ””Ú||®`^vECH<;@B<,G@-EB;I?G@IHLB8’B;ª?-­>+¸9*Í9/È91Ç9/Î:0Ñ7-è1)ð/*ò/)Ö7"Ö5#Ó9/ÜMEÅE:»<)»<-ÈA;ÛIJïDJüK]úEdÿNwûUyýSnù\mß`iÙžšÿööýüÿÿûúÿûøÿñôêßÝäâÕÐÙÔC?4<8/84+>93MC7WJ:a\p”žæ¬¶þ®µûŸ ãvtµbXGDWD@=[OS‰sš§f„¾IR³<(­:(º;,Ì9/Ý:3Ú72ä=7Ý90äD8ñ91ú**ì1,Ö2&Ê<(Ó:,Ú?:×EE½<'Á9+ÎH?ÅIAßKGæOTøWiþQoÿTwÿXoý\kíWc§unóÞÛ÷ÿýÿüýýúõûðîåØÐÿüèæìèPJ<IC7B;3A:4GC8SG1[T[‹–Ωªü¬¯ü¥©óšžå†‹Íuw ’UgØHQåDIÇA8àB?Ï>9Â@2Ë=1Ô7.Ù5,Û:0Ú6,Ô4&Ì9%Û;/ü47ç55á55ò21Ü6*ßK?ÖDEÔ=6Ã;/½@.½>-ÃE9ÎMHôdmúXmû[sëtxôftȉ‚baOßÂÄýûþÿúÿúÿöÿþ÷ôîàÿÿãööêXO@TK<NE6LC4JF:VK5]V]‡ŒÃœì¥ø¦ç¤žè˜™ÚÁnˆä=Dâ?BÙ=AÌB?è=CØ:9È?7¿A3Ä7-ß63Ý7+Ý7'Ã8#Æ8,Ú91Ë8&Ý2(à-0å/,Õ8'ÔC2ÝD?æTTÍ:0Á:'·>-´<.¾@2éf^ïijóboöllþbo¶‹„[iFãÑÇÿüùúþýßýåôýìÿøè÷ïÚþýùZN>YM=WK;WK;SK>YL9ZRPsr”„†¶ŒÐ…‡Àqs¬¤Ymù7OáFAí>KÒDBÁB9Ô97ÌC9Á9)¾;'Í:*â6,ó04ô02á34æ2>í/1Ë8(Ñ9+Ý<2ÊB2Å9(×:1ã03Ö71Ò>2ÇC6¯;,¬<.®=-Ú_Xïlr÷nxÿpwûNb½~yxa×ÖºãñØÃÚ¾¢ÍŸ»Ô­äãÎêÙÑßÑÈZM<ZM<XK:ZM<\L=^O<[OC]RVh`…‚yº—|³¥iœ½>5ÝC9ö<?âAG¸<2¸@2×96ËC7Á:'È;)Õ5'ì7.ç2'ô*&õ&.ÿ8ò.:ç6<ó08ô-0Ü:5Ý>:Ý;8×4+Ç8(Ç:0ÔJ@È;2Ë80¼:,ÊOH÷xüyÿkxÿE`¶mdp‹X„hpczŸl‡µw’»¤´Î½µ¯¥¤ZK8ZK8ZK8\M:^K<_N<_P=aP>cQ_uq–º€–òZiÿ9PÓCCæAEÑB<¯;,»=/ç9:âH@ÏG9Ì8,ß6/í1/ü,<ý(<ð,Dü/XùS_ñIZÛ4>´;*ÍE9ÓD@ÑA9Ê9(«<(¹=1Ø?:ë51ù-.Þ7.Å@7øz{üz‚ýdvùA[•VEiP‚‘h~¥p©m†¬oƒµn­yɰ §¹]L8]L8]L8]L8^M=[O?^RFfSOkZd|ƒ¹§‡¸çwsôP[ñALÝ:;Ã?2­>-Ç<5Õ7.Ú9%äA:Ñ=/ê86û7Eö*-õ)*ì)/ó=LôT\ß@=º?0§8-¹>9×CCÐA9Ò91Ï:6Ý>:Ü;3ò00ô02ë2-Â:,î{xþw…ÿQnôAaqM?jŒPz¢f{£g}¡c}¦j}­a‰²p‰¥[gg_N<_N<_N<_N<`N6\SNql‚xqšt|ª‡‹Ò¥•¶Œ|ÏSIëGHä:;È@2´91ÉYMÃ?3Ý6-â70á?0ì1,ú9<ôNRå<?åBEÓ:=à:>ã4;ðW\ù_kàRNÞ@?ÜG@Ø93û+9ü7>Ý4-ê5.ù.2î1-Â8+çtqûj{ÿAcÓCZWQ9m‰Vwbrš[wž_y¤_x§Y‚ªd~™las]\O>^Q@_RA`SBaTNnjƒwy²mq¸ŒÜÆÃ¼äÞ¢ØÑ¬xÃe[ìRTè:;Í<7¸G9ÐVIÕ4,å>8Ü6*è0(ã60ÚACóS[úZdø]cú2<ô1?ùU^üXaá<8â64Ù<3â94è8:å63Ý6-ð0+÷03ñ1.Ì9/ädeþWsû?b”EHCG0bwLp’Vj“Oq˜YtœVo™Og‹KNh8G^4UH8]P@bUEdWGpk‰sv«cj²|ƒË¥«ÛÆÇÙËÅDz¦°yxt‹hbÐoiübbîE@ÐB8Ã>/Ð=-âFGÜ;3ã60Ì:-Â=,Ë;;åMYèSYã:7öCIä7;ù59î73é30ß<3è64ê67æ40Ü8,ì1(ñ33ï2.Ò80ò_gûBdêCaaK=RG5LZ7g…IeFj’Sj‘N`‰G[|E]tHZuB@@6TG>^SAjgrol›`` qrÂŽŠá˜—Ó™“Ó˜Ë‹‚±n_drWL¸YSãtmözxÛKCÁ8&É:*Õ9,Ò9+Ú8-Ç<)Å;1Æ<2ÎD:ÏF<Ù7(ø*6ÿ'?ÿ!<ÿ#9í6;Ý:5ç85ì44Þ6-Ú9'Þ7$ç5+ã7)áB>ÿQjÿ:a˜;F8<+BA-_h=g~RcˆBkKjIfˆKdIeFcˆC/4-A<8OJDabwYYfh³~€×…†Ö††Ì†Õ„Å}xxUS^bG¹SQèagìqi×K>Ã<(Ì9)Ô6+Ä;)Ô@2Í9+É:,Ê8+Ò;0Ò:/é24ù/=ó1<ø/9õ1;â66Þ95é77ò59Ý6.Ò9)Ô9'Ê<$Ì?-÷MVÿ:dÜB\F678:-de;¥¾…s‘]fŒCq–SjIi‹Nf…IhˆGl–N-0'34/@B7TT`b_ŠƒÔ‹‰ê~͇‡ÇŠƒÆ„zŸndbd_Km\Hˆ[DêQTàA=Û7-Ñ8&Ý5,Æ7)À=+ÔB5Ç9+Ç:)Ì6(×6,â92ð5<ì2=êFGïB>ä86á96å99ë8<î68Ö92¿:)½<)¸:$Ç=3ÿG^î@akC;><0[J8²o•±~YuEe‰Ah‘KeˆDhŒLiŽKj’It¢WA?2??5EG/RPC]]Qzw¢ˆ…Èyv£xt§yqˆob\n[Ll\Mu^N¤L@Ø7/á4.Ý5(Ì<$Õ9*³:'Æ:-âE>¸=+Ã;-Ï;1Þ;6ç98é:7ïLMÔIDÙ;8á:4æ66ê7;è7=è8:Í=4®;)¥:&ž:*ÌOMçHZ£]SHG3R^6v˜\‡˜bWdHGT6i†Dc‘HiŒHlPn—QržOv©ZZQBZQB[RC_VGd[Jj_]qeij^`ZWNYSGaYFi^Hp_O¯RK³?0Ë80Û7-Ù7,Õ7+Ô8+²:*±9(Ê7-ÓD6Ù;8à<:í49â96¹;-´;*Ð@5í76é6:å95â92ã99Ü<<¸<2›<*‘8&†:,ÁUUŸVO˜_Vp„I„œ`Rd:>D6<>1AM7jˆHl”Kn•Tl–Jq¡Mu¦W]†Lf]Nf]Nf]Ng^OiaLiaNiaLhaG`[HOL;JK9ORA^TH­UQß;<¹@+Ô8)Õ9*Ò9)Ñ:)°<-™;"º<-Ñ80ï7?Ü9:Ø58Á61§>+§<(¼:,Ý;6î85ç<4Ú@8Í=<®<1–9(‰<(ƒ8%‚?/™SGZN–]VcmJ6A08?7>>29;.>J4m‹Kq™Pq›OsžOz¦[bJXHi`Qi`Qi`Qi`Qj_]j`WjaRjaRiaL]XEFI8?E7AI4wT>ÛVQàA>Ë9*Ì:+Ï;-Ñ;-¾;3¤;(ÈB7âE@ÍB?¡@0”A1ƒ@-Ž;+“=,œ;+¬:/É<2É?4¶</6-‰<,‚:+|:*u7(‘D:PF˜UO—]YdoE@M1U^I@C(9;.>J4nŒLq™Pp Lz¦[h‘OdŒMY~Ji`Qi`QkbSkbSlbXldQldQlbVnbThaQWQAHE4MG/¬BBÉIHæ^`ÒG@ÒE>×FAÛGCáGIÝIGçACáB?Ä>;—A2‰=0‚<2;3=1};-€;,Š:/•9,‘:)„;,€8*{5)v6,q9,‡M?UH—SPn]MP`;YoA;L*:@49;.<H2g…EršQr£Rj—R`ˆIeGWyGi`QkbSjaRjaRkbSkbSlcTlcTqaTldYpm^lfPSK4yK>”A=©HBÀHGÐB>ÎE=ÙCDáCDàECÞC?ßB=ÄA9‘:0?3‡81„;,‚:,9-~:/}90|90z:0x:/t8.p6+l3(p:.ˆQJ“RN‚[LbiJNd>HW89A,=>04<1<?,arFršSs™\]ƒFbˆK`†IOq?haQjcSibRibRkbSkbSlcTlcTnf[‹ˆƒÃ¾ÎÉÃ’†xHM9<G6=>6V?7·PSØJIàEAÞDFÜDCÖE@ÑG=ÔA: >1‚?.ƒ;,‚:,9-~:/}:1y:1v7.s9.r8-p5-l3*i3)k7,’OI€ZO\UE@G74:,6>/<G65A-284:</Vg=tœU`ƒI\E`ƒI^GIj=icSicSicSicSkbSmdUmdUmdU„„‚ßãäúþÿÿýúîçËž¢NQ6K>6XSP¼©£ì¶¬ÚUXÓIGØBCØ@?ÓB=Õ@:©>4…=.€=,9-|8-}:1{;2s:1m7-l8-j8-l7/g5,a1'd5+~QKSG94?/5;168516/1=/7F307046)Q`?o•ZUuCWwE\|J\|J>V<gdSgdSgdSgdSkbSmdUmdUpgX†“Þéëöÿúùûí÷úéåßŃ~hQYL´°§ôææûúõüëáÕ‡sºK@ÉD?ÊC=ÎC>¤=8†<3=1~:/{8/{;2w81j8/i7.f7-d8-i70i81e6.qE<A>767/58-57,08+08+.9+2=-9B146(TbIWzPNk=Ol>ZwIVsE,6.heVheVheVheVhdXmd[khU€ƒÉÑÔúúüÿþúõøïõ÷êååÉ‹t˜ˆááßûûùþþüþþüúÿÿç·­ºTFÃI>ÀH8™C6A7;3z;2u9/s9.o6+j81i70h6/h70j92j@2jUBtq^39/17-17-/5+/4./4..3-.3-.:04@2BO;AO6Ic@Hb;YsNF_B&+/heVheVheVheVjdXmd[mlXŽ””ëóöþþþûûóäèÙèìÓâÝÇÓËÀìãäúúøþþüþþüþþüÿüýôÿýñêØ»xe½G=¨?<Š?<qE<q?8p?8n?7i=4q62l71f;2c?3bM<_O8fbIV`H39/17-17-/5+-2,-2,,1+,1+*4,-7,2=-5@/;J3HX=]mS<J9%++heVheVifWifWkeYmf\knY‹ÜãéþþþüüðíòÜâåÈáÙÎôèêÿøüþþüþþüþþüþþüûÿüÿûÿÿüýÿýêß·ž¦lX„E3uB/t?9q?8o>7m>6i>5cA5_J9L?,DH/XX<jmR=G/7=36<26<25;1382271/4.,1+*1*+2+.5.9@89F57D0N[I8D8+1-gdUifWifWifWldYmf\hpY}ŠàçíþþþþÿñêðÖÏͶãÛÙÿúÿþÿúþþüþþüþþüþþüþýÿûÿ÷ýÿ÷ÿýÿÿüÿÿûòèÝËÊ´¦¨xaH2^H1^J2XM9QL6Z\DJS8@J/NN2ieLJI5:@69?58>49?5:?99>88=75:4051,1--10/325G19K39K53D4-4,\hPfkUjhYnfYkg[ieZemXŒ›žäìïùüóìíÛØÓÀÅ·ªÝÒÖþøÿüýÿþþþÿþüÿýúÿýùÿüûÿýþÿüùøêáÿýÿýÿüþýÿÿþëØÖ½RK.UO/QP4PN5IO5EN1KQ/agC]`CTT<VU9OJ6CA49?58C59A69A6:B7=E:<F;:B54>5AU0Kk<:M:EX<?V:-4,[iPgoXlm]nhZkg[ieZemX…”—ÚãêìñëÖÕû©ÚÌÁøíñÿüÿüþýþþþÿþüÿýúÿúöþúùÿýþÿüùûíäÿýþýÿüþþÿÿûçÝÛÆTM1VO2PO1MK2LR8LU8^dBªsxˆaKM7SL:SN:IG:;A76A3;C8;C8;C8>F;>H=<D77A8H\7PpA/B/AT8E\@)0(
4 changes: 4 additions & 0 deletions jxl/resources/test/jpeg/libjpeg_testorig_scale_1_8.ppm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P6
29 19
255
0/-50,4/,4/,2-*3.+30+74/B:/J>0dC2¥A2âBBá=;®?,œ@+>-=-¬B5‚F;:5232./1.5//uKLkj¤SNdci_\VX-.0.-+,*+,*+,*+.,-0,+2.-<20A4.H94w9.¦A5³C7—>,Ž=,„;,„A8¤TK„‰sGK<0/+/.,0/-PMF‰›§~˜‹wwWV:45/:728302012,.10,32.?5,B8/>3/F21K4,€;4ˆ?6†>0<-‡C8M@xc‹ m†fFJ<1,)1+-NO?y™h¥vk†g@>29:4C@;GB<I?5D<1<71=9.L?/J<1@<1š>AŸ?1§?4¬@3Â::¾:8ÃG?•bMé?Hù>QïKcçLlÔJanE?„‚m–£±¹¬wˆuX[F43/==3OI9kllg‡IDJ>;6H@3C?<a?6¨=+º;,¹;/Å;0â4+å3'Ô8+ÛFB½=0ØDB÷ESþHpýRtÚ]kèÎÍÿóýþôóÎËÆ°·¯EA5=82OF7wy ­°ý––Üih”‚KQ¸WhÈA=¼=.Ö8/Ý82Ø:.ð50â3.Û7-ÚEAÅ;.ÃC6ÖKHøYmû_têhp¶˜þüÿýúõ÷ðÞëîçYM?SG9SJ9lj€’•ÜŽÏ½fˆå@DÍB?Ø=;Á=0Ô7.é3/Ô51×6,Ú6-Ò9+Û<6ÖA:»=.³=/èfdøksÛns£¨ŠéñäÌçÈñè×îçá[K;[K;^M=^PEqgŒºp“Û?@ä@A·=0Ú?:É=,ã5,õ,2ù'@ð@KÝ34×?:Ó:2½;-Ø=8×6.à`]þp|ÑRYx‹^zŸkˆ´u²¸œ£¢ª^M;^M;]P@kalxy§¹ˆ›éJNÔ<7¼C8Ó9-Þ>2ó6:ñ7:æ9?å@DÒKHÓECÖ?8é6:æ5/ò00×XQÿ\t£IKr•[xŸ`z¨`…¦oYi^[N>aTDlhqvº°°ÒÎÇ­ukçWVÑB:ÎB5à=8Þ6-×CAðV^ñ8>ôGMæ74á:4è66å4*ò21ÝMLøFhcG;bzJj“Ok”N\yCPj;A>5^Z[ccŸ€ÔŒÑ‹ƒ´n\RÎa^å`YÇ:(Ï9*Ñ;,È:0Ð@7í04ú)<ò09â96ç53Ø9&Ù9)öGX°;NEG1w\iŽHiŒJf„HhJ780JKCom”„€Ê€|¯sgkm^K¼LAß8/Ô8)¿:+Í?3É:,à93ì<?âC@â96è8;Þ95´;*º@3ÞK[PI6y‹YcxQgŒFiŒJl–Nv¦Z`WHbYJh_PkaWXUFXUB‹WLÅ=1Ø8*Ò9)ª;(Ê<0à::Ú65¯<*Õ;3è96Û<8·;39(˜H=–\QdsHBI7=D2mLo™OpžSW€Hi`QjaRkaWkbSg^MHI9kJ9ÛONÎ@6Õ@9ÈA;ÝB>²@6ˆ?0ˆ<.’:,¬<0š:,9+v8+ŒNAXPTb>CK4;B0n‘MqŸTdKTyFjaRjaRkbSlcTumb›—ŒjZJnC<¦GC×FCÞDDÙD>±?5‚<0‚:,~:/y9/u9.p6+l6*ŒSL`XE?M4:A/6<0g„Jd‡Ma„JIj=gdSgdSlcTneV²·ºûýøÚØ¿[ZH¯¤¢ï½¶ÎWOÐB>¼?9‚<0}9.z:1m9.h8,i70g80RD;4:.28.2?.39-ZtMSp@[xH1B2heVheVkeYy{pëïòõöîèêÔµ¶¨õõóþþüöîëËq°D:€?9u<5o:2l71f:1eE6gbN28.06,.3--2,/90;G3EZ;NbG%*-heVifWlfZtqîòõô÷æÝÚÉý÷÷þþüþþüþþþÿþùáÆ»«†t{UHeD5]F6TN8JN3VXB8>47=36;5271-2.1628G2=K:+2+akSliZjfZw‚zéïï×ÔÃÜÑÍýüÿþþþÿüùþüýýôïþþþÿýö˜’xTO2LN6OV5r~VRP9KH79A4:B7<D9=E8=L5AZ:CW<*1)
Binary file added jxl/resources/test/jpeg/progressive_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/quality100_16x16.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/quality50_16x16.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/restart_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/rgb_64x64.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/rgb_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/subsampled_420_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/subsampled_422_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/subsampled_444_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/testimgari.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/testorig.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/testorig12.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added jxl/resources/test/jpeg/with_exif_8x8.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions jxl/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,8 @@ pub enum Error {
TooManyExtraChannels(usize),
#[error("Invalid JPEG reconstruction data in jbrd box")]
InvalidJpegReconstructionData,
#[error("Invalid JPEG data")]
InvalidJpegData,
}

pub type Result<T, E = Error> = std::result::Result<T, E>;
55 changes: 53 additions & 2 deletions jxl/src/frame/modular/transforms/rct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

use jxl_simd::{I32SimdVec, ScalarDescriptor, SimdDescriptor, shr, simd_function};
use jxl_simd::{simd_function, shr, I32SimdVec, SimdDescriptor};

use crate::{
frame::modular::{
Expand Down Expand Up @@ -74,6 +74,50 @@ fn rct_row_impl<D: SimdDescriptor, const OP: u32>(d: D, rgb: [&mut [i32]; 3]) ->
]
}

#[inline(always)]
fn rct_impl_scalar<const OP: u32>(v0: i32, v1: i32, v2: i32) -> (i32, i32, i32) {
const { assert!(OP <= 6) };

match OP {
0 => (v0, v1, v2),
1 => (v0, v1, v2.wrapping_add(v0)),
2 => (v0, v1.wrapping_add(v0), v2),
3 => (v0, v1.wrapping_add(v0), v2.wrapping_add(v0)),
4 => {
let avg = v0.wrapping_add(v2) >> 1;
(v0, v1.wrapping_add(avg), v2)
}
5 => {
let v2 = v0.wrapping_add(v2);
let avg = v0.wrapping_add(v2) >> 1;
(v0, v1.wrapping_add(avg), v2)
}
6 => {
let (y, co, cg) = (v0, v1, v2);
let y = y.wrapping_sub(cg >> 1);
let g = cg.wrapping_add(y);
let y = y.wrapping_sub(co >> 1);
let r = y.wrapping_add(co);
(r, g, y)
}
_ => unreachable!(),
}
}

#[inline(always)]
fn rct_row_impl_scalar<const OP: u32>(rgb: [&mut [i32]; 3]) {
const { assert!(OP <= 6) };

let len = rgb[0].len().min(rgb[1].len()).min(rgb[2].len());
for idx in 0..len {
let (v0, v1, v2) = (rgb[0][idx], rgb[1][idx], rgb[2][idx]);
let (w0, w1, w2) = rct_impl_scalar::<OP>(v0, v1, v2);
rgb[0][idx] = w0;
rgb[1][idx] = w1;
rgb[2][idx] = w2;
}
}

#[inline(always)]
fn rct_loop_impl<D: SimdDescriptor, const OP: u32>(
d: D,
Expand All @@ -84,6 +128,13 @@ fn rct_loop_impl<D: SimdDescriptor, const OP: u32>(
const { assert!(OP <= 6) };

let h = r.size().1;
if D::I32Vec::LEN == 1 {
for pos_y in 0..h {
let rgb = [&mut *r, &mut *g, &mut *b].map(|x| x.row_mut(pos_y));
rct_row_impl_scalar::<OP>(rgb);
}
return;
}

for pos_y in 0..h {
let mut rgb = [&mut *r, &mut *g, &mut *b].map(|x| x.row_mut(pos_y));
Expand All @@ -96,7 +147,7 @@ fn rct_loop_impl<D: SimdDescriptor, const OP: u32>(
rgb = rct_row_impl::<_, OP>(d.maybe_downgrade_128bit(), rgb);
}
if D::I32Vec::LEN > 1 {
rct_row_impl::<_, OP>(ScalarDescriptor::new().unwrap(), rgb);
rct_row_impl_scalar::<OP>(rgb);
}
}
}
Expand Down
Loading
Loading