From fb173c35e6ee4771f744d19c59df3e72b6bdc7ab Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 30 Apr 2026 19:18:55 +0300 Subject: [PATCH 1/4] Update MASA diff tool to use 0...1 range for spatial direction difference reporting. --- .../ivas_conformance/masa-diff-tool/README.md | 10 ++-- .../masa-diff-tool/masaDiffTool.c | 60 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/scripts/ivas_conformance/masa-diff-tool/README.md b/scripts/ivas_conformance/masa-diff-tool/README.md index abb9d9f04..fd633941f 100644 --- a/scripts/ivas_conformance/masa-diff-tool/README.md +++ b/scripts/ivas_conformance/masa-diff-tool/README.md @@ -1,6 +1,6 @@ # MASA-diff-tool -Version: 0.2.2 +Version: 0.3.0 ## Usage @@ -20,8 +20,8 @@ compared metadata files are identical. The summary contains: - Status for descriptive metadata difference - Overall status for spatial metadata difference - Across all frames max ABS and mean difference values for spatial metadata - - Overall max ABS diff in spatial direction (degrees) - - Overall mean ABS diff in spatial direction (degrees) + - Overall max ABS diff in spatial direction (scaled to range 0...1 from 0°...180°) + - Overall mean ABS diff in spatial direction (scaled to range 0...1 from 0°...180°) - Overall max ABS diff in direct-to-total ratio - Overall mean ABS diff in direct-to-total ratio - Overall max ABS diff in diffuse-to-total ratio @@ -47,8 +47,8 @@ When option `--csv` is given, then a frame-by-frame results is constructed in co - Frame index - Diff in descriptive metadata - Diff in number of directions -- Max ABS diff: Direction (degrees spatial angle) -- Mean ABS diff: Direction (degrees spatial angle) +- Max ABS diff: Direction (scaled to range 0...1 from 0°...180° spatial angle) +- Mean ABS diff: Direction (scaled to range 0...1 from 0°...180° spatial angle) - Max ABS diff: Direct-to-total ratio - Mean ABS diff: Direct-to-total ratio - Max ABS diff: Diffuse-to-total ratio diff --git a/scripts/ivas_conformance/masa-diff-tool/masaDiffTool.c b/scripts/ivas_conformance/masa-diff-tool/masaDiffTool.c index 22d97a4b3..7d4217f87 100644 --- a/scripts/ivas_conformance/masa-diff-tool/masaDiffTool.c +++ b/scripts/ivas_conformance/masa-diff-tool/masaDiffTool.c @@ -137,50 +137,50 @@ int main( int argc, char *argv[] ) for ( int n = 0; n < argc - 2; ++n ) { - if (strcmp(argv[n], "-h") == 0 || strcmp(argv[n], "--help") == 0) + if ( strcmp( argv[n], "-h" ) == 0 || strcmp( argv[n], "--help" ) == 0 ) { printUsage(); exit( EXIT_FAILURE ); // Will report non-zero so scripts do not succeed accidentally } - if (strcmp(argv[n], "--report") == 0) + if ( strcmp( argv[n], "--report" ) == 0 ) { - state.reportFilePtr = fopen( argv[n+1], "wt" ); + state.reportFilePtr = fopen( argv[n + 1], "wt" ); if ( state.reportFilePtr == NULL ) { fprintf( stderr, "Failed to open output report file for writing\n" ); - fprintf( stderr, "Path was: %s\n", argv[n+1] ); + fprintf( stderr, "Path was: %s\n", argv[n + 1] ); exit( EXIT_FAILURE ); } } - if (strcmp(argv[n], "--csv") == 0) + if ( strcmp( argv[n], "--csv" ) == 0 ) { - state.csvFilePtr = fopen( argv[n+1], "wt" ); + state.csvFilePtr = fopen( argv[n + 1], "wt" ); if ( state.csvFilePtr == NULL ) { fprintf( stderr, "Failed to open output CSV file for writing\n" ); - fprintf( stderr, "Path was: %s\n", argv[n+1] ); + fprintf( stderr, "Path was: %s\n", argv[n + 1] ); exit( EXIT_FAILURE ); } } } - state.refReader = MasaFileReader_open( argv[argc-2] ); + state.refReader = MasaFileReader_open( argv[argc - 2] ); if ( state.refReader == NULL ) { fprintf( stderr, "Failed to open ref file for reading\n" ); exit( EXIT_FAILURE ); } - state.cutReader = MasaFileReader_open( argv[argc-1] ); + state.cutReader = MasaFileReader_open( argv[argc - 1] ); if ( state.cutReader == NULL ) { fprintf( stderr, "Failed to open cut file for reading\n" ); exit( EXIT_FAILURE ); } - if (state.csvFilePtr != NULL) + if ( state.csvFilePtr != NULL ) { writeCsvHeader( state.csvFilePtr ); } @@ -231,7 +231,7 @@ int main( int argc, char *argv[] ) break; } - if (state.reportFilePtr != NULL) + if ( state.reportFilePtr != NULL ) { fprintf( state.reportFilePtr, "Frame %ld\n-----------\n", state.frame ); } @@ -245,7 +245,7 @@ int main( int argc, char *argv[] ) if ( isDiff_frame_descriptiveMeta && refMetadata->descriptive_meta.numberOfDirections != cutMetadata->descriptive_meta.numberOfDirections ) { isDiff_frame_spatialMeta = 1; - if (state.reportFilePtr != NULL) + if ( state.reportFilePtr != NULL ) { fprintf( state.reportFilePtr, "Difference in spatial metadata, number of directions differ\n" ); } @@ -278,12 +278,12 @@ int main( int argc, char *argv[] ) if ( !isDiff_frame_overall ) { - if (state.reportFilePtr != NULL) + if ( state.reportFilePtr != NULL ) { fprintf( state.reportFilePtr, "Metadata is identical\n" ); } } - if (state.reportFilePtr != NULL) + if ( state.reportFilePtr != NULL ) { fprintf( state.reportFilePtr, "\n" ); } @@ -327,7 +327,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) { if ( refMeta->descriptive_meta.formatDescriptor[n] != cutMeta->descriptive_meta.formatDescriptor[n] ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in format descriptor: " ); for ( int k = 0; k < 8; k++ ) @@ -348,7 +348,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.numberOfDirections != cutMeta->descriptive_meta.numberOfDirections ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in number of directions: %u != %u", refMeta->descriptive_meta.numberOfDirections, cutMeta->descriptive_meta.numberOfDirections ); } @@ -357,7 +357,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.sourceFormat != cutMeta->descriptive_meta.sourceFormat ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in source format: %u != %u", refMeta->descriptive_meta.sourceFormat, cutMeta->descriptive_meta.sourceFormat ); } @@ -366,7 +366,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.transportDefinition != cutMeta->descriptive_meta.transportDefinition ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in transport definition: %u != %u", refMeta->descriptive_meta.transportDefinition, cutMeta->descriptive_meta.transportDefinition ); } @@ -375,7 +375,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.channelAngle != cutMeta->descriptive_meta.channelAngle ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in channel angle: %u != %u", refMeta->descriptive_meta.channelAngle, cutMeta->descriptive_meta.channelAngle ); } @@ -384,7 +384,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.channelDistance != cutMeta->descriptive_meta.channelDistance ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in channel distance: %u != %u", refMeta->descriptive_meta.channelDistance, cutMeta->descriptive_meta.channelDistance ); } @@ -393,7 +393,7 @@ static int compareMasaFrameDescriptiveMeta( const MasaDiffToolState *state ) if ( refMeta->descriptive_meta.channelLayout != cutMeta->descriptive_meta.channelLayout ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in channel layout: %u != %u", refMeta->descriptive_meta.channelLayout, cutMeta->descriptive_meta.channelLayout ); } @@ -515,11 +515,11 @@ static int compareMasaFrameSpatialMeta( MasaDiffToolState *state, const int isDi if ( isDiff ) { - if (state->reportFilePtr != NULL) + if ( state->reportFilePtr != NULL ) { fprintf( state->reportFilePtr, "Difference in spatial metadata\n" ); - fprintf( state->reportFilePtr, "Max ABS diff in spatial direction (degrees): %f\n", maxAbsDiffDirection ); - fprintf( state->reportFilePtr, "Mean ABS diff in spatial direction (degrees): %f\n", meanAbsDiffDirection ); + fprintf( state->reportFilePtr, "Max ABS diff in spatial direction (scaled to range 0...1 from 0°...180°): %f\n", maxAbsDiffDirection / 180.0f ); + fprintf( state->reportFilePtr, "Mean ABS diff in spatial direction (scaled to range 0...1 from 0°...180°): %f\n", meanAbsDiffDirection / 180.0f ); fprintf( state->reportFilePtr, "Max ABS diff in direct-to-total ratio: %f\n", maxAbsDiffDirRatio ); fprintf( state->reportFilePtr, "Mean ABS diff in direct-to-total ratio: %f\n", meanAbsDiffDirRatio ); fprintf( state->reportFilePtr, "Max ABS diff in diffuse-to-total ratio: %f\n", maxAbsDiffDiffRatio ); @@ -546,8 +546,8 @@ static int compareMasaFrameSpatialMeta( MasaDiffToolState *state, const int isDi state->frame, isDiff_frame_descriptiveMeta, 0, // Always identical in this function - maxAbsDiffDirection, - meanAbsDiffDirection, + maxAbsDiffDirection / 180.0f, + meanAbsDiffDirection / 180.0f, maxAbsDiffDirRatio, meanAbsDiffDirRatio, maxAbsDiffDiffRatio, @@ -704,9 +704,9 @@ static void writeCsvHeader( FILE *csvFilePtr ) fprintf( csvFilePtr, "," ); fprintf( csvFilePtr, "Diff in number of directions" ); fprintf( csvFilePtr, "," ); - fprintf( csvFilePtr, "Max ABS diff: Direction (degrees spatial angle)" ); + fprintf( csvFilePtr, "Max ABS diff: Direction (scaled to range 0...1 from 0°...180° spatial angle)" ); fprintf( csvFilePtr, "," ); - fprintf( csvFilePtr, "Mean ABS diff: Direction (degrees spatial angle)" ); + fprintf( csvFilePtr, "Mean ABS diff: Direction (scaled to range 0...1 from 0°...180° spatial angle)" ); fprintf( csvFilePtr, "," ); fprintf( csvFilePtr, "Max ABS diff: Direct-to-total ratio" ); fprintf( csvFilePtr, "," ); @@ -805,8 +805,8 @@ static void printSummary( const MasaDiffToolState *state ) if ( state->isDiff_overall_spatialMeta ) { fprintf( stdout, "Spatial metadata is different.\n" ); - fprintf( stdout, "Overall max ABS diff in spatial direction (degrees): %3.2f\n", state->maxAbsDiffDirection_overall ); - fprintf( stdout, "Overall mean ABS diff in spatial direction (degrees): %3.2f\n", state->sumAbsDiffDirection / (float) state->sumAbsDiffDirectionValueCount ); + fprintf( stdout, "Overall max ABS diff in spatial direction (scaled to range 0...1 from 0°...180°): %3.2f\n", state->maxAbsDiffDirection_overall / 180.0f ); + fprintf( stdout, "Overall mean ABS diff in spatial direction (scaled to range 0...1 from 0°...180°): %3.2f\n", ( state->sumAbsDiffDirection / (float) state->sumAbsDiffDirectionValueCount ) / 180.0f ); fprintf( stdout, "Overall max ABS diff in direct-to-total ratio: %1.4f\n", state->maxAbsDiffDirRatio_overall ); fprintf( stdout, "Overall mean ABS diff in direct-to-total ratio: %1.4f\n", state->sumAbsDiffDirRatio / (float) state->sumAbsDiffDirRatioValueCount ); fprintf( stdout, "Overall max ABS diff in diffuse-to-total ratio: %1.4f\n", state->maxAbsDiffDiffRatio_overall ); -- GitLab From 5bc9d8514785fb79b4a6df487c25a665916cef75 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 30 Apr 2026 19:22:10 +0300 Subject: [PATCH 2/4] Update prebuilt Darwin binary for MASA diff tool. --- scripts/tools/Darwin/masaDiffTool | Bin 117312 -> 117312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/scripts/tools/Darwin/masaDiffTool b/scripts/tools/Darwin/masaDiffTool index be5e6dedee681592287daae749b23a4ce9729dc9..4ccd5fd42376fcf6001657c7e66a3e1fdd539e17 100755 GIT binary patch delta 9317 zcmX>wh5f)3_6-*Vgg$UFFfcMOFqD}xfWZf@$&Uo=gwh-!!ckyB28J|;$wq>9q6eVD z%b>y_KEveJgEk_L5cO-I5(SP73@j53r6+$7R1lPLf=G7oLS$toD+<{QF7bzmMnD7^ zmTWE*TFxY(7xwV(wM5h2T?;BcPBGG6I9Wr~g6V_M<|NTR*2xc~J^9Sd7#KeDN1XV~ zFTkp9HrZT8PQu%ifq`EGEW!bnjRCWNOwN^2G!#Neo;L+)g-GrPvm+1kYnvm&`xL*1=)KANWhODrcAgw8YvUnn%D~{!>H4OdRoaw+q0{w?M>ne|MC?H~t1wvX zg-16lFGTE0H!C+-?2bn_D=S3oL^mt5>E!FOzl3HRGcfS$9prBVg#*a>U6UWn=`h`O zoGd6WYWc{Rfx)BK^fj2`{b0<%u&bYef#HRS5d*_ZP#AsY7jT^dajumy+`0C~lMl#< zOfHu9G7Xqgmm+!7O_Q29ItAk8a-|9+oHgTML*#uC|?T2%=0^fGOVXh71h5_JJIKadMMl z4&%Sc?-j+Qn8A{!JYb5~0Ho#^NR6rfWO=1DrtkWb9hJoxZ%>}5Q9bTmgjw;2hs%b<&Vh@%HoW7 zCeKxtVKTOzyjxj@v2pSZWgWR6$_xzqK`H)4k}k;2djtOe|8Mwh*8-4JiYF_n*t31r zV_6KpLC(f+z<5Rwal-r&@vB3vyu**t8cyaLwPeKvJ$B zx_y5%zhv}CKIzeIbK=FD$rIJ2Wjx^8ydc_+YQgMWIr)UzOySpx3=EyE9v~~b_a=ZG zcyn@zy04J2CCE^aeNj3L3>z3;Y?ypmU0vvx1xz>=B3wS1M?+osAY3>BB5bEQ*-b-D zxC1U;4iRV7oLsM=ralA0yQTp$4eZkwAqrs6YaqGAaq=0BOb&U7TDQrzn(uj2wZV?@ zR|m&|pq4ae2t-6(eR8bUFFsZ=cp7@aDY-dSdn#l7FHjB!M{W%y49ZntVGykXazO15 zk6zPeU9ibWBDD|^PlTFWh=@5tBoZQ`iV#VIhzP?)>P<}{LX2=B(|Cx;du6!wf)J6r z2$3#`$Z3SgTS!RkM2KvIs9BB>ISElS6(Ld&Rn&|SS_)BAh!EKhF(@7((g;!GixAlX zQDcn|fu;dXgvc(48gYb(Wj(|oR)o-Ah@#J+o!3+hKdXf-L6-f z4={GRUU_*8oXo+-NqF>{T0zwCDo!ppNapyZ0ycQz?-}}V1VA`}lZ}jgI6%p91H+5IliQ5y>OX*rRdDhzQU{eoFLLEz$v;pI zn*O>&KX~+-9@GTe>kAX@HO*HCi&#TNx(2g*Ypb{3JyR;K#Ctg6)Qj# zFNI2Z^qL-rD4q-z0V%!%QCx5OQ-gtF1LKPdsGLWy=`4uqG^hwj^$mz>(=!mo-cTuz zUejENVoRt9Nbwb@;`tE8a!@IcUQ-8%Vjif-XMTYI*9%b9MG(~=W#Hi<3{ia_DgrY4 z3{5aJ>XXdOAXSCq%jxDgrV~0BY82P_Q$;$bw3F^qTfS z6h}ZsK#C=xiuXYj+d`#0dQIaYinXC4AjSR)P}LJ5ss*5O9=)bU5Y_*rA-)8u)_^Kb zfhc|qmGbB{{U;AjUl%8DGBps^5(a0p2k>krDZKfsX$d1^@#ZXZW=6*R$$1uqjDIIT zu-L-n!81AELUQtY%W$S^+>;+#$WKkp6S3JC`OmMx4>Zg&MJ|NjqF@eZP* z9Zf|6Ld6e=iqv{EB{2vk%u?Wd;f$sN)b4;J)FE4;v!riP%aLHPTf%ZBp}T%8K~-B({hNaiEvdq^$h$iJ`l^kflELn!?MB3Snol_ zyIp^L<`-~q0Hql>0hrIg1z-xuT*enx5DjZlHAH|?(Ps~SEsuiF{Gb#mz{?KTZUxrg z0MY-O5A3@6gO3*rlaj#Xo`9azDe?>q|5c}f$r)gB z7MPp^Cg*|41z>U!m|OxTmx0L@U~(0hTmvT8fyoW>3=BTKvK!?Y7#xHDt9tTpt_=)f zRWD9X%t=jAD9KkSO3X`7RWQ)g(=${^E6UGRFgUaU#IZ0qv_W&SU4-Q117U*1s-Ny? z!6-JlE>>cCt~sOF)PEID02gjM5@f>GpY6jA2BZD<5k{ zq`8}8V(pkF&xx1e0}Zn{FfcHHaGJyBWAR1;^%tOnDYu~X6Da)-O8`?bz|1fqpMja-LBVv7 zgN#a((;LNvE=VviGkg$bU}2cj0#fxsb#i}WVf_cu2TTii7w|t|dcg94Z2{W?@d<1N z4NMo9E-*GQPGEG{0O~0-FfddzGBEHlGB8Y#f{gV{g7QB|L->oJ`~W!!|1gxlK@q~g z2<2Z;f$-l!_(2Q>1`vTi5CMh;V+db_31T5=_yp9+*N5>dqI3~@Ct1%YL2rN-2pYY!5nNR1BlNw`Kf@lphW@1$Sn{F28+pt z2kk}QKt<0$ML~R~$*qFcqB{y9>Mfu$AU+dxU{2@*R1!8Y_n~mJ(xGom0@G~{esw9a zW@$R6G;PDyrHbG&I19(kNk_wsCvW&Uf${NV$6wZrS0+3DQk}f$*Kx0hY!f*d9e#Q; zGW_J=blACqS$>BG1H%LkL3XhC%4XRg5OFz(xFbwl1}ZKK5iexly!p2kqvQehiHZyi z6BHRZCO#5u2vTNXn2>D1F_D{hGTYxnjEs{Ve<@FX^H+uO{bs>`HjENT$`6S{l}B() zES{YDzXwH90xG$NW1`nqPDXJi#^ci!nHcS5c{mxSC@?ex9pq-1^1zvC;sbq#pG+bR zmlzoug3e8^Wny$-`N1*q*z|);j4Bo^oD=tOGfd%NU?_aSK3{4D1A{pu1B1v@4u~1E zxEZFbV2=CovcF*`LuKXk z9%pV=oU$QXj@GRh-CWmfQv@b1=3S`T zk(pz9n;_$2P-?o#4#^$o*gMvZhKU-C44{;CK`};u;svN2BLl+)MNrD( zXZU#RH_oU2gutP**HC9J`0%fRfw`W`>Cjj0}Il zE}fu1@u4uo&uK{NCxh6+5LYZ{M%B{;l7l*;b9$~YqqJ!gl2AQ}4b#eus_(|JW0rA?!dgu+2=m{wy{tpOl8s8-+Uu_BDp zmTpKw&LB2St2U}u8)&$J!^uHtqQ&%$B8bnUT?K zdZ!rUcSe)xjpB^PjOx?3iZjk;Vql&gB*AFJ_<4G(1mk?h)6-QY8M7HTOrHp%rf&Z$ z$tcZO|3U^*9e_;a;C1-P!N~COh4_3a4}OF=124D`yP$YNY~mzVhAAMmAh89`F?%}F zRs=CJs>?mpXV}Xip(uwObYRDOh)--~Wtj3%-(fF8U(_C`S|QXF(IGLhYWhTJMg^8L zk`oK3Zw0X`q$XxezX@V#NKcHP{uji$Aw4l{x}prD0!xp~MBnMIAeM{lM3?EAAQpq% zMC<9jAl3}IiAK{mf>;+W{ z545LS$ueq7sv}9eI_!O*4wY7)UI&s^Mw0e)*!w^kDy=;I5J*}cN!r(8?*nsNj!|9&6!=Vx>T(Pc zN^%RGqxL9DD9KH~AjjyyIA^+`JfjRJGvmd-)yymZ9-eL{xLVscd3&WK23=AS1 z3=AJQI30ejV3z;EzzB_B6@!TtETHB<{Ez7q&om>89m=Yf0+O+KipXMyoVGqB~;>l7Gexi2URm`>Dz2rN@z zG&X!;I#CwPMRJ@cYQAG+VA!B|#B8E4Slx6kMMh)J1?Cf3AY3;^MtRN#i;2IOL0+7m z2a-*(ocJ2TT?LZ$u>#fWQ(o{-zXX!iu%37cBFm@5D9_1ZGw}q3Yo^3#%=l({mJ*}1 zkb}^~P0Wy{#NTS?mH(L;r@!W6l-#~SiE$%yn1j&72kZ<#k1;V!VE}d3D-oNxw2emOhc{UD>I(2^1cW`-Sw3@i*U9)rYpG) z-!L|??BJZiHbu09y@l}uV*~R6#)>734i^L=_QAT_Jf4tFAFR9m1ImYWw|{s;%6cs&EdmNbX}tS2r2<->a7U!Z(kJ#iH)h<;d49F(Mx zd*Uyk@doXQGgv^!N)9tHFfeYfJe2?S8eL29~nt<&1-jeZdq@uqbI6nV>eCjz~2{9Q7yZRcKqFUGA865>nVXI z@tmb={vBC&+>+n3>g=;;dlfHTnzp6Rf&FN zB{yB+Bx8fZyaS=fMGA^+K0FrZeU;qFB delta 8648 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 NFIW)De(y Date: Thu, 30 Apr 2026 19:37:37 +0300 Subject: [PATCH 3/4] Add new pre-built binary of MASA diff tool for Linux. --- scripts/tools/Linux/masaDiffTool | Bin 34288 -> 29560 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/scripts/tools/Linux/masaDiffTool b/scripts/tools/Linux/masaDiffTool index 84ade9d56ef08f62c5793c9039f641c6bb146ad4..baa0e0a2c1533bdda085ad6f4600cb8ee76ed44e 100755 GIT binary patch literal 29560 zcmb<-^>JfjWMqH=W(GS35YIpxBH{p{7!e|Bo2p^=6 z6~u({Vd5~lP#+}8zyPCR;vjus`(PeIqkjlO^ucIkeW0*Wh=s^2A> zNEoEg0IJUbst-mpfE0j?g3_??1i2A}EuiM1(*__t3=9k~8eLxoR3AF+0@VkjL3V(I zf}fV8fY|8v!1yqGU^L9W0I0qbejrmA7|`hwh%f_;2H61;3Vd3U0ty!pn-~m><{+qj zxZ>dfG#p_xD851F>*r)9nVIP4r0C{k=9O0HR#=$nnwjVo=j$1Pq`_%kfq{Vml&0MM zLP61T0OVF^FfuSTFo5|m^FVSU3=H6O4^p4;bXWI(sV5$1JXXK_GKIC`6VnrGkQ$J? zL3%)HKo)__gE|q!1?v}QU;yV)aCk5_GB7X-FoDD*!73OSG-P{ZE~cK#wfxi#%RW#U z1m(uSz#xR+!dW#q#Cvdvug4({@&hP*;08k(X*kq3;t-F*A$|{sIH;Jy=C4E?>Yw5e zzm7xv6AtkZ9OAMJ3=G)90hIi)xpN8*bJ}r;zs4cH5Qn%94)@GrU|K)M3GsJs__{OKC7Nw?V7MG+Jh4?z>C1GOJPM>aQ z5CA181_lNVXgviJzW{ANaG<3R82?5-$aIiPL9T(YLF5A@aZuR`5(D8ENaCO}5+nw~ zACSbwKmt(w14�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⪻KG>Y<_VB`Na|B7k9n~Ow8Na_+Bst@O@zN=KI0q&DX#j0ur48 z@}e__7ah5ogSh!#FvajSFz51tkBkGk6O^WQJpTV56kiOkd;)DCcQ!M-@F~=B@kzMw z2{`g`ICHzfn4tY-44^T?Cy)RChn<1r1KNMi#K7?3@&Es;LFX9|a(e?4vlb`LU}XS# ze-0A^L%`er{|!Om>cuC}%#_T>;S3s)0tt-b(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7 z0rU`noo{*pbOsaXybP!U&>5*9CaenvI)fF&2OTX2qQQ-P1_lODe-y+|u?LY146w6B zVdtnyLxdSXtNB1oDG-5lo+_vh2@-U*%?L`O4Gl0&T1D($cr4^vG0hD%t(qOeD5U_K3-JPAS6f{DUO7lue6%38_ zjP(q3%}T*sqdFrKJp&UxLrtgzKI1{jg@xhce{?mV_y?U?+yjju*!&ad%vWscL4zSo z3<3-S;7%+919*%8G_ManFIj-00V)n2BVb@)umayJfN8HQRDA+8AH&?`4i%q(CJs7x z9Aqyn-^0{{#uykGq!>Iv45ab^G>*c^AO=4N8K!N93)y9hqwt2aW@>|kxZa7y)nZf4Tt(l9OB*J z@I-PTlsSuufkBW-k^xqZK!q8WgTxtx7!H6=>q9E%LF1@`pc@FlYqb$)fS<=GZL;X}{P&!938q8S_RxiMy0Cf*|Y?y(8VLvnWbNz3D)HCsb0tu`iMu6HA zLZC(sG(5p$oeT^NUqI>^1Q-&a;;=9gWr5^J*tzPkb^t?ga#4w)UOq#7d}2~&d`V(D z1M-?Ky<`UP>HOg3UJRgRNU6@nWj>jCsSL?QCB-GBX=!@N42bIm;!ASllR*~@fUW~b z$&XLZ$xlkmiBBoXFDi~tEUjPwt+2>RElEw$Ghm31$D#ss#(!pfVo_0IWqfL0Nl_&O zcw#g@r8GCU5_DStXpRNKiwCV(Kv9}mmRKB+SX5H1mkjnsJZMo=JZLFOYLQ+tLwvkj zkfX0_ysMuJ=(+=!NIyqkPiKbscz3_hcvlaotcObwL%h3>zmua+yuX`Uuxm(sh@+E_ zYdq+#1JKn64zRleK-UDM6{V)42!QS)$VeJpd8K*OFs}E0|V&ZFOU4SyiYN-F=`tw1m7#IxVAv9>+3xowB zVftY-8@T@txsML40+!*S3vpoffaQ?-Z7@C$bbtZU^yUxF8L}(m+e_ cFnb}gpuP=K*uexD7#L<`K{!%q8ql~50P1i9zW@LL literal 34288 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 A9RL6T -- GitLab From a8648f4c9d90beab8c475aa9cc5b4fd59b9a194f Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Fri, 1 May 2026 08:36:52 +0200 Subject: [PATCH 4/4] MSVC-compiled executable --- scripts/tools/Win32/masaDiffTool.exe | 4 ++-- scripts/tools/Win32/wav-diff.exe | 0 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 scripts/tools/Win32/masaDiffTool.exe mode change 100644 => 100755 scripts/tools/Win32/wav-diff.exe diff --git a/scripts/tools/Win32/masaDiffTool.exe b/scripts/tools/Win32/masaDiffTool.exe old mode 100644 new mode 100755 index 3fd7f08ae..482418fd1 --- a/scripts/tools/Win32/masaDiffTool.exe +++ b/scripts/tools/Win32/masaDiffTool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61e2e4234e68c2af1d221ea2490be954299eecf1f3046b24b8a0c24ce99f3528 -size 60928 +oid sha256:43bdd2ef827b62b5894524c1b2c513a2bb1f209bf0126a22d6b09aca2e2dc26f +size 26624 diff --git a/scripts/tools/Win32/wav-diff.exe b/scripts/tools/Win32/wav-diff.exe old mode 100644 new mode 100755 -- GitLab