From 43c80793acf9ee7b9b6d462c3cd2d7a8dbe92c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Novomesk=C3=BD?= Date: Thu, 7 Dec 2023 12:58:14 +0100 Subject: [PATCH] HEIF plug-in extended to support HEJ2 format HEJ2 is JPEG 2000 codec encapsulated in HEIF container. Only HEJ2 reading is implemented. --- autotests/CMakeLists.txt | 6 ++ autotests/read/hej2/rgb_kcolorchooser.hej2 | Bin 0 -> 29071 bytes autotests/read/hej2/rgb_kcolorchooser.png | Bin 0 -> 27891 bytes autotests/read/hej2/rgba_kolourpaint.hej2 | Bin 0 -> 32492 bytes autotests/read/hej2/rgba_kolourpaint.png | Bin 0 -> 16330 bytes src/imageformats/heif.cpp | 102 +++++++++++++++++---- src/imageformats/heif.json | 4 +- src/imageformats/heif_p.h | 8 +- 8 files changed, 99 insertions(+), 21 deletions(-) create mode 100644 autotests/read/hej2/rgb_kcolorchooser.hej2 create mode 100644 autotests/read/hej2/rgb_kcolorchooser.png create mode 100644 autotests/read/hej2/rgba_kolourpaint.hej2 create mode 100644 autotests/read/hej2/rgba_kolourpaint.png diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index ff7bc20..7ff8d32 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -99,6 +99,12 @@ if (LibHeif_FOUND) kimageformats_write_tests(FUZZ 1 heif-nodatacheck-lossless ) + + if (LibHeif_VERSION VERSION_GREATER_EQUAL "1.17.0") + kimageformats_read_tests(FUZZ 1 + hej2 + ) + endif() endif() if (LibJXL_FOUND AND LibJXLThreads_FOUND) diff --git a/autotests/read/hej2/rgb_kcolorchooser.hej2 b/autotests/read/hej2/rgb_kcolorchooser.hej2 new file mode 100644 index 0000000000000000000000000000000000000000..c864c4aa2e3768cb7cc1851159951ad621479261 GIT binary patch literal 29071 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

-fke^9$O;L@A9p~5G z;0^T}6t?wV{HV7@a zcsrcpKS>h_?GlxyEK!_|^5egdW4ja?cP0?I7WsfJ3X){Avv*)d92&Y;VfaC7uKoA; zw(kf(92kBz5Jd~}`c@kQcyoN^KO82msW~0giUe;Z@pLEf3dS&qW>Y}*bSTKS;Dr6J zz|I}tE=Q7tHK{WfC}5#Wm29`QYzllwsu# z(2+_h8d&G#wb;hSwTATVK~nhr57o40?TKg0#kC>a=^O)h!jz9Wr+px4txs8?Cc^br zU4cy3Z1H8jHbdV~$QbFSb14(Z$m&LQg#SQh0gN9Wl~>#;dP>0TjaVVC&p-KHGq_|t zUz%7y`654axNY#Je2YWx&hO<)H9OEasFE@rWb%7wPtjV+ zGlvy|fd*y4)Fm)-%h4Hw%D!vGv~m4VpKGeaS_Y8(4&7CV2eaUAyA`f7iugqf?~MOT z{_i-wdwl#eAvLa3=u#c*Yh(x=ctgF@s-p73-gM+|JbfY{ZfknmhBRYuTYPhiNmQNFOWn=-Y+GX)!Xw^)4+J+Jgqq&? zmZEo@uVwZBGDYY6ZQ23v>XjfC*p0b>3d}dO&s!QTP<~YZP&bV zY-w)jaM!z~&@BQq6iWq`0jgoMnkj(t43_8Ue1+Xdn)U z;TUj?Zb&+Z8$_#%S=v_+uSW2?!j8+b;?$8S2nMqK&Wx1Z9%Rf4_~YWRFLu<8HiY&p zw5|~i+~Jty2rQVNNud#TfIPqcmx^}i&vLiyu)~Y%MjqIR5bwS;XZS?&jaL=&a;7J~ zE;xHvCCVZyk`BYj_)0c>a{yjZwU_Y1M7jzsxZ7A&K3h?-OK@RpQtXBX=P$_VKu-^u zL1{q*R9nUC9v}l%PAS?zPn`B>;mo)z9!r`djVu*BH>;2=y%irl{TS!RDttYL-X=SS zJ8PWX@q!vJ5sv-?5*1s>xWlkNsMSxpI5%rgKAPP5pDN?~Lg;cvM$qsKDiA# zb-o(#v)3{|^i{Y#v_*8lq#&5zxv$^XIF#wuX+DLs&7lmKY%+T;1UvBu{fD;&pjB7% z+)KdhhjX(pju^KqTP(T(@g+GY+PWlO{u%R)PgZfunzX=%UjvF0@vYAJOg|{5WQl9L z_69@|mp%({hLuWYsfW>dA3;FUm7?0&*INRoh$?`kS6=1=4FqtGm=|wgF=%ABR^`04 z1B027#SLy~`G&^Sgv+PDg_u}qqLRzZKh1nQMvkrP%!CdHy`l@iV=0-(ZV)_b;;;E! zG-}jgZh%JVDbbo)g0Ly>Yqk~_1O*)>oF2Mr>M4k_nNHz;32Uo<36PNw zRzH&%TOtA9J`@^=-~IHuu|pKnC1VIgk|0m+YzBusc*`Cb8k|pE-2x%BgC|}#50`+L}_5K!Y?jCehk)~!R)x+=bEPYia*(aL@sfiL0-;?zk^g{QVI zHe6_(=+UOTXni2S)L@saKTsn`dnA4XcBwk{>$C&jyx%L`T^YAChYPE{J*wE-yyv3& z#ND^+Grm!;tyM7+Oz)E_YDNT@TLbsSVl~LcTAC`Idod!;Z#ig7KpW>|u)#ZLqf~$Y E*^;}^ApigX literal 0 HcmV?d00001 diff --git a/autotests/read/hej2/rgb_kcolorchooser.png b/autotests/read/hej2/rgb_kcolorchooser.png new file mode 100644 index 0000000000000000000000000000000000000000..9f065c5db110d74af5451f5207c8438b1bbeda31 GIT binary patch literal 27891 zcmbq)Wm8?>5AHb}+}-8i?(XgshoZ$Deo!dx?ykk%o#O6p#oda#J6!&E=6-^kH+!#{ zHM25F_R7waC*jJ9(n#?5@Bjb+NmfQe6#xK!y#fKS5MPfuRAJVyMUa)axU#IcIM~6_ z-rUO83;>{s_l_5o=@%g!G*By2r9;L>`#GYVb(T*SQ-l?1nD+-u$C;(|4k4X`f|e;J zz^1o1cCb7!vY{HeIsp6x+&$SXJR+m~V5a>OcD>y~a(N+mu?ZBb7*cOwhAvGvGfnu( zYM_M$s(~f-14~57Ow6mT3=#?qF9~{ibw=JWTsry2h!$D0^-!Y^r~RijKrrBxkuv3; z!!tpbAm*hgU^W94PSVQM{x;NlR@=kgFU6DyM#hNTCr&mdv7Aj2A;_udlfJ8@kyN|{&zFBJnd zpC{({w(Wb>uG_%Deohs=c@ql*U#PfbAD;E_FoR*!(vPgfUJb5y4&hmr)#F!cW0`Xs>bO~EdK8>;fiCx zBoK{11wvH#5DTuYZ6Juf|5hO5=eE0m&-C;V8sgBhNg|T40M!^(AQBlYMc%wz?(#|L zR9;(KMa6}nMGdF#nOk{Vu->DltFsfgWW~v1XUTudHs_69_f_`s<@wDXr^C)aFBy-j zvVnJ+_VFQ~xe=l^XYB@Yy7NDW6*rWq^d3}kH0`>HWbQ`gA2yk%l{7+a| zcvxnH1q9YDIXvvmrvV2qKeieyE~m2iT`xB~Z5}V|)|zU39s6I92-+R5*%fs?hmK3K zJWgoGQyB^H@U*+Uo<~L!vNe90sVHHanOAK5XTR0uJy$$Qz-{O86fb?*c?m@0b@8d7 zVd}c#Jww>$x%73X&|H3&l zqHVGt*AbXIwxi~h4BA~LzjVLs|1zL!O8LcR=WF==>1D_1Ma}ywqlU)heQpy?weJUK zs=mjuwnbK}^}gHz@zgB4-{%v0{A33AR{KR4v+ur5Mw6|esKMYWXT^`3T^xOnQOXL< zsuOLoX+U;-_g1~xc<1TG>)-EPZ9nHy5)YiSx?Jw%4Q_VjnY!He$C4%HUvoX7S)8L| zW4AtgKsldpIG3%L{)ta!LWgfo1}_OY9v8{qCo;He9`ha%0p)E*dqbCAhl|s1%HsI_o(cg-{aM1OsDDBztpWKge84XI|BoQX@FvrM#{ea*QO5?AGcGrHBZlXtHp?Y z`K_l&d$$kgCC-e=Y+xp$yu?MP>&C0lRWA}XS|#t=>0P7E$8F8~*q2IPf4`$BI)auv z+;63YAFl0vADcF_vwPc4#^^WiiVXzb3#B3ybwId8MDJ&lpEuJvFShn1t}UBaFH0YH zO5Kh-0Z@V<9wXyy&x_Va{mbW!4bO-BCj0M;`N0T2?~I?%Z8kN6&t&5?IwR`7x=cTvRnva{C{qZkP;G{M_5HzpfEM308y0mYsRW|&2d42WSTlzeW z=3Y09I>zfE)Ome4e+_-~-cGUKT3ss`Hq>{$zx}9beoKvykIx29ggb9}KYp$lbU9si zy?0i*Pb~I9-EKXseZEJ~GhO2KT-l)m?RD6`xbeB2xpq1U z<+7b5#rk&|;nmq8k5jzp7>7nQEJ+3qj4lEPp+QE94vpETOtY-uz_}>Bw{AVYi%j?&{+?7_t9l$l}wyP@k*M?suifbCN6!{;s-QTphuQ5{B7e zdFqK=4N}cgGwc8W7`DMLStBVaPr{F`KcK^iC6^A;3_>Ok9zr}1f`&CruD<<62j-{9 zP&4v{zWr+Gfeg>x=f}sT{;%2KuT!w)C4@eMnZH7-^O8q6*0|RGDhjRghc+@(HU&Ve zc0dl53JBL*?|M5{36_TpK*dxhL&dxhf~O*N#!*?S8&nQP_p>Bc{?vLzipJU}X4j0d z!(Dw1qm6Z9@7MiY)BSOiki)kF4@I2@{G(Ha;&ar`?Ryb9e2&L~&HP_>`%p|JK8|YG zF^=)iwRBk#><yLXaKAzE+B~XUpG)x6bvX=CWU}K3!qF@6xku3 zG953URX)l-_~-9v^Z5Xiu{Vr_=r&pLEK@2_sot_qO z4-*ie^&Ub^>3l)r7my^GK+f-{peO+;{e>XY61QCz=`GI+1PQ z(g(nbX>@sCCfviX{NymQ4-hLn^AdmqgU$Y;9#tURZSeNMTh?M@wfOp*0_4D)_~*TN z;k5x;+JeOrs4l*+<*2)(eZ-dbCtI~sghDPbeShOAeXlL-4H`V0rvYuX+3U4CcHNJ{ zv3T2a7AcuZI61Dhz&O?Q8Nknj4qB>$;oLvO!-4Mvnt-j~xbD6dbJ+4JWn z&KcPNM=QVfuz>abjjZ=j=s46|4KqZ<0cz;l$`eIsRTkY;ZVc^wZ*!&V0iwxS!QlhD zOkw*cBHs^ci){C=Y{#dgRB7rNdh08+}w_sKhMq&Gre7=0p=|}SAirS51+TM z!+z_Fv6A1%iY!Rz7(~+;;wfqB5RQ@w>86R3AVrYNLs99t6oTa~yp2)ef1n#F8$6I9 z&Bn8pK}aRZ$Og;ijgfY_0?|qLL1!PO9{hKnoe6y{B|C~J_Eu-n5@?7MD+vjdewI;> z>C*P}QWo#Z=a-kB!#SU$&xct{UwQJ%t)S8!>%fu>fV4ZRiB58#&A3=t(ek} z7t_Wc^{$=rhu)1n~k%xvHr z%;Hcq!T(iaVuMB6LKp^zA}vLr9NyPO_2uLdKryH1IGyQ~+=zpP~0@yY%1dU>|l;F?lxkn1LT8gWQS zh-o}NrO|KaO+pMQpc2l$3DiSIMFG0~gTbDfdxYx`*zO@AxoGHF2@JH1>a$lHKn)g5 zKc+`yRD3`OI^pXBWT@K?HOj=lr?aqDr6|kcen5KY1Kf*>;QG)Nf zA-ZpS++Cy9b+&Q&7HKw~GFkS{)tp9PVq)TZ_aL0rxzR1A=sx#x%FM?Ddy}UKiwK*$ zjThgPxpqMO8`B`}o>=@{6c9&;tIPtR?jpPpceqw-(QR>SgAfDuP<9eS+{aQzu%8>~Jp{ax7bm{`VM?z$S9GN6^g) ztev;@>t96T$AZ*q6xg@Z0Q0j5{O%o8-udb5DGwcggzS%pi9{)2Azv6niD@g_87%T{ z1I~qh}8OjRkj4BJ}dazjePdS+Z9UA7f{q?!ueE+oLV(JpX=`i|CwjjQ69f^`x5(kSKfrdu-j}F_jupjge+QK2Y zNg;8S`ypL)nd??)vLXJ#qFtvSSCTq+So-ePdJ;ZI;jkK^+LuGN%xu)UergvnywPkn z)bT@h?8J2oDj!Gjw_}29DRK7W9k=qW&*fH|L5UkMx!m?Ed_UdZZpN82$W7o6#^A1= znZ0)AxIa&A^`6hH?=xKW+x|?7oz3>E+iIwG&yBRZ;Lx=nfk-2y+A?7D`&#peb2!k$ zgs;6uxN2P=XxCK5&Tn0*`bWnCj9xtaOsQiaW&##2&#t5~<~VMzyF|`}tbwBMMUaIj zv6!wxe#=D{DWljN3e%mk(|W7~IU|!fue+(;H_1O>lNM3F?!)fq_KVwBxV!x8$REwG zcg2ed^3BbCAu&7A&A^D+ZiF;6&@Zs-Sb7X(NP=n3NJCwz)z71p14PH>nM!D!w6jZ`r%Qlklsjzt* z!l&Jm5NVH!YC)uu)uAIe4XUd+4ZQtx#yxS&7(eo_>-HKp_%`84E+bhZ2p_13`@DkwSs}5B1Iyt!b;pA*{?YrjF>v!K7Y?WFj zEjmKZM%!*SNs2dV*CVXcfh3_o*&K&?M?c>n{GKX)+0UgWcl;k)#{?$FkOk|hgS&Ou zY?26rhF>}bNF%fxqGlRcF;lQG35$QG@3(YeK7+-Uq)9i4zN=>O%9H9V3cUNCAS-x}OV{QN0(7nuV zQ#8$M4Om?Lyhph_{qN}WEWF5m)xCJsuSeh#k!!m_SFy#S(rf?d8{PMxZ$F%DH!cOG zCZTzXfScGno~g8pb=xYQe%tQoOpwzJhiNfSN8dopN_7WVM#`!XKWjY#3jbtCViXtt zZX6IVSTs6#A{k4cf>b5rq)?ztyZd|idtpNWMhYdW^Akjpv|_q9$qRZKV*IMvs{T81 z%N7>8q32($*9p%UY1M^`cRFCgAln5KQN{>T!)n{|z=-`Nyiu_17!1{5E%(Pq3w|Ym za$&c2^F7$tP%TZwS`3&Cp+=LlU<$@*fn2mx+fprn*T81ZKo9UVL$ZUq>gZy?FjPg7 zme{_xlKJa>upPsTZ2O-}l@Ma*nR_&6p#Ixa*TM)mzOpkn*F_hm&_>y98ne<`3os-so>aF(nqv>`kGUmg6k9U9{e{#A*z-Lz)^`NG}3QB}dn@VeD@AJr#LIfWCc zQlZW}A1n^WeCUMsgdKn>?4q|PmZNy+VI83F)GN*m&17TfA1ezuGtgNEPQ+~)!jb!&DD$42X?wsr_Jbuxu2oA z3|OUPNb9eDVp42g5Kode5@3|5mv`*^he{@FI!oCcAbuS=O;kv6DlW5G<#b#&;FQ4IL+r5E zs}R;=mcoz2;GihndSmExVRt4heH&W$M}zLi9{;+;MS#%lN=Ey_p=9pXy2qw~O)&2b zSAP>ZM4eXdKU@t^OywSOkdC&TQ+Kv4xFlpuN zamR>odzwOUr>R8R&TfR7!xRd5xsN*}aiq3V!pV9TKXZ5nhj!)7UoL?!BMSeMBhPIL zRo9?XGn|)IG>oCY$?Ez_e$mAy^lYX1)8O;oiMj-6yZYzZ*Y}2fqivP>T)0b z5=F-3$N#I;AW1AmhtCgFapVBOwFaY(u=DAaCZ=ENw_LLLxNAY?NlW7y~@ouXN^)ya;B4wp@%5? zF{VSW@IrOJXxd#+MhS5^Qej!l)FI0Y`5d7ml1@R43`d7_6;txzge})P#u_THELf;Q zR)iX$ur;DD+6h62%Ht$AxUH0}sK2WGdG&#kWagfL+e75)^*I{75q`4SaegORgoQ#% z=bpx78kexRkYt#b9HTw8U%UMAriJf83&`S}A@koJ4Ymh3?)#4mczZdM!7g2%Xf4XBj#4E!_ z-da-FjJTqf(3Rmc51z^cC69@^OJd|q;aLYO$;WVb(FEmdkumWNT&CXU+A+GiKLbhl zpwDj`{sU~apErHeZE^wKA97!69jr>Eu}wwAio6|SDkmynN>g&V<5lHq%o~P~^gxm2 zr2z)mMT=JfOX3A_+@5qQ*%<7AWQpNye1g#3Kk__k;!)#zvT9KmmLlhdP8UJw&Yykm zW+*lub-a7EDvs9Y@uL`HZC8#zc93r1n9y=MVd z1Pm9*_#=7#s5>jDq}$iGlU`YA9Vblr6a3%z2fIt6ZN~s!y!Wv!-5MbvHBUXAfXQ% zB=n*5xu)YOhTj815qPrXHr@QuY_tD1W}X}IWC343e|B>M=vd&ULr`Jz%L8;3f$RAp@}z6Y`8r5m#*eno0P9 z_vb%`e{g~3M6qKUlBI8`aHB=`{erZVD8G~9ipgO)#Vl=IO%D}F6LYwn zAx72_Ck4Vj;Bj>}6GD}}kbg%CB2Bc&Tp&CPn7=3yzFk>KbjW4|x!sIX+jmwW(7t8l z=&ZzPkuD(m%yRI^bKXAgVt_&stRPJ}#i=)MIPnDAuaM}%H7rWAwn z!MLp#%n>$wMlH#-U^nRp^spM z?R|gU)gGLE0E8|M7shQ`Ce|@&!l@&iwxUxEKuEw>6{3!8 z5eN8;nZv#~jFg-ra$fP?)n~K;!hLS$xMO2ub6B7qE;~>8>^%f5yf#l{T}AkN<9WCg zjV<`Z;0cULN4=^(ljRXndzDGH_`Rga&i=E7Q}2Z~ZXFGka`z#em~Nm$umAlgM3rAa zdq;sbz9GA&^yxqcJX*n`yuC>S)LUi|VD@{-j-fWv?Vr5a>-h_J%;2?tIp{+fV!Uoy zM=RJB4u*nJhJJlI29ly2h;-$a^^3n1qhzWHw}S!25Pt)27m;&Tk4afrdEK|(8^mJi z&G+&R-u|ZYPwV&?9ikr!fi#J{C}HW4*Gxs!M`&5%+DP8BRllc`!TJY>ON7fxCWkYI zNd~RxMx;5B@crIM|2g<>v2Y^DiBXDGvi!3`$kX0*Wem!e9jLnz z6(hQ;kAPi{hgN~JZZfQ_z<>e6`uio#s({Gk(M)qW>cIzC&ertv{!_pW$9o_YW2^bq zb_t(`&gc4Jm&3ircV~U|&R6JK_uGTZEpPi!99}zP!*3Op;jfTqdbG8~vX}$l*=5dB z#N^zT0y%%qLuI?~iDW89#=v;kJ`pB^&U!PmB;~k(4OUV}O=yXvbzEFB7zaM3i;k{O zwQ7h{S3)ff(L}y3ySFmC{l)i%P0+%}&(~jqKSAF8;vj^O5Nu|h7US9cA}9hJ6U(y> ziS@EF%tLfzXboj!$JJa3y1d~8TzJtf3Y`2r7{B;5VnkI_-d_Qp@v>p0zijEu%u%%| z39E)Vu>-?I%3%&`h;=@$o~ERzb$6#c7X|O<)#$%hXP!bkOm{xI_{1BmHztw#Q*2xH z;r|6NBNIccO+e>LAYS((lvz{Y2B9%3i<@dJM@K4~iO6Vc%j8+xYTyB&Pgqc#Lk3W> zpevezKrPuFd|0^Mmj(T7#U7!RPlwZMr2U~z7Xu$+p-z+x+gPQh;YZ@-CigXQ2@V1K zosoKrDlO;Lo(^}WG$U1iHu7U<$yJObZ74bax#6;TaIw8ALPb|PbU@Gw(Ek_aFUnm3 zwun9SH&L7g4M9y2m3wZazUzm*?9>GKuy93p(YYAKpATZ;UKp7io)b`r=&G9NWSWd$Vd;e~Gf=+! znJcEZqWK#vHZWGc%N-VnkMJsTIvctg`(JaGqlo(b_VP!d$t$zDf!5VH_y^AH4!gV$tVTp5u>ahs#EWUQM9T{D@W0| z=|it>`T`Lki6QLlP43I<#oibSimt0c=I*m1W}|~v8$bq^osZXhBGHe3obA#)gF>wl z0k1(}xgU(K^MDpFkwByYuO5W?@@WhnVVN{_BOp0b0VTGQI#ozt%3@qI|FC3CXb4X> zo|79J(*?6iRfUg(^yx>SN6YEq$?`|1$?K!g^GM({-+NTDMV1*p($7#;p}Hs&5wUbg zm86VB9rfSKnlmuS6s-yfe-C-SQo?paQ^l@@SUH{ zZ+J<#)ogr`(?)YzAJpQiUveF*(sq*@4mImlsSJj2zbsN@;`--Ru67H=!3^rhmDmlB zrDX*N;MPKc`zFxkTP14G$2h_f!T-d4NbpP5h_6Ef>1GA@O|~j8vSt=z5gqxoHQF1G z<4OMWya}Jne$O;3sRByF$*6LpK%X$E~|wh!cSoc7U0s~= zy}8A6rHQ@&^wTpiW{j_4S+8$9482&OaqE;3#u?qoJQ?GwA+c&_!tVka^A2sb#2Dy7*A3X0 zFicqVWnRyqVj2iSFJ5motsuh>kh`{ev z_xTZR?_8%;Zv$Ox)IU^z686?vFIX!>7pm}zeP0$ocsBsfVW$?=(qtpJVhn(V2rsPj zq~8bmgE49TlQmG`ssAJ$(iHAVdAxO{E(^$c6Z+m&*%<46T3tt!(K<^ej5B91RI>@% zqQNkTF?qx2k-#gNbdpcxBZIRr-%jsd?q(1Fi&JD)FRrWVNJ#8lt0mO&r$9V+;Xl`S zq76=voALV#a?MqKCxUUL;SAgar};gssLDGHY+YOfaFi-h%9MOO{5>4a$+(7m0Iww4 zo7|t8SE$!hXvkGpt3388i`;h>54hY;a{Uf6 zzMdR)lG4@we0fD7iwIZ%gBJPkKTm>3g^A9QL)bcH+E|}w75-VNvrotRxDUjrn_SrR zf`+JR1dOD2k~8BJXl@zI|?i<@4Is^N)7@DN@jK zliiwW#X>mv%J~(i-dxm7NI<6Hs5=H?A5A5uT?Kz6`*Ehw1&z6?KxLeK^)L_xuve3zS6FM^av)sHt27@t&?_LbZ3do!Z3Nd|GX{- zpvH_COTu>kId?{npiA14@i8pVo{3z3X7Zp12cN(JqMC7QOQ`AI&{J$g+YxLdO&nx$ z!)kF^V)Johp9`i7hPoYDrg0zF!WUKmBcHfd@Bd9J->zq&Or$AGw1}s?<@a*lz|Wt} zlDql>bR4Kr3=Ah(=ukuRYw&|r0QnS@xf0L=**X<<{fol_>BC}44aKAKhXZX&Q6U1c z>6m`blb{%^F=bMgD4L*h-xJSWH%$-zu`uV`$EK|J`o{Bqb;LybZQ1wq7ziS)zqC`U zumnx{75%;&XHHo1jPkv66nge%A8W6Sgxca--k zLP7a?&vkNG3s%;7XuQ~BCV&Kh@pB@`zm3eVPO`uZpEBaF zQUx`$e82lB@BFM*r}cOMXBJj>h4mNN*J&5>$gAh^gsaahe>>{*p3$w(#I{D6ikn#< zc%7xV9g^1bdyj$V=44CJJLrZOuilx5i4sO+K{?JF!s#AXUABD zQP&cg1t#y-%^~EL_iMYFTf^`W1(WP+l zZ@BThI!{HM1^~}CJKMifel;D1i^Y-b=y%2uxOh31#6FWkO;W7Z5KJa7HIqL;GGTH3 z#I7K2XgH#~S!m@1pGJG?BZ;j~K<#bstl9Jr5hzh*MfFKiDrTo$sn4Mg@ZnOtIt1Hp zxDlmVA8bc@)};i}H`xHaD-Ly2j-$R|0+TL1q=|9lx8K3Uo(Ds4wG9OrhE^IJAeGjK zCMAPB75*ie(aFHvXqFG@(n?%qx_M>W;Cr@A(PQxG(>UJ|*0%2JLzH89qOk^s%QOZ| zYBo1YdAYjc@{r%5P|3kg#}&GD8_O5+sGXz%k&Q}%&H<)aVB%b45g)f6iO|n4`puw< z5GaoD5JQsYjz8mmG)n|>vtDabB=(ugD^6U6Q_y$gIT|sKLxxKiQ&)0`0~k8YSvlpF z!>05Yk`qn=Z{X=i#_WS;MD4pbnnN9KDrbj>QnLBa3~Ck}(Kn%0D@@ZN`i8J2$EPJ= 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 LUBP#D_KpA9D;2I% literal 0 HcmV?d00001 diff --git a/autotests/read/hej2/rgba_kolourpaint.png b/autotests/read/hej2/rgba_kolourpaint.png new file mode 100644 index 0000000000000000000000000000000000000000..57b9a57cbba19985b729299633cd08c37c11d2f4 GIT binary patch literal 16330 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 V)`=otznswr6yK=HmdTg~{~wH=sc`@R literal 0 HcmV?d00001 diff --git a/src/imageformats/heif.cpp b/src/imageformats/heif.cpp index bc48381..a32aa7e 100644 --- a/src/imageformats/heif.cpp +++ b/src/imageformats/heif.cpp @@ -22,6 +22,7 @@ size_t HEIFHandler::m_initialized_count = 0; bool HEIFHandler::m_plugins_queried = false; bool HEIFHandler::m_heif_decoder_available = false; bool HEIFHandler::m_heif_encoder_available = false; +bool HEIFHandler::m_hej2_decoder_available = false; extern "C" { static struct heif_error heifhandler_write_callback(struct heif_context * /* ctx */, const void *data, size_t size, void *userdata) @@ -59,12 +60,25 @@ HEIFHandler::HEIFHandler() bool HEIFHandler::canRead() const { - if (m_parseState == ParseHeicNotParsed && !canRead(device())) { + if (m_parseState == ParseHeicNotParsed) { + QIODevice *dev = device(); + if (dev) { + const QByteArray header = dev->peek(28); + + if (HEIFHandler::isSupportedBMFFType(header)) { + setFormat("heif"); + return true; + } + + if (HEIFHandler::isSupportedHEJ2(header)) { + setFormat("hej2"); + return true; + } + } return false; } if (m_parseState != ParseHeicError) { - setFormat("heif"); return true; } return false; @@ -300,17 +314,6 @@ bool HEIFHandler::write_helper(const QImage &image) return true; } -bool HEIFHandler::canRead(QIODevice *device) -{ - if (!device) { - qWarning("HEIFHandler::canRead() called with no device"); - return false; - } - - const QByteArray header = device->peek(28); - return HEIFHandler::isSupportedBMFFType(header); -} - bool HEIFHandler::isSupportedBMFFType(const QByteArray &header) { if (header.size() < 28) { @@ -350,6 +353,22 @@ bool HEIFHandler::isSupportedBMFFType(const QByteArray &header) return false; } +bool HEIFHandler::isSupportedHEJ2(const QByteArray &header) +{ + if (header.size() < 28) { + return false; + } + + const char *buffer = header.constData(); + if (qstrncmp(buffer + 4, "ftyp", 4) == 0) { + if (qstrncmp(buffer + 8, "j2ki", 4) == 0) { + return true; + } + } + + return false; +} + QVariant HEIFHandler::option(ImageOption option) const { if (option == Quality) { @@ -425,7 +444,7 @@ bool HEIFHandler::ensureDecoder() } const QByteArray buffer = device()->readAll(); - if (!HEIFHandler::isSupportedBMFFType(buffer)) { + if (!HEIFHandler::isSupportedBMFFType(buffer) && !HEIFHandler::isSupportedHEJ2(buffer)) { m_parseState = ParseHeicError; return false; } @@ -814,6 +833,9 @@ bool HEIFHandler::isHeifDecoderAvailable() } #endif +#if LIBHEIF_HAVE_VERSION(1, 13, 0) + m_hej2_decoder_available = heif_have_decoder_for_format(heif_compression_JPEG2000); +#endif m_heif_encoder_available = heif_have_encoder_for_format(heif_compression_HEVC); m_heif_decoder_available = heif_have_decoder_for_format(heif_compression_HEVC); m_plugins_queried = true; @@ -839,6 +861,9 @@ bool HEIFHandler::isHeifEncoderAvailable() } #endif +#if LIBHEIF_HAVE_VERSION(1, 13, 0) + m_hej2_decoder_available = heif_have_decoder_for_format(heif_compression_JPEG2000); +#endif m_heif_decoder_available = heif_have_decoder_for_format(heif_compression_HEVC); m_heif_encoder_available = heif_have_encoder_for_format(heif_compression_HEVC); m_plugins_queried = true; @@ -853,6 +878,34 @@ bool HEIFHandler::isHeifEncoderAvailable() return m_heif_encoder_available; } +bool HEIFHandler::isHej2DecoderAvailable() +{ + QMutexLocker locker(&getHEIFHandlerMutex()); + + if (!m_plugins_queried) { +#if LIBHEIF_HAVE_VERSION(1, 13, 0) + if (m_initialized_count == 0) { + heif_init(nullptr); + } +#endif + + m_heif_encoder_available = heif_have_encoder_for_format(heif_compression_HEVC); + m_heif_decoder_available = heif_have_decoder_for_format(heif_compression_HEVC); +#if LIBHEIF_HAVE_VERSION(1, 13, 0) + m_hej2_decoder_available = heif_have_decoder_for_format(heif_compression_JPEG2000); +#endif + m_plugins_queried = true; + +#if LIBHEIF_HAVE_VERSION(1, 13, 0) + if (m_initialized_count == 0) { + heif_deinit(); + } +#endif + } + + return m_hej2_decoder_available; +} + void HEIFHandler::startHeifLib() { #if LIBHEIF_HAVE_VERSION(1, 13, 0) @@ -901,6 +954,15 @@ QImageIOPlugin::Capabilities HEIFPlugin::capabilities(QIODevice *device, const Q } return format_cap; } + + if (format == "hej2") { + Capabilities format_cap; + if (HEIFHandler::isHej2DecoderAvailable()) { + format_cap |= CanRead; + } + return format_cap; + } + if (!format.isEmpty()) { return {}; } @@ -909,8 +971,16 @@ QImageIOPlugin::Capabilities HEIFPlugin::capabilities(QIODevice *device, const Q } Capabilities cap; - if (device->isReadable() && HEIFHandler::canRead(device) && HEIFHandler::isHeifDecoderAvailable()) { - cap |= CanRead; + if (device->isReadable()) { + const QByteArray header = device->peek(28); + + if (HEIFHandler::isSupportedBMFFType(header) && HEIFHandler::isHeifDecoderAvailable()) { + cap |= CanRead; + } + + if (HEIFHandler::isSupportedHEJ2(header) && HEIFHandler::isHej2DecoderAvailable()) { + cap |= CanRead; + } } if (device->isWritable() && HEIFHandler::isHeifEncoderAvailable()) { diff --git a/src/imageformats/heif.json b/src/imageformats/heif.json index 02307c2..fbc2cca 100644 --- a/src/imageformats/heif.json +++ b/src/imageformats/heif.json @@ -1,4 +1,4 @@ { - "Keys": [ "heif", "heic" ], - "MimeTypes": [ "image/heif", "image/heif" ] + "Keys": [ "heif", "heic", "hej2" ], + "MimeTypes": [ "image/heif", "image/heif", "image/hej2k" ] } diff --git a/src/imageformats/heif_p.h b/src/imageformats/heif_p.h index 9fbe0ea..8bfafff 100644 --- a/src/imageformats/heif_p.h +++ b/src/imageformats/heif_p.h @@ -24,17 +24,18 @@ public: bool read(QImage *image) override; bool write(const QImage &image) override; - static bool canRead(QIODevice *device); - QVariant option(ImageOption option) const override; void setOption(ImageOption option, const QVariant &value) override; bool supportsOption(ImageOption option) const override; static bool isHeifDecoderAvailable(); static bool isHeifEncoderAvailable(); + static bool isHej2DecoderAvailable(); + + static bool isSupportedBMFFType(const QByteArray &header); + static bool isSupportedHEJ2(const QByteArray &header); private: - static bool isSupportedBMFFType(const QByteArray &header); bool ensureParsed() const; bool ensureDecoder(); @@ -57,6 +58,7 @@ private: static bool m_plugins_queried; static bool m_heif_decoder_available; static bool m_heif_encoder_available; + static bool m_hej2_decoder_available; static QMutex &getHEIFHandlerMutex(); };